自己学了很长时间,功夫不负有心人,终于懂点了!!
- #include <reg51.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar code table1[]="SMILE -_-!"; //第一行需要的字符
- uchar code table2[]="HI,HONEY!_HYC";//第二行需要的字符
- sbit RS=P2^0;
- sbit RW=P2^1;
- sbit E=P2^2;
- void delay(uint t)//延时程序
- {
- uint i,j;
- for(i=t;i>0;i--);
- for(j=110;j>0;j--);
- }
- void write_com(uchar com)//写指令
- {
- RS=0;
- RW=0;
- P0=com;
- delay(5);//延时,给硬件反应时间
- E=1;
- delay(5);
- E=0;
- }
- void write_date(uchar date)//写数据
- {
- RS=1;
- RW=0;
- P0=date;
- delay(5);
- E=1;
- delay(5);
- E=0;
- }
- void init()//LCD初始化
- {
- E=0;
- delay(15);
- write_com(0x38); //设置8位格式
- delay(5);
- write_com(0x38);
- delay(5);
- write_com(0x38); //连续3次,确保成功
- delay(5);
- write_com(0x0c);//设置开显示,不显示光标
- delay(5);
- write_com(0x06);//每次写数据后地址指针加1
- delay(5);
- write_com(0x01);//清屏
- delay(5);
- }
- void main()//主程序
- {
- uchar x,y;
- init();
- write_com(0x80);//第一行地址基数
- for(x=0;x<10;x++)
- {
- write_date(table1[x]);
- delay(5);
- }
- write_com(0xC0);//第二行地址基数
- for(y=0;y<13;y++)
- {
- write_date(table2[y]);
- delay(5);
- }
- while(1);
- }
复制代码
下载:
lcd1602.zip
(34.92 KB, 下载次数: 44)
|