1、0单片机大作业-温度控制系统设计班级:1302041学号:13020410022姓名:刘云昭1目录目录 .1摘 要 .2ABSTRACT.21 设计要求及方案选择 .31.1 设计要求 .31.2 方案选择 .32 理论分析与设计 .32.1 温度采集电路的分析及设计 .32.3 直流电源电路的分析及设计 .43 电路设计 .53.1 硬件电路的设计 .53.1.1 51 单片机 .53.1.2 温度采集部分 .63.1.3 温度显示部分 .63.1.4 温度处理电路 .73.2 软件的设计 .74 系统测试 .104.1 调试所用的基本仪器清单 .104.2 调试结果 .104.3 测试结果
2、分析 .115 总结 .11参考文献 .1221 设计要求(1)温度高于 28启动制冷开关,从而使制冷压缩机工作;(2)温度低于 15启动加热开关,从而使加热丝导通工作;(3)以上设定通过用户从键盘上输入实现;(4)温度需要用八段式 LED 显示(温度显示范围-4070) ;(5)制冷和制热需要 LED 灯显示其工作。2 电路设计2.1 硬件电路的设计运用 51 单片机、七段数码管、LED 灯、晶振、电解电容、DS18B20、电阻、排阻、电源等组成全部系统。图 2-1 温度控制系统原理总图2.1.1 51 单片机运用单片机处理温度转化成的串行数字信号,实现信号处理。将获得的结果通过输出装置输出
3、显示在七段数码管上,并且在最后的处理部分也借用了 P2 和 P3 口的三个引3脚,来点亮所需要点亮的 LED 灯。89C52 单片机组成结构中包含运算器、控制器、片内存储器、并行 I/O 口、串行I/O 口、定时/计数器、中断系统、振荡器等功能部件。图 2.1.1 单片机控制部分电路2.1.2 温度采集部分运用一个 DS18B20 温度传感器作为外部温度的检测部分,并将采集好的串行数字信号供单片机处理。图 2.1.2 DS18B20 传感器获取外界温度电路42.1.3 温度显示部分六个七段数码管组成显示部分(实际用到五个) 。图 2.1.3 温度显示部分2.1.4 温度状态指示电路温度高于指定
4、温度(28)时,LED-RED 亮(代表制冷工作) ;温度在指定温度(1528)之间时,LED-GREEN 亮;温度低于指定温度(15)时,LED-BLUE 亮(代表制热工作) 。图 2.1.4 状态指示部分 2.2 软件的设计2.2.1 程序全部代码#include #define W_IO P1 /位选线从左往右分别与 P1.0-P1.4 相连#define S_IO P0 /段选线从 A-DP,分别与 P0.0-p0.7 相连#define uchar unsigned char#define ulong unsigned long#define uint unsigned intint
5、 t,a;uint temp,flag;float ftemp;sbit LED1=P20;sbit LED2=P24;sbit LED3=P31;sbit ds=P34;uchar Time5; /数码管要显示的 4 位数字和温度正负int code S_Data10=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;int code W_Data5=0x01,0x02,0x04,0x08,0x10;void delayms(int time)/延时函数8int i,j;for(i=time;i0;i-)for(j=110;j0;j-);vo
6、id LED(uchar Data5,uint dp,uint flag)/七段数码管上的显示程序 int i=0,j=0;P0=0XFF;for(i=0;i0)i-;ds=1;i=4;while(i0)i-;bit du1wei() /读一位数据uint i;bit dat;ds=0;i+; ds=1;i+;i+;dat=ds;i=8;while(i0)i-;return (dat);uchar du1zijie()/读一字节数据uchar i,j,dat;dat=0;for(i=1;i1);return(dat);void xie1wei (uchar dat)/写一字节uint i;uc
7、har j;bit test;for(j=1;j1;if(test)ds=0;i+;i+;ds=1;i=8;while(i0)i-;else ds=0;i=8;while(i0)i-;ds=1;i+;i+;void xie_temp_zhuanhuan()/开始获取温度并转换init18b20();delayms(1);xie1wei (0xcc);xie1wei (0x44);9uint du_temp_flag()/读存储器中存储的温度,标记正负uchar a,b;uint c;init18b20();delayms(1);xie1wei (0xcc); xie1wei (0xbe);a=
8、du1zijie(); b=du1zijie();temp=b;temp0xf000) c=1;return c; uint du_temp_cunchuqi(uint flag)/读存储器中存储的温度,转换uchar a,b;init18b20();delayms(1);xie1wei (0xcc); xie1wei (0xbe);a=du1zijie(); b=du1zijie();temp=b;temp=1500LED2=0;LED3=0;void main()/主函数while(1) xie_temp_zhuanhuan();flag=du_temp_flag();t=du_temp_
9、cunchuqi(flag);Time0=flag;Time1=t/1000;Time2=t%1000/100;Time3=t/10%10;Time4=t%10;LED(Time,2,flag);baojin(flag);2.2.2 部分代码说明1.代码全程引入一关键(全局)变量 flag,代表温度正负,当温度在零上时,flag 为 0,温度在零下时,flag 为 1,作为影响多个子函数的重要参数。2.课题要求中默认 DS1820 初始化和读取程序已知,意为程序中直接代替,但这样就无法实现软件仿真,所以从网上查找了以下六个涉及传感器 DS18B20 的初始化、读写及转换的子函数:init18b
10、20()/DS18B20 复位,初始化函数11du1wei() /读一位数据du1zijie()/读一字节数据xie1wei (uchar dat)/写一字节xie_temp_zhuanhuan()/开始获取温度并转换du_temp_cunchuqi(uint flag) /读存储器中存储的温度,转换其中“du_temp_cunchuqi(uint flag) /读存储器中存储的温度,转换”一子函数,由于搜集到的代码只针对零上温度处理,故添加处理零下温度部分代码如下:if(flag=1)temp=temp;temp=temp+1;对零下温度作按位取反并加 1 的处理,之后和零上温度处理方式相同
11、3. void LED(uchar Data5,uint dp,uint flag)/七段数码管上的显示程序 int i=0,j=0;P0=0XFF;for(i=0;i5;i+)if(i=0)W_IO=W_Datai;if(flag=0) S_IO=0xff; else S_IO=0xbf;delayms(5);elseif(dp!=i)W_IO=W_Datai;S_IO=S_DataDatai;elseW_IO=W_Datai;S_IO=S_DataDataidelayms(5);数码管的显示是另一关键,结合主函数可知,该子函数中 i=0-4 代表六联数码管上 2-6 即后五个的对应处理情况,即 i=0 对应符号位, i=1-4 对应数字位。符号位与数字位处理方式不同,故有了 for 循环内第一层 if-else 条件判断区分参数 dp 关系小数点位设定,主函数中取 dp=2,对应 i=2 时的小数点特殊处理,故有了第一层 if-else中 else 下的又一层103 测试结果3.2 仿真结果温度信号模拟,仿真结果如图。图 3.1.1 高温时,LED-RED 亮11图 3.1.2 温度在设定范围内,LED-GREEN 亮图 3.1.3 低温时,LED-BLUE 亮