铜陵学院毕业论文(设计)
#include
uint8 d1[8]=%uint8 d2[2]=%uint8 d3[2]=%uint8 tm[5],tm1[5],tm2[5];
uint8 a,c,temp; float dio; uint16 k;
uint8 mode,sheding=0; char wenduh=40,wendul=20;
void delay(uint16 i) //延时函数,大约10us { while(i--);
}
void int0init() //外部中断0初始化 { EA=1; EX0=1;
IT0=1; //选择下降沿触发
}
void int1init() //外部中断1初始化 {
附录
- 27 -
王亮亮:基于单片机的智能温度检测器的设计
EA=1; EX1=1;
IT1=1; //选择下降沿触发 }
void wrc(uint8 c) //LCD写命令函数
{ delay(1000); rs=0; rw=0; e=0; P0=c; e=1; delay(10); e=0;
}
void wrd(uint8 dat) //LCD写数据函数 { delay(1000); rs=1; rw=0; e=0; P0=dat; e=1; delay(10); e=0; rs=0;
} void init()
//LCD初始化函数
{ delay(1000); wrc(0x38); wrc(0x38); wrc(0x38); wrc(0x06); wrc(0x0c); wrc(0x01);
}
//DS18B20检测温度
- 28 -
铜陵学院毕业论文(设计)
void ds18b20init() { }
dq=1; delay(1); dq=0; delay(80); dq=1; delay(5); dq=0; delay(20); dq=1; delay(35);
//18b20的初始化
void ds18b20wr(uint8 dat) { }
uint8 ds18b20rd() {
//18b20写数据
uint8 i; for(i=0;i<8;i++) { }
dq=0; dq=dat&0x01; dat>>=1;
delay(8);//在时序上只有这一块对时序要求最准确,他的时间必须大于15us dq=1; delay(1);
//18b20读数据
uint8 value,i; for(i=0;i<8;i++) { }
return value;
- 29 -
dq=0; value>>=1; dq=1;
if(dq==1)value|=0x80;
delay(8);//在这一块也对时间要求特别准确,整段程序必须大于60us
王亮亮:基于单片机的智能温度检测器的设计
}
uint8 readtemp() { }
void time0init() //定时器0初始化 { }
void sound() //蜂鸣器报警 { }
void datapros()
//读取温度内需要复位的
uint8 b; ds18b20init();
//初始化
ds18b20wr(0xcc); //发送忽略ROM指令 ds18b20wr(0x44); //发送温度转换指令 delay(100);
ds18b20init(); //初始化
ds18b20wr(0xcc); //发送忽略ROM指令 ds18b20wr(0xbe); //发读暂存器指令 a=ds18b20rd(); b=ds18b20rd(); b<<=4; c=b&0x80; a=a&0x0f; return b;
//温度的低八位 //温度的高八位
//ssss s***;s为标志位s=0表示温度值为正数,s=1温度值为负数 //温度正负标志位确认
b+=(a&0xf0)>>4;
//温度的小数部分
TMOD=0X01; TH0=0Xfc; TL0=0X18; //1ms TR0=1; EA=1; ET0=1;
uint8 i=100; while(i--) { }
beep=~beep; delay(100);
//数据处理函数
- 30 -
铜陵学院毕业论文(设计)
{
dio=a*0.0625;
k=dio*10000;//取小数点后两位有效数字
wrc(0x08+0x80);
if(c==0x80) //读取到负温度即为补码,要将其转换成源码 {
wrd('-'); temp=temp-1;
temp=(~temp);//负数的补码即为反码+1;而负数的反码为其源码取反,除了符号位;正数
的补码等于正数的反码等于正数的源码
} else { }
tm[0]=num[temp/100]; tm[1]=num[temp0/10]; tm[2]=num[temp0]; tm[3]=num[10]; tm[5]=num[11];
tm1[0]=num[wenduh/100]; tm1[1]=num[wenduh0/10]; tm1[2]=num[wenduh0];
tm2[0]=num[wendul/100]; tm2[1]=num[wendul0/10]; tm2[2]=num[wendul0];
//小数点处理
tm[4]=num[k/1000];
wrd('+'); temp=(temp);
- 31 -
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于单片机的智能温度检测器设计(8)在线全文阅读。
相关推荐: