发 帖  
原厂入驻New
[咨询及建议] LCD1602显示异常(多显示了1位乱码)
2020-9-1 22:48:30  124 51单片机 单片机 lcd1602
分享

  1. <div>
  2. </div><div>如下程序</div><div>数组中写了<span>uchar table1[]=" current time ";</span>
  3. <span>                 uchar table2[]=" current data ";</span></div><div><span>实际显示出错</span><span>current time 后面多了乱码</span></div><div><span>                     </span><span>current data </span><span>后面多了乱码</span></div><div><span>
  4. </span></div><div><div class="blockcode"><blockquote>main.c文件

  5. #include "config.h"
  6. #include "lcd1602.h"
  7. uchar table1[]=" current time ";
  8. uchar table2[]=" current data ";
  9. void main(void)
  10. {
  11.   uchar i, j;
  12.   Lcd1602_Init ();
  13.   for(i=0;i<16;i++)
  14.   {
  15.    Lcd1602_Write_cmd(0x80+i);
  16.   Lcd1602_Write_dat(table1[i]);
  17.   }
  18.   for(j=0;j<16;j++)
  19.   {
  20.    Lcd1602_Write_cmd(0x80+0x40+j);
  21.   Lcd1602_Write_dat(table2[j]);
  22.   }  
  23.   while(1);  
  24. }
复制代码

  1. config.h文件
  2. #IFndef __CONFIG_H_
  3. #define __CONFIG_H_


  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. #include <reg51.h>
  7. #include <intrins.h>

  8. void Lcd1602_Init ();
  9. void Lcd1602_Write_cmd(uint cmd);
  10. void Lcd1602_Write_dat(uint dat);
  11. void Lcd1602_Delay1ms(uint c);

  12. #endif
复制代码
  1. delay.c文件
  2. #include "config.h"
  3. void Lcd1602_Delay1ms(uint c)   //??? 0us
  4. {
  5.     uchar a,b;
  6.         for (; c>0; c--)
  7.         {
  8.                  for (b=199;b>0;b--)
  9.                  {
  10.                           for(a=1;a>0;a--);
  11.                  }      
  12.         }
  13.            
  14. }
复制代码
  1. delay.h文件
  2. #ifndef __LCD1602_DELAY1MS_H_
  3. #define __LCD1602_DELAY1MS_H_

  4. void Lcd1602_Delay1ms(uint c);


  5. #endif
复制代码
  1. lcd1602.c文件
  2. #include "config.h"
  3. #include "delay.h"

  4. sbit LCD1602_E=P2^7;
  5. sbit LCD1602_RW=P2^5;
  6. sbit LCD1602_RS=P2^6;
  7. #define  LCD1602data P0

  8. void Lcd1602_Init ()
  9. {
  10.         Lcd1602_Delay1ms(15);
  11.         Lcd1602_Write_cmd(0x38);
  12.         Lcd1602_Write_cmd(5);
  13.         Lcd1602_Write_cmd(0x38);
  14.         Lcd1602_Write_cmd(0x08);
  15.         Lcd1602_Write_cmd(0x01);
  16.         Lcd1602_Write_cmd(0x06);
  17.         Lcd1602_Write_cmd(0x0c);
  18. }

  19. void Lcd1602_Write_cmd(uint cmd)
  20. {

  21.         LCD1602_RS=0;
  22.         LCD1602_RW=0;
  23.         LCD1602_E=0;

  24.         Lcd1602_Delay1ms(1);
  25.         LCD1602data=cmd;
  26.         Lcd1602_Delay1ms(1);
  27.         LCD1602_E=1;
  28.         Lcd1602_Delay1ms(1);
  29.         LCD1602_E=0;
  30.         Lcd1602_Delay1ms(1);


  31. }
  32. void Lcd1602_Write_dat(uint dat)
  33. {

  34.         LCD1602_RS=1;
  35.         LCD1602_RW=0;
  36.         LCD1602_E=0;

  37.         Lcd1602_Delay1ms(1);
  38.         LCD1602data=dat;
  39.         Lcd1602_Delay1ms(1);
  40.         LCD1602_E=1;
  41.         Lcd1602_Delay1ms(1);
  42.         LCD1602_E=0;
  43.         Lcd1602_Delay1ms(1);


  44. }
复制代码
  1. lcd1602.h
  2. #ifndef __LCD1602_H_
  3. #define __LCD1602_H_

  4. void Lcd1602_Init ();
  5. void Lcd1602_Write_cmd(uint cmd);
  6. void Lcd1602_Write_dat(uint dat);

  7. #endif
复制代码




0

代码

代码

实际显示

实际显示
2020-9-1 22:48:30   评论 分享淘帖
高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发表新帖
关闭

站长推荐 上一条 /8 下一条

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