找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2084|回复: 3
收起左侧

请问大神们单片机仿真时LCD不显示数值,应该显示温度,流量

[复制链接]
ID:793364 发表于 2020-6-29 23:57 | 显示全部楼层 |阅读模式
#include<reg52.h>
#define unchar unsigned char
#define uint unsigned int
sbit DQ=P1^0;
sbit RS=P1^1;
sbit RW=P1^2;
sbit EN=P1^3;
sbit p37=P3^6;
sbit p36=P3^7;
sbit p14=P1^4;
sbit p15=P1^5;
sbit p16=P1^6;
unchar table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x20};
unsigned long int a;
float f,zong;
unsigned int tvalue;
unchar n1,n2,n3,n4,n5,n6,n7,n8,n9;
unchar tflag,d,g,kai,j,j1,j2,b;
void delay
(unsigned int z){int x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
void delay_18B20(unsigned int i)
{
while(i--);
}
void wr_com(unsigned char com)
{delay(1);
RS=0;
RW=0;
EN=0;
P2=com;
delay(1);
EN=0;
}
void wr_dat(unsigned char dat)
{
delay(1);
RS=1;
RW=0;
EN=0;
P2=dat;
delay(1);
EN=1;
delay(1);
EN=0;
}
void loop()
{
unsigned int zong1;
if(g==0)
{zong=(b/100.0)+zong;
}
g=1;
if(zong>=1000)
{
a++;
}
if(a>=1000000)
{
a=0;
}
zong1=(int)zong;
n9=a/100000;
n8=a%100000/10000;
n7=a%10000/1000;
n6=a%1000/100;
n5=a%100/10;
n4=a%10;
n3=zong1%1000/100;
n2=zong1%100/10;
n1=zong1%10;
}
void shuifei()
{
unchar h1,h2,h3,h4;h4=(j*a)/1000000;
h3=(j*a)%1000000/100000;
h2=(j*a)%100000/10000;
h1=(j*a)%10000/1000;
wr_com(0x80+10);
wr_dat(0x5c);
wr_dat(table[h4]);
wr_dat(table[h3]);
wr_dat(table[h2]);
wr_dat(0x2e);
wr_dat(table[h1]);
}
void ds1820rst()
{
unsigned char x=0;
DQ=1;
delay_18B20(4);
DQ=0;
delay_18B20(100);
DQ=1;
delay_18B20(40);
}
unchar ds1820rd()
{
unsigned char i=0;unsigned char dat=0;
for(i=8;i>0;i--)
{
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
delay_18B20(10);
}
return(dat);
}
void ds1820wr(unchar wdata)
{ unsigned char i=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=wdata&0x01;
delay_18B20(10);
DQ=1;
wdata>>=1;
}
}
uint read_temp()
{
unchar a,b;
ds1820rst();
ds1820wr(0xcc);
ds1820wr(0x44);
ds1820rst();
ds1820wr(0xcc);
ds1820wr(0xbe);
a=ds1820rd();
b=ds1820rd();
tvalue=b;
tvalue<<=8;
tvalue=tvalue|a;
if(tvalue<0x0fff)
tflag=0;
else
{
tvalue=~tvalue+1;
tflag=1;
}
tvalue=tvalue*(0.625);
return(tvalue);
}
void ds1820disp()
{
unchar t1,t2,t3,t4;
t3=tvalue/1000;
t2=tvalue%1000/100;
t1=tvalue%100/10;
t4=tvalue%10;
{
wr_dat(0x2d);
}
if(t3!=0)
{
        t1=9;
        t2=9;
        t3=10;
        t4=9;
        p37=0;
}
if(t2>=4)
        p37=0;
else p37=1;
if(tflag==1)
{
p37=0;
}
if(t3==0)
{
t3=10;
{
t2=10;
}
}
wr_dat(table[t3]);
wr_com(0x80+3);
wr_dat(table[t2]);
wr_dat(table[t1]);
wr_dat(0x2e);
wr_dat(table[t4]);
}
void liuliang()
{
while(d>=2)
{
d=0;
b=TH0*256+TL0;
TH0=0x00;
TL0=0x00;
g=0;
}
loop();
}
void display1()
{
wr_com(0x80);
wr_dat(0x54);
wr_dat(0x3a); read_temp();
ds1820disp();
wr_dat(0x00);
wr_dat(0x43);
shuifei();
wr_com(0x80+0x40);
wr_dat(0x46);
wr_dat(0x4c);
wr_dat(0x4f);
wr_dat(0x57);
wr_dat(0x3a);
wr_dat(0x20);
wr_dat(table[n9]);
wr_dat(table[n8]);
wr_dat(table[n7]);
wr_dat (0x2e);
wr_dat(table[n6]);
wr_dat(table[n5]);
wr_dat(table[n4]);
wr_dat(0x20);
wr_dat(0x74);
wr_dat(0x20);
}
void display2()
{
wr_com(0x80);
wr_dat(0x54);
wr_dat(0x3a);
read_temp();
ds1820disp();
wr_dat(0x00);
wr_dat(0x43);
wr_com(0x80+10);
wr_dat (table[j2]);
wr_dat(0x2e); wr_dat(table[j1]);
wr_dat(0x5c);
wr_dat(0x2f);
wr_dat(0x74);
wr_dat(0x20);
wr_com(0x80+0x40+5);
wr_dat(0x20);
wr_dat(0x20);
wr_dat(table[n4]);
wr_dat (0x2e);        
wr_dat(table[n3]);        wr_dat(table[n2]);
wr_dat(table[n1]);
wr_dat(0x20);
wr_dat(0x6b);
wr_dat(0x67);
}
void kaiguan1()
{
if(p14==0)
{ delay(2);
if(p14==0)
{ delay(2);
p36=~p36;        
TR0=~TR0;
while(p14==0);
}
}
}
void kaiguan2()
{
if(p15==0)
{ delay(2);
if(p15==0)
{ delay(2);
kai=~kai;
while(p15==0);
}
}
}
void kaiguan3()
{
if(p16==0)
{ delay(2);
if(p16==0)
{ delay(2);
j++;
if(j>40)
j=0;
j2=j/10;
j1=j%10;
while(p16==0);
}
}
}
void lcd_init ()
{
TMOD=0x15;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TH0=0x00;
TL0=0x00;
EN=0;
wr_com(0x38);
wr_com(0x0c);
wr_com(0x06);
wr_com(0x01);
wr_com(0x40);
wr_dat(0x06);
wr_dat(0x09);
wr_dat(0x09);
wr_dat(0x06);
wr_dat(0x00);
wr_dat(0x00);
wr_dat(0x00);
wr_dat(0x00);
zong=0;
EA=1;
ET1=1;
TR1=1;
TR0=0;
p16=1;
p15=1;
p14=1;
zong=995;
a=199999;
j=20;
j2=2;
j1=0;
kai=0;
}
void main()
{
lcd_init();
while(1)
{
kaiguan1();
kaiguan2();
liuliang();
if(kai==0)
display1();
else
{
kaiguan3();
display2();
}
}
}
void time1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
d++;
}


仿真LCD不亮.PNG
回复

使用道具 举报

ID:267932 发表于 2020-7-1 20:44 | 显示全部楼层
你仿真接的IO,跟程序压根对不上啊,这是你写的程序嘛??????
回复

使用道具 举报

ID:784384 发表于 2020-7-1 20:57 | 显示全部楼层
感觉你LCD连得好像有点问题,要不你换个接法改一下键位
回复

使用道具 举报

ID:709787 发表于 2020-7-2 11:58 来自触屏版 | 显示全部楼层
调试程序不能急!要知道主流的程序员 ,调试程序比写程序用的时间多的多。先把LCD点亮 。再把温度正确的读出来 。然后再考虑把温度显示在LCD上 。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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