找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于LCD1602显示问题 为什么第二行的内容跑到第一行了?

[复制链接]
跳转到指定楼层
楼主
本帖最后由 vircopc 于 2020-6-11 20:39 编辑


附上程序:
  1. //LCD管脚声明
  2. sbit LCDRS = P2^7;
  3. sbit LCDEN= P2^6;

  4. //初始画时显示的内容
  5. uchar code Init1[]="Temperature:  C";
  6. uchar code Init2[]="Distance:     CM";

  7. //初始画时显示的内容
  8. //uchar code Init3[]="  Max------   CM";
  9. uchar code Init4[]="Min:          CM";

  10. //LCD延时
  11. void LCDdelay(uint z)
  12. {
  13.   uint x,y;
  14.   for(x=z;x>0;x--)
  15.     for(y=10;y>0;y--);
  16. }
  17. //写命令
  18. void write_com(uchar com)
  19. {
  20.   LCDRS=0;
  21.   P0=com;
  22.   LCDdelay(5);
  23.   LCDEN=1;
  24.   LCDdelay(5);
  25.   LCDEN=0;
  26. }
  27. //写数据
  28. void write_data(uchar date)
  29. {
  30.   LCDRS=1;
  31.   P0=date;
  32.   LCDdelay(5);
  33.   LCDEN=1;
  34.   LCDdelay(5);
  35.   LCDEN=0;
  36. }
  37. //1602初始化
  38. void Init1602()
  39. {
  40.   uchar i=0;
  41.   write_com(0x38);//屏幕初始化
  42.   write_com(0x0C);//打开显示 无光标 无光标闪烁
  43.   write_com(0x06);//当读或写一个字符是指针后一一位
  44.   write_com(0x01);//清屏
  45.   write_com(0x80);//设置位置

  46.   for(i=0;i<14;i++)
  47.   {
  48.                 write_data(Init1[i]);
  49.   }
  50.         write_data(0xdf);
  51.         write_data(Init1[14]);        

  52.   write_com(0x80+0x40);//设置位置
  53.   for(i=0;i<16;i++)
  54.   {
  55.                 write_data(Init2[i]);
  56.   }
  57. }


  58. //温度 距离显示
  59. void Display_1602(uchar W,uint L)
  60. {
  61.         //温度值显示
  62.         write_com(0x80+12);
  63.         write_data('0'+W/10);
  64.         write_data('0'+W%10);

  65.         //长度值显示
  66.         if(flag1s==1)
  67.         {
  68.                 write_com(0x80+0x40+0x0a);
  69.                 write_data(' ');
  70.                 write_data('0'+L/100);
  71.                 write_data('0'+L/10%10);
  72.                 write_data('0'+L%10);
  73.         }
  74.         //超出测距范围
  75.         else if(flag1s==0)
  76.         {
  77.                
  78.                 write_com(0x80+0x40+0x0a);
  79.                 write_data(' ');
  80.           write_data(' ');
  81.                 write_data(' ');
  82.                 write_data(' ');
  83.         
  84.         }
  85. }


  86. //1602初始化最大化最小化调整界面
  87. void Init_MaxMin()
  88. {
  89.   uchar i=0;
  90.   write_com(0x38);//屏幕初始化
  91.   write_com(0x0f);//打开显示 有光标 光标闪烁
  92.   write_com(0x06);//当读或写一个字符时后移一位
  93.   write_com(0x01);//清屏
  94.   write_com(0x80);//设置位置

  95.   /*for(i=0;i<16;i++)
  96.   {
  97.                 write_data(Init3[i]);
  98.   }
  99.         */

  100.   write_com(0x80);//设置位置
  101.   for(i=0;i<16;i++)
  102.   {
  103.                 write_data(Init4[i]);
  104.   }
  105.    /*write_com(0x8b);//设置位置
  106.         write_data('0'+Max/100);
  107.         write_data('0'+Max/10%10);
  108.         write_data('0'+Max%10);
  109.         */

  110.    write_com(0x87);//设置位置
  111.         write_data('0'+Min/100);
  112.         write_data('0'+Min/10%10);
  113.         write_data('0'+Min%10);

  114.    write_com(0x8d);//设置位置        
  115. }
复制代码
为什么第二行的内容跑到第一行了呀

111.png (6.87 KB, 下载次数: 53)

改正后

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

使用道具 举报

沙发
ID:309919 发表于 2020-6-11 20:40 | 只看该作者
        write_com(0x87);
        write_data('0'+Max/100);
        write_data('0'+Max/10%10);
        write_data('0'+Max%10);
        write_data(' ');
        write_data(' ');
        write_data(' ');
        write_data(' ');
       
        write_com(0x8e);
        write_data('C');
        write_com(0x8f);
        write_data('M');
挨个输入就好了,但我Min循环输入就没问题,为啥呀
回复

使用道具 举报

板凳
ID:739545 发表于 2020-6-12 11:08 | 只看该作者
地址位置没有协调好
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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