这是我的程序,上限温度可以有变化,但是下限温度就没有变化了~~~~不知道为什么,求大神们帮忙看看!!!!
由于lcd1602头文件是另外编的,在这没有附上!!!
#include
#include"lcd1602.h"
#define uchar unsigned char
#define uint unsigned int
***it io=P2^2;
***it dula=P2^6;
***it wela=P2^7;
uchar code num[]="0123456789";
uchar code set2[]="TH: TL: ";
uint temper;//存储温度变量
uchar table[4];//存储当前温度
uchar T[6]={2,0,0,1,8,0};//存储上下限温度
void delayms(uchar t)
{
uchar i;
while(t--)
for(i=0;i<125;i++);
}
void delayus(uint t)
{
while(t--);
}
void ds_rest()//复位
{
io=1;
delayms(5);
io=0;
delayus(480);//至少480us
io=1;
delayus(50);
}
void ds_write(uchar com)//向DS18B20写数据
{
uchar i;
for(i=0;i<8;i++)
{
io=0;
io=com&0x01;//给数据到总线上让从机抽样
delayus(19);//需要给时间从机抽样,大于20不行
io=1;
delayus(1);
com>>=1;
}
}
uchar ds_read()//向DS18B20读取数据
{
uchar dat=0;
uchar i;
for(i=0;i<8;i++)
{
io=0;//拉低总线
dat>>=1;
//delayus(1);
io=1;//主机释放总线,让从机来工作
if(io)//接收从机来的数据
dat|=0x80;
delayus(5);//让读取数据稳定
//dat>>=1;
io=1;//释放总线
delayus(1);//每个周期至少1us延时
}
return dat;
}
void readtemp()
{
uchar TL,TH;
ds_rest();
ds_write(0xcc);
ds_write(0x44);
ds_rest();
ds_write(0xcc);
ds_write(0xbe);
TL=ds_read();//先低后高
TH=ds_read();
temper=TH;
temper<<=8;
temper|=TL;
temper*=0.625;
//table[0]=num[temper/1000];
table[1]=num[temper%1000/100];
table[2]=num[temper%100/10];
table[3]=num[temper%10];
}
void xianshi()
{
uchar i,j;
//lcd_set(5,1,table[0]);
lcd_set(6,1,table[1]);
lcd_set(7,1,table[2]);
lcd_set(8,1,'.');
lcd_set(9,1,table[3]);
lcd_set(10,1,0xdf);
lcd_set(11,1,'C');
for(j=3,i=0;i<3,j<7;i++,j++)
{
if(j==5)
{i--;lcd_set(j,0,'.');}
else
lcd_set(j,0,0x30+T[i]);
}
for(j=11,i=3;i<6,j<15;i++,j++)
{
if(j==13)
{i--;lcd_set(j,0,'.');}
else
lcd_set(j,0,0x30+T[i]);
}
//lcd_set(3,0,0x30+T[0]);//改成上面的循环
//lcd_set(4,0,0x30+T[1]);
//lcd_set(5,0,'.');
//lcd_set(6,0,0x30+T[2]);
//lcd_set(11,0,0x30+T[3]);
//lcd_set(12,0,0x30+T[4]);
//lcd_set(13,0,'.');
//lcd_set(14,0,0x30+T[5]);
}
void main()
{
float TH,TL;
TH=(T[0]*10)+T[1]+(T[2]*0.1);
TL=(T[3]*10)+T[4]+(T[5]*0.1);
wela=1;
P0=0xff;
wela=0;
dula=1;
P0=0;
dula=0;
lcd_init();
lcd_write***c(0,0,set2);
lcd_set(4,1,'T');
lcd_set(5,1,':');
while(1)
{
if(temper>TH)
{
TH=temper;
T[0]=temper%1000/100;
T[1]=temper%100/10;
T[2]=temper%10;
}
if(temper
{
TL=temper;
T[3]=temper%1000/100;
T[4]=temper%100/10;
T[5]=temper%10;
}
readtemp();
xianshi();
//delayms(10);
}
}
|