微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > LCD使用时需要注意的几个小问题,AT89C51写入字符LCD点阵源代码分享

LCD使用时需要注意的几个小问题,AT89C51写入字符LCD点阵源代码分享

时间:04-26 来源:网络整理 点击:

要提醒大家的是,要用布沾上清洁剂再去擦,而不要将清洁济直接喷到显示屏幕表面,因为这样容易流到屏幕里面导致LCD屏幕内部出现短路故障,造成不必要的损失。

  用C51写的1602字符型LCD程序:

  //FileName:delay.h

  #ifndef __LZP_DELAY_H_

  #define __LZP_DELAY_H_

  #define TRUE 1

  #define FALSE 0

  //设置波特率

  #define OSC_FREQ 11059200L

  #define BAUD_115200 256 - (OSC_FREQ/192L)/115200L // 255

  #define BAUD_57600 256 - (OSC_FREQ/192L)/57600L // 254

  #define BAUD_38400 256 - (OSC_FREQ/192L)/38400L // 253

  #define BAUD_28800 256 - (OSC_FREQ/192L)/28800L // 252

  #define BAUD_19200 256 - (OSC_FREQ/192L)/19200L // 250

  #define BAUD_14400 256 - (OSC_FREQ/192L)/14400L // 248

  #define BAUD_9600 256 - (OSC_FREQ/192L)/9600L // 244

  // TImer2

  #define RCAP2_50us 65536L - OSC_FREQ/240417L

  #define RCAP2_1ms 65536L - OSC_FREQ/12021L

  void delay_ms(unsigned int num);

  void delay_50us(unsigned char num);

  void delay_us(unsigned char num);

  #endif

  //FileName:delay.c

  /********************************************

  ** start51 study board

  ** delay funcTIon implementaTIon

  ** author:bluehacker《kernelpaniccrash At gmail.com》

  ** QQ:282074921

  **********************************************/

  #include "delay.h"

  #include "reg52.h"

  void delay_ms(unsigned int num)

  {

  RCAP2H = (RCAP2_1ms》》8);

  RCAP2L=(RCAP2_1ms&0x00ff);

  TH2=(RCAP2_1ms》》8);;

  TL2=(RCAP2_1ms&0x00ff);;

  ET2 = 0; // Disable TImer2 interrupt

  T2CON = 0x04; // 16-bit auto-reload, clear TF2, start timer

  while (num--)

  {

  while (!TF2);

  TF2 = FALSE;

  }

  TR2 = FALSE;

  }

  void delay_50us(unsigned char num)

  {

  RCAP2H=(RCAP2_50us》》8);

  RCAP2L=(RCAP2_50us&0x00ff);

  TH2=(RCAP2_50us》》8);

  TL2=(RCAP2_50us&0x00ff);

  ET2=0;

  T2CON=0x04;

  while(num--)

  {

  while(!TF2)

  TF2=FALSE;

  }

  TR2=FALSE;

  }

  void delay_us(unsigned char num)

  {

  unsigned char i;

  for (i=0;i《num;i++)

  {

  }

  }

  //FileName:lcd.h

  #ifndef __LZP_LCD_H_

  #define __LZP_LCD_H_

  #include "reg52.h"

  /////////////////////////////

  //定义LCD控制引脚

  ////////////////////////////

  sbit LCDRS="P2"^0;

  sbit LCDRW="P2"^1;

  sbit LCDE="P2"^2;

  void lcd_write_cmd(unsigned char cmd);

  void lcd_write_data(unsigned char dat);

  void lcd_clear(void);

  void lcd_init(void);

  unsigned char lcd_status(void);

  void lcd_set_mode(unsigned char cursor, unsigned char text);

  void lcd_write_str(unsigned char x,unsigned char y,unsigned char *s);

  void lcd_write_char(unsigned char x,unsigned char y, unsigned char d);

  #endif

  //FileName:lcd.c

  /********************************************************

  **本开发板支持1602 字符型LCD

  **这种LCD的接口资料可以用google找到很多

  **引脚定义:

  * 1---GND

  * 2---VDD

  * 3---VLCD:对比度调节

  * 4---RS:寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器

  * 5---R/W:读写信号线,高电平时进行读操作,低电平时进行写操作。

  当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平

  RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。

  * 6---E:使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

  * 7~14---DB0~DB7数据线、

  * 15---A:背光引脚,"A"接正

  * 16---K:背光引脚,"K"接负

  ** author:bluehacker《kernelpaniccrash AT gmail.com》

  ** QQ:282074921

  **date :2007-11-15

  *********************************************************/

  #include "lcd.h"

  #include "delay.h"

  #include "intrins.h"

  /*向LCD写入命令*/

  void lcd_write_cmd(unsigned char cmd)

  {

  unsigned char status;

  P0=cmd;

  LCDRS="0";

  LCDRW="0";

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top