找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机LCD1602不显示数字,程序有问题 求帮助

查看数: 3254 | 评论数: 8 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-4-15 20:36

正文摘要:

程序,谢谢各位大佬 #include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit RS=P2^0; sbit RW=P2^1; sbit E=P2^2; #define LCD1602_GPIO P1 void LCD1602_WriteCom(uchar com); ...

回复

ID:155507 发表于 2020-4-16 10:24
void Delayms(uint a)
{
   uint i,j;
   for(j=0;j<a;j++)
   {
      for(i=o;i<125:i++);
   }
}   


给你改了,对比一下就知道哪里错了。


  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit RS=P2^0;
  5. sbit RW=P2^1;
  6. sbit E=P2^2;
  7. #define LCD1602_GPIO P1
  8. void LCD1602_WriteCom(uchar com);
  9. void LCD1602_WriteDat(uchar dat);
  10. void LCD1602_Init();
  11. void Delayms(uint a);
  12. uchar Disp_PromNUM[]="NUM:";
  13. uchar Disp_PromNAME[]="NAME:";
  14. uchar Disp_Num[]="1730120526";
  15. uchar Disp_Name[]="SHI LEI";
  16. void main(void)
  17. {
  18.    uchar i;
  19.    LCD1602_Init();
  20.    for(i=0;Disp_PromNUM[i]!='\0';i++)
  21.    {
  22.       LCD1602_WriteDat(Disp_PromNUM[i]);
  23.           Delayms(2);
  24.    }
  25.    LCD1602_WriteCom(0x84);
  26.    for(i=0;i<8;i++)
  27.    {
  28.       LCD1602_WriteDat(Disp_Num[i]);
  29.           Delayms(2);
  30.    }
  31.    LCD1602_WriteCom(0xc0);
  32.    for(i=0;Disp_PromNAME[i]!='\0';i++)
  33.    {
  34.       LCD1602_WriteDat(Disp_PromNAME[i]);
  35.           Delayms(2);
  36.    }
  37.    LCD1602_WriteCom(0xC5);
  38.    for(i=0;Disp_Name[i]!='\0';i++)
  39.    {
  40.       LCD1602_WriteDat(Disp_Name[i]);
  41.           Delayms(2);
  42.    }
  43.    while(1);
  44. }
  45. void LCD1602_WriteCom(uchar com)
  46. {
  47.    E=0;
  48.    RS=0;
  49.    RW=0;
  50.    LCD1602_GPIO=com;
  51.    Delayms(1);
  52.    E=1;
  53.    Delayms(5);
  54.    E=0;
  55. }
  56. void LCD1602_WriteDat(uchar dat)
  57. {
  58.    E=0;
  59.    RS=1;
  60.    RW=0;
  61.    LCD1602_GPIO=dat;
  62.    Delayms(1);
  63.    E=1;
  64.    Delayms(5);
  65.    E=0;
  66. }
  67. void LCD1602_Init()
  68. {
  69.    LCD1602_WriteCom(0x38);
  70.    LCD1602_WriteCom(0x0c);
  71.    LCD1602_WriteCom(0x06);
  72.    LCD1602_WriteCom(0x01);
  73.    LCD1602_WriteCom(0x80);
  74. }
  75. void Delayms(uint a)
  76. {
  77.    uint i,j;
  78.    for(j=0;j<a;j++)
  79.    {
  80.       for(i=0;i<125;i++);
  81.     }
  82.   }
  83.   
复制代码
ID:729252 发表于 2020-4-16 10:06
1、端口验证:LCD屏的各个接口IO通过CPU设置高低电平判断是否正确;
2、适当增加延时时间验证;
3、指令是否正确;
ID:729252 发表于 2020-4-16 09:59
1、首先检测端口指令是否发送正确:发送后设置断点,检验端口电平是否你设置的值(高低电平都要试一遍);
2、适当增加延时验证
3、指令是否正确?
ID:729252 发表于 2020-4-16 09:57
2、在指令发送读回正确的前提下,若还是无显示,适当增加延时再试;
ID:729252 发表于 2020-4-16 09:55
1、首先判断IO设置是否正确:向并口写入指令,将指令读回比较是否正确(或用万用表测量);
ID:70069 发表于 2020-4-16 09:50
void Delayms(uint a)
{
   uint i,j;
   for(j=0;j<a;j++)
   {
      for(i=0;i<125;i++);//i=0不是o,125后面是;,不是:
   }
}   
ID:213173 发表于 2020-4-16 09:37
程序没有问题,是楼主抄错了。
错误:for(i=o;i<125:i++);
正确:for(i=0;i<125;i++);
ID:592807 发表于 2020-4-16 08:43
你的LCD带字库吗?

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

Powered by 单片机教程网

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