51单片机兼容的一个lcd2004程序,液晶显示成功:
- /************************************************************************************************/
- /*** LCD2004液晶显示 ***/
- /*** 2018-10-9 ***/
- /************************************************************************************************/
- #include<aduc812.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define DATA P0 //定义LCM数据总线至P0
- sbit RS=P2^5; //寄存器选择位(0指令1数据)
- sbit RW=P2^6; //设置读写位(0写入1读取)
- sbit E=P2^7; //使能为(0禁止1允许)
- sbit BF=P1^7;
- //uchar line1[]="LCM TEST PROGRAM"; //第一行显示字符
- //uchar line2[]="Everything is OK!"; //第二行显示字符
- //uchar line3[]="aaaaaaaaaaaaaaa"; //第三行显示字符
- //uchar line4[]="bbbbbbbbbbbbbbb"; //第四行显示字符
- void Init_LCD(void); //声明液晶初始化设置函数
- void write_cmd(uchar); //声明写指令函数
- void write_data(uchar); //声明写数据函数
- void check_BF(void); //声明检测忙信号函数
- void delay_1ms(uint); //声明延时函数
- void set_xy(uchar x,uchar y); //声明显示位置
- void display(uchar x,uchar y,uchar *s); //声明显示函数
- /*********************1ms延时函数****************************************************************/
- void delay_1ms(uint x)
- {
- uint i,j;
- for(i=1;i<x;i++)
- for(j=1;j<120;j++);
- }
- /*********************液晶初始化函数*************************************************************/
- void Init_LCD(void)
- {
- write_cmd(0x38); //设置8位格式,2行,5x7
- write_cmd(0x01); //设定输入方式,增量不移位
- write_cmd(0x06); //整体显示,关光标,不闪烁
- write_cmd(0x0c); //清除屏幕显示
- }
- /**********************写指令函数******************************************************************/
- void write_cmd(uchar com)
- {
- check_BF();
- RS=0;
- RW=0;
- DATA=com;
- delay_1ms(2);
- E=1;
- delay_1ms(2);
- E=0;
- }
- /**********************写数据函数*******************************************************************/
- void write_data(uchar chardata)
- {
- check_BF();
- RS=1;
- RW=0;
- DATA=chardata;
- delay_1ms(2);
- E=1;
- delay_1ms(2);
- E=0;
- }
- /**********************检查忙碌函数******************************************************************/
- void check_BF(void)
- {
- E=0;
- do
- {
- BF=1;
- RS=0;
- RW=1;
- E=1;
- }while(BF==1);
- }
- /**********************定义显示位置*******************************************************************/
- void set_xy(uchar x,uchar y)
- {
- uchar add;
- if(x==0)
- add=0x80+y;
- else
- if(x==1)
- add=0xc0+y;
- else
- if(x==2)
- add=0x94+y;
- else
- if(x==3)
- add=0xd4+y;
- write_cmd(add);
- }
- /**********************显示函数***********************************************************************/
- void display(uchar x,uchar y,uchar *s)
- {
- set_xy(x,y);
- while(*s)
- {
- DATA=*s;
- write_data(*s);
- s++;
- }
-
- }
- /**********************主函数*************************************************************************/
- void main()
- {
- Init_LCD();
- while(1)
- {
- display(0,0,"line1");
- display(1,0,"line2");
- display(2,0,"line3");
- display(3,0,"line4");
-
- }
- }
复制代码
|