您好,欢迎访问本站!
商品分类

控制器HD44780驱动资料2004液晶测试程序

作者: qpzmg

前两天在淘宝上拍了四块2004液晶,为了测试一下,于是就东拼西凑弄了两个C51的测试程序,一个是连接八条数据线的,另一个是连接四条数据线的。在下图的2004液晶上测试通过。

两个C51单片机的测试程序,一个是连接八条数据线的,另一个是连接四条数据线的。附件里有原程序和proteus仿真文件。

2004液晶测试程序,控制器HD44780。
Snap3.jpg
Snap4.jpg

单片机源程序如下:

  1. /*=========================================================
  2. LCD2004模拟口线接线方式 连接线图:                                                  =
  3. —————————————————-          =
  4. | LCM—–51   | LCM—–51     | LCM——51  |   |          =
  5. —————————————————|          =
  6. |              | RS ——-P3.5 |                                   |          =
  7. |              | RW——- GND  |                                   |          =
  8. |              | E ——–P3.4 |                                   |          =
  9. |              |                                |                                   |          =
  10. | DB4—–P0.4 |                                 |                                   |          =
  11. | DB5—–P0.5 |                                 |                                   |          =
  12. | DB6—–P0.6 |                                 |                                   |          =
  13. | DB7—–P0.7 |                                 |                                   |          =
  14. —————————————————-          =
  15. [注:AT89S51 使用 11.0592M 晶体震荡器]                                          =
  16. =========================================================*/
  17. #include <reg51.h>
  18. #define uchar unsigned char
  19. #define uint unsigned int
  20. sbit LCM_RS=P3^5; //定义引脚
  21. sbit LCM_E =P3^4;
  22. sbit LED   =P2^5;//LED 的输出锁存端
  23. sbit dula  =P2^6;//数码管的段锁存端        74HC573
  24. sbit wela  =P2^7;//数码管的位锁存端
  25. #define LCM_Data  P0
  26. #define Busy 0x80 //用于检测 LCM 状态字中的 Busy 标识
  27. uchar num;
  28. uchar code table0[]=”ABCDEFGHIJKLMNOPQRST”;
  29. uchar code table1[]=”01234567890123456789″;
  30. uchar code table2[]=”UVWXYZ!@#%&?+<[>]*-;”;
  31. uchar code table3[]=”abcdefghijklmnopqrst”;
  32. void delay(uint z)//延时函数
  33. {
  34.         uint x,y;
  35.         for(x=z;x>0;x–)
  36.                 for(y=110;y>0;y–);
  37. }
  38. //写数据 RS=H,RW=L,D0~D7=数据,E=高脉冲
  39. void WriteDataLCM(uchar Data)  
  40. {      
  41.         LCM_RS = 1;
  42.         LCM_E  = 0;
  43.         LCM_Data =(Data & 0xF0);
  44.         LCM_E  = 1;
  45.         delay(5);
  46.         LCM_E  = 0;
  47.         LCM_Data =(Data & 0x0F)<<4;
  48.         LCM_E  = 1;
  49.         delay(5);
  50.         LCM_E  = 0;
  51. }
  52. //写指令 RS=L,RW=L,D0~D7=指令码,E=高脉冲
  53. void WriteCommandLCM(uchar Command)
  54. {
  55.         delay(5);       //短暂延时,代替检测忙状态
  56.         LCM_RS = 0;
  57.         LCM_E  = 0;
  58.         LCM_Data =( Command & 0xF0);
  59.         LCM_E  = 1;
  60.         delay(5);
  61.         LCM_E  = 0;
  62.         LCM_Data =( Command & 0x0F )<<4;
  63.         LCM_E  = 1;
  64.         delay(5);
  65.         LCM_E  = 0;
  66. }
  67. //读数据 RS=H,RW=H,E=H
  68. //读状态 RS=L,RW=H,E=H
  69. //由于不要检测忙,所以读数据和读状态两个函数省略
  70. void LCMInit(void)     //LCM 初始化
  71. {
  72.         WriteCommandLCM(0x03);
  73.         delay(5);
  74.         WriteCommandLCM(0x02);
  75.         delay(5);        
  76.         WriteCommandLCM(0x28); //显示模式设置,开始要求每次检测忙信号
  77.         WriteCommandLCM(0x0C);
  78.         WriteCommandLCM(0x06); // 显示光标移动设置
  79.         WriteCommandLCM(0x01);
  80.         delay(5);
  81. }
  82. void main(void)
  83. {
  84.         LED=0; //将LED的锁存端关闭
  85.         dula=0;//将数码管的段锁存端关闭
  86.         wela=0;//将数码管的位锁存端关闭
  87.     LCMInit();         //LCM 初始化
  88.         //第一行显示
  89.         WriteCommandLCM(0x80+0x00);
  90.         for(num=0;num<20;num++)
  91.         {
  92.                 WriteDataLCM(table0[num]);
  93.                 delay(250);
  94.         }
  95.         //第二行显示
  96.         WriteCommandLCM(0x80+0x40);         
  97.         for(num=0;num<20;num++)
  98.         {
  99.                 WriteDataLCM(table1[num]);
  100.                 delay(250);
  101.         }
  102.         //第三行显示
  103.         WriteCommandLCM(0x80+0x14);         
  104.         for(num=0;num<20;num++)
  105.         {
  106.                 WriteDataLCM(table2[num]);
  107.                 delay(250);
  108.         }
  109.         //第四行显示
  110.         WriteCommandLCM(0x80+0x54);         
  111.         for(num=0;num<20;num++)
  112.         —–限于篇幅余下内容下载附件———-

复制代码


2004液晶测试程序,控制器HD44780。

程序下载 https://www.yleee.com.cn/thread-2409-1-1.html

发表回复

登录后才能评论