DS18B20温度显示程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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((shiwen
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;
}
}
}