单片机设计的温度检测显示报警程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机设计的温度检测显示报警程序
设备技术网时间:2010-4-14
来源:电子技术网作者:
1.温度传感器AD590基本知识
AD590产生的电流与绝对温度成正比,它可接收的工作电压为4V-30V,检测的温度范围为-55℃-+150℃,它有非常好的线性输出性能,温度每增加1℃,其电流增加1uA。
AD590温度与电流的关系如下表所示:
摄氏温度AD590电流经10KΩ电压
0℃273.2 uA 2.732V
10℃283.2 uA 2.832 V
20℃293.2 uA 2.932 V
30℃303.2 uA 3.032 V
40℃313.2 uA 3.132 V
50℃323.2 uA 3.232 V
60℃333.2 uA 3.332 V
100℃373.2 uA 3.732 V
实验任务:
利用AD590温度传感器完成温度的测量,把转换的温度值的模拟量送入ADC0809的其中一个通道进行A/D转换,将转换的结果进行温度值变换之后进行监控。
由于AD590的温度变化范围在-55℃-+150℃之间,经过10KΩ之后采样到的电压变化在2.182V-4.232V之间,不超过5V电压所表示的范围,因此参考电压取电源电压VCC,(实测VCC=4.70V)。
由此可计算出经过A/D转换之后的摄氏温度显示的数据为:
如果(D*2350/128)<2732,则显示的温度值为-(2732-)D*2350/128))
如果(D*2350/128)≥2732,则显示的温度值为+((D*2350/128)-2732)
#include "reg52.h"//头文件
#include "intrins.h"
#define uchar unsigned char//宏定义
#define uint unsigned int//宏定义
sbit RS=P1^0;//LCD1602定义I/O的硬件接口
sbit RW=P1^1;//LCD1602定义I/O的硬件接口
sbit E=P1^2;//LCD1602定义I/O的硬件接口
sbit key_1=P1^3;//按键1定义I/O的硬件接口////Alarm_Value;//温度报警值+1度sbit key_2=P1^4;//按键2定义I/O的硬件接口////Alarm_Value;//温度报警值-1度sbit key_3=P1^5;//按键3定义I/O的硬件接口
sbit key_4=P1^6;//按键4定义I/O的硬件接口
sbit AD590_2=P1^7;//A定义I/O的硬件接口,通道选择//C、D接地
sbit key_6=P3^7;//按键6定义I/O的硬件接口//控制温度报警标志位
//
sbit ST=P3^0; //ST和ALE接在一起
sbit OE=P3^1;
sbit EOC=P3^2;
sbit CLK=P3^3;
sbit SPK=P3^4; //喇叭,蜂鸣器报警
sbit LED1=P3^5; //LED报警
sbit LED2=P3^6;
#define DPDR P2//LCD1602并行数据输出接口定义
#define DPDR_1 P0//ADC0809并行数据输入接口定义
uchar temp;//最终温度值
unsigned long temp2;//平均温度
unsigned long temp1;//温度1,,AD590_1接IN0
unsigned long temp2;//温度2,,AD590_2接IN1
uchar Alarm_Value;//温度报警值
bit Alarm_Value_bit;//温度报警标志位
uchar code DispTab_1[]={'0','1','2','3','4','5','6','7','8','9'};//1602:0-9 数字uchar code DispTab_2[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};//温度符号uchar DispBuf[6]; //6字节的显示缓冲区
char char_char_1[]={" Temperature: "};//定义字符串
void delay(uint z)//1ms延时
{
uchar x,x1;
for(;z>0;z--)
{
for(x=0;x<114;x++)
{
for(x1=0;x1<1;x1++);
}
}
}
void write_Directive(uchar a)//写LCD指令
{
RS=0;
RW=0;
E=0;
DPDR=a;
delay(5);
E=1;
delay(5);
E=0;
delay(5);
}
void write_Data(uchar a)//写LCD数据
{
RS=1;
RW=0;
delay(5);
E=0;
DPDR=a;
delay(5);
E=1;
delay(5);
E=0;
delay(5);
}
void LCD_init()//LCD初始化
{ uchar i;
delay(15);
write_Directive(0x38);
delay(5);
write_Directive(0x38);