DS18B20温度显示程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DS18B20传感器温度数码管显示

#include

#include<1820twj.h> //传感器DS18B20

#include //字符操作库

sbit g1=P2^7;

sbit g2=P2^6;

sbit g3=P2^5;

sbit g4=P2^4;

sbit lv=P2^2;

sbit jin=P3^3; //进

sbit jia=P3^4; //加

sbit jian=P3^5; //减

uint shiwen;

uint zuigao=30; //最高30度

uint zuidi=20; //最低20度

//*键盘调节/

uchar flag=0; //记录第一个按键次数flag=0正常1最高2最低

uchar flag2=0; //记录第四个按键次数flag2=0正常1调节小时2调节分钟uchar tableshu[]={0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xe0,0xff ,0xf7 }; uchar tableshudi[]={0x08,0xcb,0x12,0x82,0xc1,0x84,0x04,0xca,0x00,0xc0,0xff };

void main()

{uchar TL; //储存暂存器的温度低位

uchar TH; //储存暂存器的温度高位

uint TN; //储存温度的整数部分

uchar TD; //储存温度的小数部分

uchar ba,sh,ge,di,ba1,sh1,ge1,di1;

bit flag1; //判断显示正负0负1正

delay1(5); //延时5ms给硬件一点反应时间

while(1) //不断检测并显示温度

{ init();//读温度准备

if(flag1==1) dis(ba,sh,ge,di);

else dis(11,sh,ge,di);

TL=ReadOneChar(); //先读的是温度值低位

TH=ReadOneChar(); //接着读的是温度值高位

if((TH&0xf8)!=0x00)//判断高五位得到温度是负

{ flag1=0; TL=~TL; //取反

TH=~TH; //取反

TL=TL+1; //低位加1

TN=(TH*256+TL)*0.625; //实际温度值10倍=(TH*256+TL)*0.625,

if(TN%160==0) TN=TN+160;

sh=TN/100%10; ge=TN/10%10; di=TN%10;

dis(ba,sh,ge,di); //显示温度

}

else//判断高五位得到温度是正

{ flag1=1;

TN=(TH*256+TL)*0.625; //实际温度值10倍=(TH*256+TL)*0.625, //这样前几位是温度的整数部分,最后一位是温度的小数部分

ba=TN/1000; sh=TN/100%10; ge=TN/10%10; di=TN%10;

dis(ba,sh,ge,di); //显示温度的整数部分

}

shiwen=TN; biaozhun(); tfz();

if(flag1==1)

dis(ba,sh,ge,di);

else dis(11,sh,ge,di);

kongzhi()//温度调整驱动程序

}

void kongzhi()

{

if((shiwenzuidi))

lv=0; //控制P2口输出电平

else

lv=1;

}

void dis(uchar ba,uchar sh,uchar ge,uchar di)

{ g1=0;P0=tableshu[ba];

delay1(5);

g1=1;P0=tableshu[10];

g2=0;P0=tableshu[sh];

delay1(5);

g2=1;P0=tableshu[10];

g3=0;P0=tableshudi[ge];

delay1(5);

g3=1;P0=tableshudi[10];

g4=0;P0=tableshu[di];

delay1(5);

g4=1;P0=tableshu[10];}

void disdi(uchar ba,uchar sh,uchar ge,uchar di)

{ g1=0;P0=tableshudi[ba];

delay1(5); g1=1;P0=tableshu[10]; g2=0;P0=tableshudi[sh];

delay1(5); g2=1;P0=tableshu[10]; g3=0;P0=tableshudi[ge];

delay1(5); g3=1;P0=tableshudi[10]; g4=0;P0=tableshudi[di];

delay1(5); g4=1;P0=tableshu[10];

}

void biaozhun()

{ if(jin==0)

{ delay1(5);

if(jin==0)

{ while(!jin);

flag++; if(flag==3) flag=0;

} } } /*调幅值*/

void tfz()

{ uchar ba,sh,ge,di; if(flag==1)

{ while(1)

{ ba=zuigao/1000; sh=zuigao/100%10; ge=zuigao/10%10; di=zuigao%10; dis(ba,sh,ge,di); if(jia==0) delay1(5);

if(jia==0) { zuigao=zuigao+10;

while(!jia); dis(ba,sh,ge,di); }

if(jian==0)

{ zuigao=zuigao-10;

while(!jian);

dis(11,sh,ge,di); }

biaozhun();

if(flag!=1) break; } }

if(flag==2)

{ while(1)

{ ba=zuidi/1000; sh=zuidi/100%10; ge=zuidi/10%10; di=zuidi%10;

dis(ba,sh,ge,di);

if(jia==0) delay1(5);

if(jia==0)

{ zuidi=zuidi+10; while(!jia); }

if(jian==0) { zuidi=zuidi-10; while(!jian); }

biaozhun();

if(flag!=2)

break;

}

}

}

相关文档
最新文档