标题:
用ds18b20,LCD1602显示,可是什么都显示不了
[打印本页]
作者:
开心了
时间:
2017-8-10 09:24
标题:
用ds18b20,LCD1602显示,可是什么都显示不了
用ds18b20,LCD1602显示,可是什么都显示不了;下面是我的我的程序,帮我看看哪里错了。
#include<at89x52.h>
#define uchar unsigned char
#define uint unsigned int
uchar diplay[2];
uint temp;
sbit RS=P2^5;
sbit RW=P2^6;
sbit E=P2^7;
sbit DQ=P1^1;
uchar code tab[]="temperature:";
uchar code tab1[]="00oC";
void delay1ms(unsigned int ms)
{
unsigned int i,j;
for(i=0;i<ms;i++)
for(j=0;j<100;j++);
}
void delay1us(unsigned int i)
{
while(i--);
}
void write_com(uchar com)
{
RS=0;
RW=0;
E=0;
P2=com;
delay1ms(5);
E=1;
delay1ms(5);
E=0;
}
void write_dat(uchar dat)
{
RS=1;
RW=0;
E=0;
P2=dat;
delay1ms(5);
E=1;
delay1ms(5);
E=0;
}
void init()
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void ds18b20init()
{
DQ=0;
delay1us(480);
DQ=1;
delay1us(80);
DQ=0;
delay1us(480);
}
void ds18b20write_dat(uchar dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
DQ=0;
delay1us(15);
DQ=dat;
dat<<=1;
delay1us(60);
DQ=1;
}
}
uchar ds18b20read_dat( )
{
uchar i,bi,byte;
uchar dat;
for(i=8;i>0;i--)
{
DQ=0;
delay1us(1);
DQ=1;
delay1us(10);
bi=dat;
byte=(byte>>1)|(bi<<7);
delay1us(45);
}
return dat;
}
void ds18b20Changtemp()
{
ds18b20init();
ds18b20write_dat(0xcc);
ds18b20write_dat(0x44);
}
uint ds18b20readtemp()
{
uchar tmh,tml;
temp=0;
ds18b20init();
ds18b20write_dat(0xcc);
ds18b20write_dat(0xbe);
tml=ds18b20read_dat();
tmh=ds18b20read_dat();
temp=tmh;
temp<<=8;
temp=temp|tml;
return temp;
}
void dispplay()
{
uchar i,tp;
tp=temp*0.625;
diplay[0]=tp/10+0x30;
diplay[1]=tp/1+0x30;
write_com(0x80);
for(i=0;i<14;i++)
{
write_dat(tab[i]);
}
write_com(0x80+0x40);
for(i=0;i<5;i++)
{
write_dat(tab1[i]);
}
}
void main()
{
init();
while(1)
{
ds18b20readtemp();
dispplay();
}
}
复制代码
作者:
bayga456
时间:
2017-8-10 10:05
void write_com(uchar com)
{
RS=0;
RW=0;
E=0;
P2=com;
delay1ms(5);
E=1;
delay1ms(5);
E=0;
}
void write_dat(uchar dat)
{
RS=1;
RW=0;
E=0;
P2=dat;
delay1ms(5);
E=1;
delay1ms(5);
E=0;
}
把上面的数据口P2改为P0试试,肯定不会是P2了。P0,P1,P3都有可能。P0可能性较大。
作者:
宝哥哥
时间:
2017-8-12 00:34
你可以就用数码管显示呀,简单点。
作者:
小潘哥
时间:
2017-8-13 16:54
个人认为LCD1602比数码管还好用呢,正确驱动过后写成库文件,以后都直接调用,很方便的。你这个问题的话,我建议先只写1602的程序先,达到想让1602显示什么就显示什么的地步后,再回入18b20程序。
作者:
mtcnsoft
时间:
2017-8-13 17:28
背景灯亮吗?
作者:
xljxlj
时间:
2017-8-14 09:37
1602第三脚直接接地试试,我上回有个2402没显示,把3脚直接接地,就会有很淡的显示了。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1