资源描述:
《单片机报告--温度控制系统设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、单片机大作业------温度控制系统设计班级:学号:姓名:刘云昭11目录目录1摘要2ABSTRACT21设计要求及方案选择31.1设计要求31.2方案选择32理论分析与设计32.1温度采集电路的分析及设计32.3直流电源电路的分析及设计43 电路设计53.1硬件电路的设计53.1.151单片机53.1.2温度采集部分63.1.3温度显示部分63.1.4温度处理电路73.2 软件的设计74系统测试104.1调试所用的基本仪器清单104.2调试结果104.3 测试结果分析115总结11参考文献12111设计要求(1)温度高于28℃启动制冷开关,从而使制冷压缩机工作;(2)温度低于15℃启动加
2、热开关,从而使加热丝导通工作;(3)以上设定通过用户从键盘上输入实现;(4)温度需要用八段式LED显示(温度显示范围-40℃~70℃);(5)制冷和制热需要LED灯显示其工作。2 电路设计2.1硬件电路的设计运用51单片机、七段数码管、LED灯、晶振、电解电容、DS18B20、电阻、排阻、电源等组成全部系统。图2-1温度控制系统原理总图2.1.151单片机运用单片机处理温度转化成的串行数字信号,实现信号处理。将获得的结果通过输出装置输出显示在七段数码管上,并且在最后的处理部分也借用了P2和P3口的三个引脚,11来点亮所需要点亮的LED灯。89C52单片机组成结构中包含运算器、控制器、片内
3、存储器、并行I/O口、串行I/O口、定时/计数器、中断系统、振荡器等功能部件。图2.1.1单片机控制部分电路2.1.2温度采集部分运用一个DS18B20温度传感器作为外部温度的检测部分,并将采集好的串行数字信号供单片机处理。图2.1.2DS18B20传感器获取外界温度电路112.1.3温度显示部分六个七段数码管组成显示部分(实际用到五个)。图2.1.3温度显示部分2.1.4温度状态指示电路温度高于指定温度(28℃)时,LED-RED亮(代表制冷工作);温度在指定温度(15℃~28℃)之间时,LED-GREEN亮;温度低于指定温度(15℃)时,LED-BLUE亮(代表制热工作)。图2.1.
4、4状态指示部分2.2 软件的设计2.2.1程序全部代码11#include#defineW_IOP1//位选线从左往右分别与P1.0-P1.4相连#defineS_IOP0//段选线从A-DP,分别与P0.0-p0.7相连#defineucharunsignedchar#defineulongunsignedlong#defineuintunsignedintintt,a;uinttemp,flag;floatftemp;sbitLED1=P2^0;sbitLED2=P2^4;sbitLED3=P3^1;sbitds=P3^4;ucharTime[5];//数码管要显示
5、的4位数字和温度正负intcodeS_Data[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};intcodeW_Data[5]={0x01,0x02,0x04,0x08,0x10};voiddelayms(inttime)//延时函数11{inti,j;for(i=time;i>0;i--)for(j=110;j>0;j--);}voidLED(ucharData[5],uintdp,uintflag)//七段数码管上的显示程序{inti=0,j=0;P0=0XFF;for(i=0;i<5;i++){if(i==0){W_
6、IO=W_Data[i];if(flag==0)S_IO=0xff;elseS_IO=0xbf;delayms(5);}else{if(dp!=i){W_IO=W_Data[i];S_IO=S_Data[Data[i]];}else{W_IO=W_Data[i];S_IO=S_Data[Data[i]]&0x7f;}delayms(5);}}}voidinit18b20()//DS18B20复位,初始化函数{uinti;ds=0;i=103;while(i>0)i--;ds=1;i=4;while(i>0)i--;}bitdu1wei()//读一位数据{uinti;bitdat;ds=0
7、;i++;ds=1;i++;i++;dat=ds;i=8;while(i>0)i--;return(dat);}uchardu1zijie()//读一字节数据{uchari,j,dat;dat=0;for(i=1;i<=8;i++){j=du1wei();dat=(j<<7)
8、(dat>>1);}return(dat);}voidxie1wei(uchardat)//写一字节{uinti;ucharj;bittest;for(j=1