DS18B20上下温度可调程序文档格式.docx
- 文档编号:21665602
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:10
- 大小:16.31KB
DS18B20上下温度可调程序文档格式.docx
《DS18B20上下温度可调程序文档格式.docx》由会员分享,可在线阅读,更多相关《DS18B20上下温度可调程序文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
i++);
}
voidcommand(uintcom)//LCD写指令
RS=0;
//RS为0
LCD_BUS=com;
//装载指令
delayms(5);
//延时5ms
EN=1;
//LCD使能
EN=0;
//LCD不使能
voidwrite_dat(uchardat)//LCD写数据
RS=1;
//RS为1
LCD_BUS=dat;
//装载数据
voidwritestring(ucharx,uchary,uchar*s)//LCD写字符串
{
if(y==0)command(0x80+x);
//表示第一行
elsecommand(0xC0+x);
//表示第二行
while(*s)//判断是否字符串的结尾
write_dat(*s);
//显示当前字符
s++;
//字符串地址加1
voidwriteChar(ucharx,uchary,uchars)//LCD写字符串
elsecommand(0xC0+x);
write_dat(s);
voidLCD_Initial()//LCD初始化
RW=0;
//RW为0
command(0x38);
//发送初始化指令
command(0x0c);
command(0x06);
command(0x01);
command(0x80+0x02);
//发送LCD初始位置
/*************************DS1820程序****************************/
voiddelay_18B20(unsignedinti)//延时1微秒
while(i--);
voidds1820rst(void)/*ds1820复位*/
unsignedcharx=0;
DQ=1;
//DQ复位
delay_18B20(4);
//延时
DQ=0;
//DQ拉低
delay_18B20(100);
//精确延时大于480us
DQ=1;
//拉高
delay_18B20(40);
uchards1820rd(void)/*读数据*/
unsignedchari=0;
unsignedchardat=0;
for(i=8;
i>
0;
i--)
//给脉冲信号
dat>
>
=1;
if(DQ)
dat|=0x80;
delay_18B20(10);
return(dat);
voidds1820wr(ucharwdata)/*写数据*/
i>
i--)
DQ=wdata&
0x01;
wdata>
unsignedintRead_Temperature(void)/*读取温度值并转换*/{
uchara,b;
ds1820rst();
ds1820wr(0xcc);
//*跳过读序列号*/
ds1820wr(0x44);
//*启动温度转换*/
ds1820wr(0xbe);
//*读取温度*/
a=ds1820rd();
b=ds1820rd();
tvalue=b;
tvalue<
<
=8;
tvalue=tvalue|a;
if(tvalue<
0x0fff)tflag=0;
else{tvalue=~tvalue+1;
tflag=1;
tvalue=tvalue*(0.625);
//温度值扩大10倍,精确到1位小数
CurrentT=tvalue;
return(tvalue);
voidDisplay_Temperature()//显示温度
ucharflagdat;
disdata[0]=tvalue/1000+0x30;
//百位数
disdata[1]=tvalue%1000/100+0x30;
//十位数
disdata[2]=tvalue%100/10+0x30;
//个位数
disdata[3]=tvalue%10+0x30;
//小数位
if(tflag==0)flagdat=0x20;
//正温度不显示符号
elseflagdat=0x2d;
//负温度显示负号:
-
if(disdata[0]==0x30)
disdata[0]=0x20;
//如果百位为0,不显示
if(disdata[1]==0x30)disdata[1]=0x20;
//如果百位为0,十位为0也不显示
if(tflag==1)
writeChar(10,0,flagdat);
//wr_com(0x8a);
wr_dat(flagdat);
//显示符号位
writeChar(11,0,disdata[0]);
//wr_com(0x8b);
wr_dat(disdata[0]);
//显示百位
writeChar(12,0,disdata[1]);
//wr_com(0x8c);
wr_dat(disdata[1]);
//显示十位
writeChar(13,0,disdata[2]);
//wr_com(0x8d);
wr_dat(disdata[2]);
//显示个位
writeChar(14,0,0X2E);
//wr_com(0x8e);
wr_dat(0x2e);
//显示小数点
writeChar(15,0,disdata[3]);
//wr_com(0x8f);
wr_dat(disdata[3]);
//显示小数位
else
writeChar(10,0,disdata[0]);
writeChar(11,0,disdata[1]);
writeChar(12,0,disdata[2]);
writeChar(13,0,0X2e);
//显示小数点
writeChar(14,0,disdata[3]);
wr_dat(disdata[3]);
voidSetFun(void)
unsignedchari1=0,i2=0,i3=0,i4=0,i5=0,i6=0;
if(SetKey==0)
delayms(20);
if(Set<
2)Set++;
elseSet=0;
switch(Set)
case0:
writestring(0,1,"
"
);
writestring(8,1,"
break;
case1:
"
case2:
while(SetKey==0);
if((UpKey==0)&
&
(Set!
=0))
if(UpKey==0)
if(AlarmTempLow<
99)AlarmTempLow++;
elseAlarmTempLow=99;
break;
if(AlarmTempTop<
99)AlarmTempTop++;
elseAlarmTempTop=99;
i1=AlarmTempLow/100;
//获得温度值的百位
i2=AlarmTempLow%100/10;
//获得温度值的十位
i3=AlarmTempLow%10;
//获得温度值的个位
i4=AlarmTempTop/100;
i5=AlarmTempTop%100/10;
i6=AlarmTempTop%10;
writestring(5,1,"
writestring(13,1,"
if(i1!
=0)writeChar(5,1,i1+'
0'
if((i1==0)&
(i2!
=0))writeChar(5,1,i2+'
=0)writeChar(6,1,i2+'
(i2==0))writeChar(5,1,i3+'
elseif((i1==0)&
=0))writeChar(6,1,i3+'
if((i1!
=0))writeChar(7,1,i3+'
if(i4!
=0)writeChar(13,1,i4+'
if((i4==0)&
(i5!
=0))writeChar(13,1,i5+'
=0)writeChar(14,1,i5+'
(i5==0))writeChar(13,1,i6+'
elseif((i4==0)&
=0))writeChar(14,1,i6+'
if((i4!
=0))writeChar(15,1,i6+'
while(UpKey==0);
if((DnKey==0)&
if(DnKey==0)
if(AlarmTempLow>
0)AlarmTempLow--;
elseAlarmTempLow=0;
if(AlarmTempTop>
0)AlarmTempTop--;
elseAlarmTempTop=0;
/*writeChar(4,1,i1+'
writeChar(5,1,i2+'
writeChar(6,1,i3+'
writeChar(12,1,i4+'
writeChar(13,1,i5+'
writeChar(14,1,i6+'
*/
while(DnKey==0);
voidAlarm(void)
if((CurrentT>
(AlarmTempTop*10))||(CurrentT<
(AlarmTempLow*10))||(tflag==1))
BEEP=0;
BEEP=1;
voidmain(void)
//P3=0xef;
P2=0xef;
P1=0x00;
LCD_Initial();
//LCD初始化
Read_Temperature();
//读取温度值
writestring(1,0,"
DS18B20Alarmer"
//显示“DS18B20Alarmer”
delayms(1000);
//延时1S
writestring(0,0,"
CurrentT="
//显示“CurrentT=”
writestring(0,1,"
Low=10Top=40"
//显示“Low=10Top=40”NG=0;
while
(1)
{
////读取温度值
Display_Temperature();
//显示温度值
SetFun();
Alarm();
if((CurrentT<
(AlarmTempTop*10))&
(CurrentT>
(AlarmTempLow*10)))
{Cool=0;
Heat=0;
}
elseif((CurrentT>
(AlarmTempTop*10)))
{Cool=1;
}
elseif((CurrentT<
(AlarmTempLow*10))||(tflag==1))
Heat=1;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DS18B20 上下 温度 可调 程序