基于单片机的智能温度检测器设计(8)

2020-04-17 06:57

铜陵学院毕业论文(设计)

#include typedef unsigned char uint8; typedef unsigned int uint16; sbit rs=P2^6; //数据命令选择 sbit rw=P2^5; //读写选择 sbit e=P2^7; //使能 sbit beep=P3^7; //蜂鸣器 sbit dq=P3^6; //温度传感器接口 sbit led=P3^1; // sbit k1=P3^2; //模式按键 sbit k2=P3^4; //加 sbit k3=P3^5; //减 sbit k4=P3^3; //确认 uint8 num[]=\

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 -


基于单片机的智能温度检测器设计(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:鼎利测试 - WCDMA - HSDPA - HSUPA网络关键参数含义 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: