| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- #include<reg51.h>
-
- #define uchar unsigned char
- #define LCMdata P2
- #define Busy 0x80
-
- sbit RS=P0^7;
- sbit RW=P0^6;
- sbit E=P0^5;
- sbit REST=P0^3;
-
- void Display_String(uchar line,uchar *string);
- void Wr_Data(uchar wrdata); //写数据
- void Wr_Command(uchar wrcommand,busyc); //写指令
- void RDbf(void);//读忙状态
- void Lcm_Init(void);//液晶初始化
- void Delay5Ms(void);//延时 5ms
-
- uchar code string_1[] = {""};
- uchar code string_2[] = {""};
- uchar code string_3[] = {""};
- uchar code string_4[] = {""};
-
- void main(void)
- {
- Lcm_Init();
- Display_String(1,string_1);
- Display_String(2,string_2);
- Display_String(3,string_3);
- Display_String(4,string_4);
- while(1);
- }
-
- void Display_String(uchar line,uchar *string)
- {
- uchar addr,i;
- if(line==1)
- addr=0x80;
- if(line==2)
- addr=0x90;
- if(line==3)
- addr=0x88;
- if(line==4)
- addr=0x98;
- Wr_Command(addr,1);
- for(i=0;i<16;i++)
- {
- Wr_Data(*string++);
- }
- }
-
- void Wr_Data(uchar wrdata) //写数据
- {
- RDbf();
- RS=1;
- RW=0;
- E=1;
- LCMdata=wrdata;
- E=0;
- }
-
- void Wr_Command(uchar wrcommand,busyc) //写指令
- {
- if(busyc)
- RDbf();
- RS=0;
- RW=0;
- E=1;
- LCMdata=wrcommand;
- E=0;
- }
-
- void RDbf(void) //读忙状态
- {
- while(1)
- {
- RS=0;
- RW=1;
- E=0;
- LCMdata=0xFF;
- E=1;
- if((LCMdata&Busy)==0)
- break;
- }
- }
- void Lcm_Init(void)
- {
- Delay5Ms();
- REST=1;
- REST=0;
- REST=1;
- Wr_Command(0x30,0);
- Delay5Ms();
- Wr_Command(0x30,0); //2次显示模式设置,不用判忙
- Delay5Ms();
- Wr_Command(0x0C,1); //开显示及光标设置
- Delay5Ms();
- Wr_Command(0x01,1); //显示清屏
- Delay5Ms();
- Delay5Ms();
- Wr_Command(0x06,1); //显示光标移动设置
- Delay5Ms();
- }
- void Delay5Ms(void) //延时 5ms
- {
- unsigned int TempCyc=5552;
- while(TempCyc--);
- }
|