单片机设计的温度检测显示报警程序

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

相关文档
最新文档