找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机程序没有错误,但是仿真里的LCD不显示,求大佬帮忙指点下

[复制链接]
跳转到指定楼层
楼主

#include <reg51.h>
#include <intrins.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uint buffer1,buffer2;
uchar dis1[17] ={'T','o','t','a','l','M','o','n','e','y','=',' ',' ',' ','.',' ','\0'};
uchar dis2[17] ={'C','u','r','r','e','n','t','M','o','n','e','y','=',' ','.',' ','\0'};
sbit LCD_RS = P1^1;           
sbit LCD_EN = P1^0;              
sbit QQ=P2^0;
sbit WW=P2^1;
sbit EE=P2^2;
sbit RR=P2^3;
void delay(int ms)
{                           
   int i;
   while(ms--)
   {
     for(i =0; i< 250; i++)
     {
      _nop_();
      _nop_();
      _nop_();
      _nop_();
     }
   }
}
void lcd_wcmd(uchar cmd)
{                          
  //while(lcd_busy());
    LCD_RS =0;
    LCD_EN =0;
    _nop_();
    _nop_();
    P0 = cmd;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    LCD_EN =1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    LCD_EN =0;  
}
void lcd_wdat(uchar dat)
{                          
//while(lcd_busy());
    LCD_RS =1;
   // LCD_RW =0;
    LCD_EN =0;
    P0 = dat;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    LCD_EN =1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    LCD_EN =0;
}
void lcd_pos(uchar pos)
{                          
  lcd_wcmd(pos|0x80);   
}
void lcd_init()
{                        
   lcd_wcmd(0x38);         
    delay(5);
   lcd_wcmd(0x38);         
    delay(5);
   lcd_wcmd(0x38);         
    delay(5);
   lcd_wcmd(0x0c);         
    delay(5);
   lcd_wcmd(0x06);         
    delay(5);
   lcd_wcmd(0x01);         
    delay(5);
}
void shujuchuli()
{  
    float temp1,temp2;
       if(QQ==0)
       {
        temp1=temp1+1;
        temp2=1;
       }
       if(WW==0)
       {
        temp1=temp1+0.5;
        temp2=0.5;
       }
       if(EE==0)
       {
        temp1=temp1+0.1;
        temp2=0.1;
       }
       if(RR==0)
       {
        temp1=temp1+0.1;
        temp2=0.1;
       }   
buffer1=temp1*10;
dis1[11]=(buffer1%10000)/1000+'0';
dis1[12]=(buffer1%1000)/100+'0';
dis1[13]=(buffer1%100)/10+'0';
dis1[15]=buffer1%10+'0';
buffer2=temp2*100;
dis2[13]=(buffer2%1000)/100+'0';
dis2[15]=(buffer2%100)/10+'0';                  
}
void xianshi()
{uchar i;
  lcd_wcmd(0x06);               
     lcd_pos(0);                    
         delay(5);
         lcd_pos(0);                    

      i = 0;
         delay(1);
    while(dis1 != '\0')
     {                                
      lcd_wdat(dis1);
       i++;
      delay(1);               
     }
          delay(1);
      lcd_pos(0x40);         
          delay(1);
          lcd_pos(0x40);        
      i = 0;
         delay(1);  
    while(dis2 != '\0')
     {
      lcd_wdat(dis2);           
       i++;
      delay(1);              
     }
}
main()
{
  lcd_init();
  while(1)
   {
   shujuchuli();
    xianshi();
   }
}


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

使用道具 举报

沙发
ID:342822 发表于 2021-4-8 17:48 | 只看该作者
上拉电阻加在p0端口试一试
回复

使用道具 举报

板凳
ID:587810 发表于 2021-4-8 18:25 | 只看该作者
单片机的P0端口没加上一组上拉电阻或者下拉电阻都可以,因为P0口默认输出高阻态。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:814525 发表于 2021-4-8 18:54 | 只看该作者
P0口做输出要外加上拉电阻。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:757960 发表于 2021-4-8 19:27 | 只看该作者
taotie 发表于 2021-4-8 17:48
上拉电阻加在p0端口试一试

加在P0口了,但还是不行
回复

使用道具 举报

6#
ID:820480 发表于 2021-4-8 20:03 | 只看该作者
复位脚是高电平,单片机一直在复位
回复

使用道具 举报

7#
ID:757960 发表于 2021-4-8 20:29 | 只看该作者
958668952 发表于 2021-4-8 20:03
复位脚是高电平,单片机一直在复位

改了复位电路,也是不显示
回复

使用道具 举报

8#
ID:342822 发表于 2021-4-8 22:12 | 只看该作者
电路错误~程序错误
程序里自己查找改成下面的:缺少[i]
while(dis1[i] != '\0')
while(dis2[i] != '\0')
lcd_wdat(dis1[i]);
lcd_wdat(dis2[i]);

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

9#
ID:342822 发表于 2021-4-8 22:20 | 只看该作者

回复

使用道具 举报

10#
ID:342822 发表于 2021-4-8 22:34 | 只看该作者
源程序虽然(Proteus )显示编译成功但里面夹了2条警告提示,你没看到吗?

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

11#
ID:207421 发表于 2021-4-8 23:17 | 只看该作者
RW引脚不能接地
数据口要上拉电阻
回复

使用道具 举报

12#
ID:757960 发表于 2021-4-9 10:48 | 只看该作者
taotie 发表于 2021-4-8 22:12
电路错误~程序错误
程序里自己查找改成下面的:缺少
while(dis1 != '\0')

可以了,谢谢大佬帮助
回复

使用道具 举报

13#
ID:1033546 发表于 2022-6-9 16:48 来自手机 | 只看该作者
taotie 发表于 2021-4-8 22:12
电路错误~程序错误
程序里自己查找改成下面的:缺少
while(dis1 != '\0')

这个是为什么啊,我的也是LED不显示,但是代码和她的不太一样 就看不出来,不太会改
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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