《单片机及应用》课程设计报告书--消毒柜控制电路的设计.docx
单片机及应用课程设计报告书课题名称消毒柜控制电路的设计摘要第一部分:题目要求(O1)第二部分:方案论证与选择(02)第三部分:电路设计与参数选择(03)第四部分:系统软件设计(04)第五部分:系统调试与仪器使用(15)第六部分:使用说明书(16)总结(16)摘要本作品是以STC89C52RC芯片为核心,DS18B20温度传感器、1CD1602显示、电子开关管等电路构成的智能消毒柜控制电路。这种智能消毒柜控制电路具有温度测量、温度反馈、恒温控制、定时开启以及定时关闭等一系列功能。第一部分题目要求一、基本要求我们要设计一台消毒柜控制系统,要求:(1)显示消毒柜温度、保持时间;可以键盘设定消毒柜温度、定时时间;可以实现实时中断功能;消毒后自动关机;测温误差:0.5;定时误差:20秒/月。;二、发挥与创新部分我们设计的消毒柜控制系统,摒弃了只有传统的开启与关闭功能,通过对STC89C52RC芯片的充分利用,给其增加了温度反馈和定时开启、关闭的功能,并且使其能在温度到达设定温度时自动恒温。而且能定时开启或定时关闭。第二部分方案论证与选择一、系统主要部分有:1:中央处理器电路:采用单片机芯片机外围电路构成最小系统。2:温度探测电路:DS18B20温度传感器3:人机接口电路:包括按键电路、1CDI602显示电路。4:信号处理电路:包括传感器、信号处理、等电路。5:执行部件电路:包括显示器、状态指示灯。二、方案论证及选择1、加热管控制部分由于市场上有许多的消毒柜,从而想用单片机来实现消毒柜的恒温功能和定时功能,通过5个按键代替市场上消毒柜的按键,分别为开启,关闭、左右、上下设定。通过反馈的温度于设定温度进行比较,从而控制MOS管的导通与关闭。通过按按键可设定定时时间以及设定温度,从而可以控制定时开启或者定时关闭。2、测温部分测温部分是基于DS18B20温度传感器的探测,然后实时传输给1602显示器。并且设有恒温系统。当环境温度等于设定温度时状态指示灯灭,加热管断开。当环境温度低于设定温度时状态指示灯亮,加热管导通。第三部分电路设计与参数选择一、单片机最小系统电路设计和元件的选择D1(心.一冷5黑螳含罂蜀.-ii>ak<c-(主电路图)17STC89C52-5V13RP3.5470RId(主控)温度传感器(温度检测电路)GND1CDI602液晶显示屏(显示电路)制冷电机与散热电机驱动电路(外围控制电路)第四部分软件设计部分一、主程序/*产品名称:消毒柜控制电路的设计/*成员:吴延、夏昕、苏梦野、郭美辰/*日期:2017.12.6inc1ude<reg52.h>#inc1ude<intrins.h>inc1ude<stdio.h>Wdefineuintunsignedint#defineucharunsignedcharWdefineu1unsigned1ong/*键盘使用o口*/sbitkey1=P00;sbitkey2=P01;sbitkey3=P02;sbitkey4=P03;sbitkey5=P04;/*制冷设备使用o口*/sbitmotor_co1d_1ed=P35;定时指示灯sbitSCP=P27;加热管(散热电机口)/*液晶使用I/O口*/sbit1CDRW=P33;液晶读写选择端ucharnum,num1,num2,ge1,bai1,shi1,ge2,shi2,count,s,m,h,ms,bai3,shi3,ge3;定义全局变量ucharfIag=O;ON/OFF标志位ucharwendu2=125;设定温度ucharkey_f1ag=0;按键标志位ucharTimer_fIag=I;显示(+)显示(-)标志位UChartime_fIag=O;判断是否进入了定时模式标志位0为无,1为有uintwendu;uchara=0;毫秒ucharb=0;秒uintc=0;分钟ucharf1ag_T2=0;开始后是否进入模式二标志位ucharf1ag_T2_2=0;进入模式二voiddisp1ay();voidspeed();voidopen();voidstar();voidstop();voidTime();voidTimerchose();UintGet_Tmp();获取温度gettheWendueraturevoidDisp1ay(uintwendu);voidspeed();voidif_time();判断是否进入定时模式voidkayscan();按键函数uintx,y;for(x=time;x>0;X一-)for(y=110;y>0;y一一);P2=0X00;motor_co1d_1ed=1;count=0;/进入时间设定时候的延时s=0;毫秒分钟voidinit()初始化子程序/AUXR&=0x7F;定时器时钟12T模式TMOD&=OxFO;设置定时器模式TMODI=0x11;设置定时器模式T1O=0x00;设置定时初值IOmsTHO=OxDC;设置定时初值T11=0x00;设置定时初值20msTH1=0xB8;设置定时初值ETO=1;打开定时器To中断ET1=1;打开定时器T1中断TFO=0;TF1=0;EA=1;开总中断voidT0_time(void)interrupt1(T1O=0x00;设置定时初值IOmsTHO=OxDC;设置定时初值ms+;if(ms=50)(motor_co1d_1ed=1;if(ms=100)如果记到IOo次说明IS已到ms=0;/num清0重新计数motor_co1d_1ed=0;s+;if(s=60)(s=O;m+;if(m=30)(m=0;h=h+5;if(h=num2)h=0;TRO=O;if(Timer_f1ag=1)(StopO;if(Timer_f1ag=0)star();voidT1_time()interrupt3定时器1(T11=0x00;设置定时初值20msTH1=0xB8;设置定时初值a+;if(a=50)(a=0;毫秒b+;秒if(b=60)(b=0;秒c+;分钟if(c=999)TR1=O;/*液晶显示部分*/voidwrite_com(ucharcom)指令函数1CDRS=O;1CDRW=O;P1=com;deIayms(5);1CDEN=I;deIayms(5);1CDEN=O;voidwirte_dat(uchardat)数据函数1CDRS=I;1CDRW=O;P1=dat;deIayms(5);1CDEN=I;de1ayms(5);1CDEN=O;void1cd_init()液晶初始化(1CDEN=O;write_com(0x38);write_com(OxOc);各种指令write_com(0x06);write_com(0x01);void1CD_P0S(ucharPOS)write_com(POS+0X80);地址函数voiddisp1ay_init()显示函数初始化(固定不变的字)(1CD_P0S(OXOa);wirte_dat('T);wirte_dat(':,);1CD_P0S(0X46);wirtedat('T);wirte_dat('i');wirte_dat('m');wirte_dat('e');wirte_dat(':');disp1ay();/We1comeToiContro1systemvoiddisp1ay2_init()(1CD_POS(0X00);wirte_datC');wirte_dat('');wirte_dat('W');wirte_dat('e');wirte_dat(,);wirte_dat('c');wirte_dat('o');wirte_dat('m');wirte_dat('e');1CD_P0S(OXOB);wirte_dat('T');wirte_dat('o');wirte_dat(':');1CD_POS(0X41);wirte_dat(,o,);wirte_dat(,n,);wirte_dat('t');wirte_dat(,r,);wirte_dat('o');wirte_dat(,);1CD_P0S(0X49);wirte_dat('S');wirte_dat('y');wirte_dat('s');wirte_dat('t');wirte_dat(,e,);wirte_dat(,m,);de1ayms(12000);Icdinit();voiddisp1ay3_init()/版本号VerSionnumber:V2.01CD_P0S(0X00);wirte_dat('V');wirte_dat('e');wirte_dat('s');wirte_dat('i');wirte_dat('o');wirte_dat('n');wirte_dat('');wirte_dat('N');wirte_dat('0');wirte_dat(':');wirte_dat('V');wirte_dat('2');wirte_datwirte_dat('0');1CD_P0S(0X40);wirte_dat('P');wirte_dat(,);wirte_dat('e');wirte_dat('a');wirte_dat('s');wirte_dat('e');wirte_dat('');wirtedat('W');wirte_dat(,a,);wirte_dat(,i,);wirte_dat(,t,);wirte_datwirte_datwirte_datde1ayms(15000);1cd_init();voidmath()运算函数shi2=num210;时间ge2=num2%10;bai3=wendu2/100%10;shi3=wendu2/10%10;设定温度ge3=wendu2%10;voidopen()/ON/OFF显示函数if(f1a