1、 单片机课程设计报告单片机课程设计报告 课题名称:课题名称: 高温报警系统高温报警系统 专专 业业: 电子与信息工程电子与信息工程 班班 级:级: 电信一班电信一班 学生姓名:学生姓名: XXXXXXXXXX 2012 年年 12 月月 15 日日 一、设计要求一、设计要求 1通过四个独立按键设置高温报警阈值温度,同时可以随时修改阈值温度。 2利用温度芯片(DS18B20)实时监测当前温度并通过 4 位共阴数码管显示当前温度。 3当检测到当前温度超过阈值温度接通蜂鸣器报警,当温度回落低于阈值温度警报解 除。 二、设计方案二、设计方案 高温报警系统主要基于 NI-51-A 单片机开发板设计而成,
2、整个系统的设计如下 图所示: 三、系统电路三、系统电路 电源模块:电源模块: 通过 USB数据线将开发板接到电脑 USB端口, 由 1、 4 端口将+5V 电源接入开发 板,为各个部件提供标准工作电压。 51 最小系统模块:最小系统模块: 51 最小系统模块主要实现在接入+5v 电源时可简单控制整个系统的开关、复位。 对获取的数据进行处理,并对相关模块进行控制。 数码管数码管显示显示模块模块: 4 位共阴数码管用来显示温度信息,可精确到 0.01。 独立按键独立按键模块:模块: 通过独立按键来控制程序进入阈值温度设置状态, 并进行阈值温度调节, 设置完 成后通过独立按键退出设置状态,恢复温度显
3、示。 温度检测温度检测模块:模块: 实时检测当前温度并获取的温度值传送给 51 芯片,进行分析、处理。 蜂鸣器报警模块:蜂鸣器报警模块: 当温度超过阈值时,由 51 芯片控制蜂鸣器接通,发出警报声。 四、四、proteus 仿真电路仿真电路 五五、程序、程序设计设计 通过 4 个独立按键设置阈值温度(超过该阈值温度发出警报) ,通过温度芯片 (DS18B20)实时监测当前温度,蒋获取的温度数据送给 51 芯片进行数据分析、处理, 并控制 4 位共阴数码管显示当前温度信息。 当检测到当前温度超过阈值温度便控制蜂 鸣器发出警报声,当温度回落至阈值温度以下解除警报。需要修改阈值温度时,通过 4 个独
4、立按键配合使用来调节阈值温度(精度为 1) 。 程序流程图:程序流程图: 程序源代码: #include“reg52.h“ #include #define uchar unsigned char #define uint unsigned int sbit fm=P34; /蜂鸣器位定义 sbit key1=P20;/独立按键位定义 sbit key2=P21; sbit key3=P22; sbit key4=P23; sbit s1=P24; /数码管位定义 sbit s2=P25; sbit s3=P26; sbit s4=P27; sbit DQ=P35; /温度芯片位定义 ucha
5、r code tab10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x8 2,0xf8,0x80,0x90; uint a,keyflag; void delay1(int ms) /延时函数 uint i,j; for(i=0;i=1; if(btmp=0) DQ=0; delay(8); DQ=1; else DQ=0; j+;/拉低要有 1us DQ=1; delay(8);/拉高后要 延时 60us /* 启 动 温 度 转 换 子 程 序 */ void tempconvert() reset(); delay(1); tempwrite(0xcc); /跳过验证
6、序列号命 令,若单总线上有多个 ds18b20,则不可以 使用该命令 tempwrite(0x44); /启动温度转换命 令 uchar tempREAD(void) uchar i,j; / 这个地方的 i 必须 设置成 uchar, 不知是为啥, 因为如果是 uint, 就读不出数 uchar a,b; bit bite; b=0; for(i=0;i0;y-); */ void main() uint temp; uint i,flag1,flag2,flag3,flag4; keyflag=1; a=23; flag1=flag2=flag3=flag4=0; while(1) if(key1=0)flag1=1;delay1(3); if(flag1=1delay1 (3);keyflag=1; while(keyflag) display(a); if(key2=0)flag2=1;