找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1903|回复: 0
上一主题 下一主题
收起左侧

stc89C52单片机驱动lcd1602结果显示四道杠的问题

[复制链接]
跳转到指定楼层
楼主
ID:514028 发表于 2019-4-21 13:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自己搞了半天,也没出来,求大佬帮我看看显示三个数字,lcd只能显示三个方块,其他的显示都没问题,哪里出现问题了吗??

        if(set==3)
        {
                write_com(0x38);
                write_com(0x01);
                Display_data();
                write_com(0x80+0x40+4);
                write_data(bj1);
                write_data(bj2);
                write_data(bj3);
                FENG=1;
        }//按键三次时lcd显示的内容


uchar bj1=0,bj2=0,bj3=0;
void  time0_int(void) interrupt 1   //bj1-3在中断里赋值了
{
        uchar count;
        TL0=0xb0;
         TH0=0x3c;
          count++;
        if(count==10)
        {                                                                           
                count=0;
                if(flag2==0)
                        LED_Y=1;
                else
                        LED_Y=0;
                if(flag7==0)
                        LED_R=1;
                else
                        LED_R=0;
               

                if(flag2==1&&flag7==0)
                {
                        FENG=!FENG;        
                        jdq1=1;
                        jdq2=0;
                        bj1=1;

                }
                if(flag2==0&&flag7==1)
                {
                        FENG=!FENG;        
                        jdq1=1;
                        jdq2=0;
                        bj2=1;
                }
                if(flag2==1&&flag7==1)
                {
                        FENG=!FENG;        
                        jdq1=1;
                        jdq2=0;
                        bj3=1                        ;
                }
                if(flag2==0&&flag7==0)
                {
                        FENG=1;
                        jdq1=0;
                        jdq2=1;
                }
        }
}
****************display.h头文件*****************




  1. //宏定义
  2. #define uint unsigned int
  3. #define uchar unsigned char

  4. //LCD管脚声明
  5. sbit LCDRS = P1^0;
  6. sbit LCDEN = P1^1;

  7. //初始画时显示的内容
  8. uchar code Init1[]="HY :    YW:     ";
  9. uchar code Init2[]="HH :    HY:     ";
  10. uchar code Init3[]=" ALARM RECORDS  ";


  11. //LCD延时
  12. void LCDdelay(uint z)
  13. {
  14.   uint x,y;
  15.   for(x=z;x>0;x--)
  16.     for(y=10;y>0;y--);
  17. }
  18. //写命令
  19. void write_com(uchar com)
  20. {
  21.   LCDRS=0;
  22.   P0=com;
  23.   LCDdelay(5);
  24.   LCDEN=1;
  25.   LCDdelay(5);
  26.   LCDEN=0;
  27. }
  28. //写数据
  29. void write_data(uchar date)
  30. {
  31.   LCDRS=1;
  32.   P0=date;
  33.   LCDdelay(5);
  34.   LCDEN=1;
  35.   LCDdelay(5);
  36.   LCDEN=0;
  37. }
  38. //1602初始化
  39. void Init1602()
  40. {

  41.   write_com(0x38);//屏幕初始化
  42.   write_com(0x0c);//打开显示 无光标 无光标闪烁
  43.   write_com(0x06);//当读或写一个字符是指针后一一位
  44.   write_com(0x01);//清屏

  45. }

  46. void Display_1602(uchar NOW_GAS,uchar NOW_CO,uchar SET_GAS,uchar SET_CO)
  47. {
  48.     uchar i=0;
  49.         write_com(0x80);//设置位置
  50.            for(i=0;i<16;i++)
  51.        {
  52.                 write_data(Init1[i]);
  53.        }                                                                  
  54.     write_com(0x80+0x40);//设置位置         
  55.        for(i=0;i<16;i++)
  56.        {
  57.                 write_data(Init2[i]);
  58.        }

  59.         write_com(0x80+4);
  60.         write_data('0'+NOW_GAS/100);
  61.         write_data('0'+NOW_GAS/10%10);
  62.         write_data('0'+NOW_GAS%10);

  63.         write_com(0x80+0x40+4);
  64.         write_data('0'+SET_GAS/100);
  65.         write_data('0'+SET_GAS/10%10);
  66.         write_data('0'+SET_GAS%10);

  67.         write_com(0x80+13);
  68.         write_data('0'+NOW_CO/100);
  69.         write_data('0'+NOW_CO/10%10);
  70.         write_data('0'+NOW_CO%10);

  71.         write_com(0x80+0x40+13);
  72.         write_data('0'+SET_CO/100);
  73.         write_data('0'+SET_CO/10%10);
  74.         write_data('0'+SET_CO%10);
  75. }
  76. void Display_data()
  77. {
  78.     uchar j=0;
  79.         write_com(0x80);//设置位置
  80.            for(j=0;j<16;j++)
  81.        {
  82.                 write_data(Init3[j]);
  83.        }                                                                  


  84. }
复制代码

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

使用道具 举报

沙发
ID:514028 发表于 2019-4-21 13:46
本帖最后由 清新无敌 于 2019-4-21 13:53 编辑

求助求助,就像这种情况,数字就是显示四道杠

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

本版积分规则

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

Powered by 单片机教程网

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