单片机lcd,ds18b20
时间:10-02
整理:3721RD
点击:
请我我分别写了一个lcd1602的显示程序和ds18b20的程序融合的时候怎么办啊为什么我这个什么都不显示
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dq=P3^7;//18b20数据端
sbit rs=P2^6;
sbit rw=P2^5;
sbit en=P2^7;
void delay(uint z);
void delay(uint z)
{
uint a,b;
for(a=z;a>0;a--)
for(b=110;b>0;b--);
}
uchar ds18b20init()//初始化
{
uchar i;
dq=0;
i=70;
while(i--);
dq=1;
i=0;
while(dq)
{
i++;
if(i>5000)
return 0;
}
return 1;
}
void ds18b20tempxie(uchar dat)//写命令
{
uint i,j;
for(i=0;i<8;i++)
{
dq=0;
j++;
dq=dat&0x01;
i=6;
while(i--)
dq=1;
dat>>=1;
}
}
uchar ds18b20read()//读命令
{
uchar byte,bi;
uchar i,j;
for(j=0;j<8;j++)
{
dq=0;
i++;
dq=1;
bi=dq;
byte=(byte>>1)|(bi<<7);
i=4;
while(i--);
}
return byte;
}
void ds18b20change()//温度转化
{
ds18b20init();
delay(1);
ds18b20tempxie(0xcc);
ds18b20tempxie(0x44);
}
void ds18b20readtemp()
{
ds18b20init();
delay(1);
ds18b20tempxie(0xcc);
ds18b20tempxie(0xbe);
}
int ds18b20zhuang()//读取温度
{
int temp=0;
uchar tmh,tml;
ds18b20change();
ds18b20readtemp();
tmh=ds18b20read();
tml=ds18b20read();
temp=tmh;
temp<<=8;
temp|=tml;
return temp;
}
void dizhi(uchar dz)//1602写命令
{
rs=0;
rw=0;
P0=dz;
delay(10);
en=1;
delay(10);
en=0 ;
}
void shuju(uchar shu)//1602写数据
{
rs=1;
rw=0;
P0=shu;
delay(10);
en=1;
delay(10);
en=0 ;
}
void init()//1602初始化
{
en=0;
dizhi(0x38);
dizhi(0x0c);
dizhi(0x06);
dizhi(0x01);
}
void main()
{
init();
dizhi(0x80);//设置显示地址
while(1)
{
shuju(ds18b20zhuang());
}
}
麻烦各位大神了
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dq=P3^7;//18b20数据端
sbit rs=P2^6;
sbit rw=P2^5;
sbit en=P2^7;
void delay(uint z);
void delay(uint z)
{
uint a,b;
for(a=z;a>0;a--)
for(b=110;b>0;b--);
}
uchar ds18b20init()//初始化
{
uchar i;
dq=0;
i=70;
while(i--);
dq=1;
i=0;
while(dq)
{
i++;
if(i>5000)
return 0;
}
return 1;
}
void ds18b20tempxie(uchar dat)//写命令
{
uint i,j;
for(i=0;i<8;i++)
{
dq=0;
j++;
dq=dat&0x01;
i=6;
while(i--)
dq=1;
dat>>=1;
}
}
uchar ds18b20read()//读命令
{
uchar byte,bi;
uchar i,j;
for(j=0;j<8;j++)
{
dq=0;
i++;
dq=1;
bi=dq;
byte=(byte>>1)|(bi<<7);
i=4;
while(i--);
}
return byte;
}
void ds18b20change()//温度转化
{
ds18b20init();
delay(1);
ds18b20tempxie(0xcc);
ds18b20tempxie(0x44);
}
void ds18b20readtemp()
{
ds18b20init();
delay(1);
ds18b20tempxie(0xcc);
ds18b20tempxie(0xbe);
}
int ds18b20zhuang()//读取温度
{
int temp=0;
uchar tmh,tml;
ds18b20change();
ds18b20readtemp();
tmh=ds18b20read();
tml=ds18b20read();
temp=tmh;
temp<<=8;
temp|=tml;
return temp;
}
void dizhi(uchar dz)//1602写命令
{
rs=0;
rw=0;
P0=dz;
delay(10);
en=1;
delay(10);
en=0 ;
}
void shuju(uchar shu)//1602写数据
{
rs=1;
rw=0;
P0=shu;
delay(10);
en=1;
delay(10);
en=0 ;
}
void init()//1602初始化
{
en=0;
dizhi(0x38);
dizhi(0x0c);
dizhi(0x06);
dizhi(0x01);
}
void main()
{
init();
dizhi(0x80);//设置显示地址
while(1)
{
shuju(ds18b20zhuang());
}
}
麻烦各位大神了
建议使用串口助手打印调试信息。就这样让我看我也看不出来。
光贴代码也看不出有什么问题,实际使用的时候还要看你的电路以及调试信息~