找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 632|回复: 1
打印 上一主题 下一主题
收起左侧

单片机驱动LCD12864串行不显示

[复制链接]
跳转到指定楼层
楼主
12864串行不显示,是原理图有问题吗,还是程序有问题?

  1. /********************************************************************
  2. * 名称 : writebyte()
  3. * 功能 : 按照液晶的串口通信协议,发送数据
  4. * 输入 : zdata
  5. * 输出 : 无
  6. ***********************************************************************/
  7. void writebyte(unsigned char zdata)
  8. {
  9.         for(i=0; i<8; i++)
  10.         {
  11.                 if((zdata << i) & 0x80)
  12.                 {
  13.                         rw = 1;
  14.                 }
  15.                 else
  16.                 {
  17.                         rw = 0;
  18.                 }
  19.                 en = 0;
  20.                 en = 1;
  21.         }
  22. }
  23. /********************************************************************
  24. * 名称 : write_com()
  25. * 功能 : 写串口指令
  26. * 输入 : cmdcode
  27. * 输出 : 无
  28. ***********************************************************************/
  29. void write_com(unsigned char cmdcode)
  30. {
  31.         writebyte(0xf1);
  32.         writebyte(cmdcode);
  33.         writebyte(cmdcode << 4);
  34. }
  35. /********************************************************************
  36. * 名称 : write_data()
  37. * 功能 : 写串口指令
  38. * 输入 : cmdcode
  39. * 输出 : 无
  40. ***********************************************************************/
  41. void write_data(unsigned char Dispdata)
  42. {
  43.         writebyte(0xfb);
  44.         writebyte(Dispdata);
  45.         writebyte(Dispdata << 4);
  46. }

  47. /**********************************************************
  48. *函数名: addr_12864
  49. *功能:写地址
  50. *说明:写汉字时要写个地址
  51. *输入:无
  52. *返回:无
  53. **********************************************************/
  54. void addr_12864(uchar hang,uchar lie)          //地址转换
  55. {
  56.         uchar address;
  57.         switch(hang)
  58.         {
  59.                 case 1: address=0x80 + lie ;         //计算12864第一行的地址
  60.                                 break;
  61.                 case 2: address=0x90 + lie ;         //计算12864第二行的地址
  62.                                 break;
  63.                 case 3: address=0x88 + lie ;         //计算12864第三行的地址
  64.                                 break;
  65.                 case 4: address=0x98 + lie ;         //计算12864第四行的地址
  66.                                 break;
  67.                 default :
  68.                                 break;
  69.         }        
  70.         write_com(address);                                        //写地址给12864
  71. }


  72. /***********************lcd12864上显示3位十进制数************************/
  73. void write_lcd3(uchar hang,uchar add,uint date)
  74. {
  75.         addr_12864(hang,add);                          //写12864地址
  76.          if(date/100%10 == 0)
  77.                 write_data(' ');
  78.         else
  79.                 write_data(0x30+date/100%10);  //显示百位数
  80.         write_data(0x30+date/10%10);          //显示十位数
  81.         write_data(0x30+date%10);                  //显示个位数
  82. }

  83. /***********************lcd12864上显示2位十进制数************************/
  84. void write_lcd2(uchar hang,uchar add,uint date)
  85. {
  86.         addr_12864(hang,add);                          //写12864地址
  87.          write_data(0x30+date/10%10);          //显示十位数
  88.         write_data(0x30+date%10);                  //显示个位数
  89. }

  90. /**********************************************************
  91. *函数名: write_string
  92. *功能:在12864上显示字符数据
  93. *说明:
  94. *输入:无
  95. *返回:无
  96. **********************************************************/
  97. void write_string(uchar hang,uchar lie,uchar *p)
  98. {
  99.         addr_12864(hang,lie);          //写12864地址
  100.         while(1)                                                                                                                 
  101.         {
  102.                 if(*p == '\0')  break;        //\0字符串的结尾标志  break结束while循环 结束写字符
  103.                 write_data(*p);            //写数据
  104.                 p++;                    //指针地址加1  
  105.         }        
  106. }

  107. /*****************控制光标函数********************/
  108. void write_guanbiao(uchar hang,uchar lie,uchar date)
  109. {               
  110.         addr_12864(hang,lie);          //写12864地址
  111.         if(date == 1)
  112.                 write_com(0x0f);     //显示光标并且闪烁        
  113.         else
  114.                 write_com(0xc0);   //关闭光标
  115. }         

  116. /********************************************************************
  117. * 名称 : init_12864()
  118. * 功能 : 初始化函数
  119. * 输入 : cmdcode
  120. * 输出 : 无
  121. ***********************************************************************/
  122. void init_12864()
  123. {  
  124.         write_com(0x30);         //功能设置 基本指令
  125.         write_com(0x0c);         //开显示 不显示光标
  126.         write_com(0x01);         //清屏
  127.         write_string(1,0,"PM2.5:000ug/m3  ");          //初始化12864显示
  128.         write_string(2,0,"温度:00℃      ");          //初始化12864显示
  129.         write_string(3,0,"湿度:00%       ");          //初始化12864显示
  130.         write_string(4,0,"一氧化碳000 PPM ");          //初始化12864显示
  131. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:992677 发表于 2023-4-1 23:31 | 只看该作者
E和R/W接P2.6和P2.7
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表