消毒柜的单片机设计_第1页
消毒柜的单片机设计_第2页
消毒柜的单片机设计_第3页
消毒柜的单片机设计_第4页
消毒柜的单片机设计_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

消毒柜的单片机设计计控学院CollegeofcomputerandcontrolengineeringQiqiharUniversity电气工程课程设计报告题目:消毒柜的控制系统系别电气工程系专业班级电气101班学生姓名杨阳学号2010024023指导教师李艳东提交日期7>2013年6月21日成绩目录……………………2、方案论证(规划、选定)……………3、方案说明(设计)……………………4、硬件方案设计…………5、软件方案设计…………6、调试………………………7、技术小结(结束语)…………………8、参考文献…………………9、附录(源程序代码、电路图等)…………绪论

该课题是设计一个消毒柜其实就是设计一个智能的温度控制系统,消毒柜主要通过加热到一个指定温度,对餐具等卫生洁具进行高温消毒,消毒柜将高温控制在一个指定的范围内,并维持一定时间,杀灭细菌,极大地增强了人们的饮食卫生,大大降低了疾病的交叉传染,为提高人们的身体健康起了重要的作用。

本文主要介绍了一个AT89C51单片机制作的消毒柜控制电路。它主要包括供电电源电路、上电复位电路、晶振电路、开关控制电路、电路等部分。文中对各电路的结构及工作原理作了详尽的介绍。电路运行后,能自动定时控制消毒柜的加电和断电,适时有效地完成对柜内餐具或其它物品的消毒工作。具有电路简单、制作容易、使用灵活等优点。通过该电路,可以进一步了解到单片机电路的应用扩展功能和指令应用技巧。

消毒柜就是为了人们日常生活中的餐具消毒而设计的,采用微电脑控制技术,精确地控制消毒柜内的温度和加热时间,很大程度上改本设计采用,送1单片机系统,1单片机对采集的数据处理后送显示电路,实时动态地显示当前的温度及倒计时时间。对温度的控制主要由单片机来消毒柜通过紫外线、远红外线、高温、臭氧等方式,给食具、餐具、毛巾、衣物、美容美发用具、医疗器械等物品进行杀菌消毒、保温除湿。广泛用于酒店宾馆、餐馆、学校、部队、食堂等场所。会编制程序和设计单片机的外围电路;完成软件系统设计:绘出系统流程图、系统原理图;系统调试与仿真:将设计的控制系统在Protuse中进行系统调试或仿真2.2系统设计要求2.1.1显示消毒柜温度,保持时间。可以键盘设定消毒柜温度,定时时间。可以实现中断功能。图2.1系统组成框图2.4系统工作原理该系统是基于AT89S51单片机的温度控制的且实现通过高温来杀灭病毒的消毒柜系统,该系统主要三大部分组成。第一部分是由温度传感器DS18B20采集实时温度转换成数字信号;第二部分的电路是由键盘控制消毒的定时和启停;第三部分是液晶显示屏的显示部分。AT89S51单片机对键盘的扫描结果和即时温度值的处理,实现对温度的实时控制,系统设计了启动设定定时时间,设置定时时间,中断控制定时,共四个键,按下启动设定定时时间功能键即确定开始温度增减按钮时,单片机加热时间可通过温度加减按钮设定,开始加热,启动定时器中断控制,当温度加热设定时间到后停止加热。3、方案说明3.1DS18B20一线总线温度传感器特点:??体积小?安装方便AT89C51按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~24MHz工作频率,使用AT89C51单片机时无须外扩存储器。因此,为晶振、复位、电源等电路和必要的软件组成的单个单片机。图2系统硬件结构框图单片机采用的是ATMEL公司的AT89S51芯片该款芯片是一种低功耗、高性能CMOS8位微控制器,具有K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的位CPU和在系统可编程Flash,使得AT89S5为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S5具有以下标准功能:k字节Flash,字节RAM,32位I/O口线,看门狗定时器,2个数据指针,个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S5可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。8位微控制器K字节在系统可编程FlashAT89S54.4键盘控制电路该键盘接口电路通过按键控制定时和中断。本程序设计根据通过温度传感器采样来的温度值,经过内部转化为二进制数字量,再通过51单片机控制输出至LCD液晶显示屏,然后调用显示程序进行温度的事实显示。对于各个功能键的程序是从P0口读数、再转换成十进制数、送显缓区、再根据键盘扫描的结果对温度值进行比较判断,当按下的键是加减功能键时,系统要控制加热的时间可进行调节。开始加热后,通过定时器控制加热时间到的中断,当加热时间由设定值减至0时停止加热,键盘显示实时温度。通过在主程序里面设立标志,该程序是通过延时的方法来确保温度转换为显示数据实现温度与按键的统一和“同步”,实时的控制加热的工作,以达到人们所要求达到的效果。5.2主程序流程图定时未到,继续判断定时到图3主程序流程图本软件设计中,系统子程序的设计是整个程序设计的重中之重,子程序以模块化的方式实现各个独立功能,再通过主程序来调用功能子程序,使整个程序实现完整的功能。按键处理子程序,DS18B20温度采样子程序,温度采样转化子程序,显示处理子程序。6、调试6.1硬件调试6.1.1.由于本次课程设计做了实物出来,通过设计方案,在试验焊接板上进行合理布局并焊接实物图。然后根据实验指导书上的各功能芯片的端口地址,连接号各部分电路,用电表测量焊接点的正常与否,最后连上电源。6.1.2.检测LCD显示模块,因为通过键盘显示,可以直观的知道程序是否基本运行正常,是否按预定的显示。6.1.3.调试键盘模块电路,看是否按压正常,以及二极管闪灭部分是否能够实现实时闪亮。6.1.4.最后进行整体硬件电路的联调。软件调试是个很重要的过程,由于软件出现错误的话就基本上各部分功能都实现都有困难,所以软件的调试时重中之重。6.2.1第一步是进行的是DS18B20的软件的调试,通过采集温度后内部转换后通过合理的内存单元的分配,存储采样后转换的值,然后同过51单片机程序看是否实现在LCD上显示实时温度值。6.2.2键盘扫描部分程序的调试,该部分是程序中的功能键实现控制温度和时间的主要的部分,如果该部分程序出现错误的话,逻辑就会出现混乱,各功能键将不能实现,在调试的过程中,我们发现,我们的键盘电路的接法接口要正确连接,一旦键盘口搞错的话,就会出现按键的功能的混乱,所以在这一步分的调试上最主要是把握键盘的控制分析。6.2.3最后一部分调试显示程序的调试,该部分程序的调试,关系到该课设是否够直观的体现温度值,以及建立一个直观的人机对话界面,在该部分程序的调试的过程中面临的最大困难就是对于显缓单元的分配,以及初始化,读写的控制,如果显缓单元分配有冲突的话,就会导致程序逻辑错误,所以应该仔细调试该部分应该边编写边调试。用专门的编译软件Keil对程序进行编译,编译无误后。并让其生成HEX文件,按照软件流程图在仿真软件Proteus上进行仿真,把各个元器在仿真软件中找出来,再将它们连接起来,连接完毕后将生成的HEX文件加载到单片机中。经过详细的硬件调试和软件调试之后,系统工作正常,LCD液晶显示模块共两行,分别按要求实时显示设定的最高和最低温,当前温度值,定时时间值。按下“加减键”时,系统可调节消毒加热的时间,加热时间到后点亮定时到指示灯,当时间到达到0时,停止加热。7、技术小结通过一个多星期的研究动手实践完成,简单的消毒柜控制系统初步成形。实物图也出来了,实现了课程设计的基本要求。本设计集中了按键,定时器,液晶显示等的应用。对于按键部分控制简单,因为是独立的按键控制,只需要与51单片机的任一输入输出端口相连,通过控制器高低电平即可。对于定时器和外部中断0,1的设计书写,只需要对中断和定时器控制的方法和步骤熟悉,熟练运用它们的启动停止就可正确完成控制。对于我来说最难得就是LCD液晶显示的控制了,硬件连接图可根据经验和管脚说明连接就行,但软件程序编写时对其的不熟悉和难以理解,给了我很大的障碍,以至于很久弄不出程序,不能支持实物电路板的正常工作。后来经过学习参考咨询和大家交流等各种渠道,慢慢的掌握了其基本的知识,才有了后来的完整的程序。本次课设一个不足之处就是没有完成消毒后自动关机的功能,浪费单片机的内部资源。对于温度传感器电路,还存在缺憾,并不能完全掌握该部分程序的编写。 本课程设计自己去焊接电路,锻炼了独立思考和实际操作的能力,一定程度上增加了课程设计的难度,但是真正对我们设计电路却是一个帮助和提高,所以我努力并认真的对待着本次的设计,希望能够自行设计硬件电路根据自己设计的硬件电路来编制相应的程序在对我们掌握各硬件部分电路有更好的理解,也一定程度上复习了以前所学的其基础知识,也能更好的掌握一些电气知识。8、参考文献[1]单片机原理与应用,张毅刚,电子工业出版社[2]电路原理,邱关源,高等教育出版社[3]张迎辉,.单片微型计算机键盘接口设计[4]9、附录源程序://#include//用AT89C51时就用这个头文件#include//用华邦W78E58B时必须用这个头文件#include#include#include#include#include#include#include"LCD1602.h" ////液晶显示头文件//sbitsbitk0P3^7;//确认开始温度增减的按钮sbitk3P1^1;//温度加sbitk4P1^3;//温度减sbitk5P1^7;//确定按钮sbitLEDP3^0;//温度到后亮unsignedcharmin0;unsignedchartemp0;unsignedinta0;unsignedcharb0;unsignedchart[2],*pt; //用来存放温度值,测温程序就是通过这个数组与主函数通信的//unsignedcharTempBuffer1[9]0x2b,0x31,0x32,0x32,0x2e,0x30,0x30,0x43,'\0';unsignedcharTempBuffer1[17]0x2b,0x31,0x32,0x32,0x2e,0x30,0x30,0x43,0x54,0x3a,0x30,0x30,0x43,0x3a,0x30,0x30,'\0';unsignedcharTempBuffer0[17]0x54,0x48,0x3a,0x2b,0x31,0x32,0x35,0x20, 0x54,0x4c,0x3a,0x2b,0x31,0x32,0x34,0x43,'\0'; //显示温度上下限,上电时显示TH:+125TL:+124C unsignedcharcodedotcode[4]0,25,50,75;/***因显示分辨率为0.25,但小数运算比较麻烦,故采用查表的方法*******再将表值分离出十位和个位后送到十分位和百分位********************/voidcovert0unsignedcharTH,unsignedcharTL //将温度上下限转换为LCD显示的数据ifTH0x7F//判断正负,如果为负温,将其转化为其绝对值TempBuffer0[3]0x2d; //0x2d为"-"的ASCII码 TH~TH; TH++;elseTempBuffer0[3]0x2b; //0x2B为"+"的ASCII码ifTL0x7fTempBuffer0[11]0x2d; //0x2d为"-"的ASCII码TL~TL+1;elseTempBuffer0[11]0x2b; //0x2B为"+"的ASCII码TempBuffer0[4]TH/100+0x30; //分离出TH的百十个位ifTempBuffer0[4]0x30TempBuffer0[4]0xfe;//百位数消隐TempBuffer0[5]TH%100/10+0x30; //分离出十位TempBuffer0[6]TH%100%10+0x30; //分离出个位TempBuffer0[12]TL/100+0x30; //分离出TL的百十个位ifTempBuffer0[12]0x30TempBuffer0[12]0xfe;//百位数消隐TempBuffer0[13]TL%100/10+0x30; //分离出十位TempBuffer0[14]TL%100%10+0x30; //分离出个位//ifk00b0;ifTempBuffer1[2]TempBuffer1[14]&&TempBuffer1[3]TempBuffer1[15]&&b1LED1;b0;k01;voidcovert1void //将温度转换为LCD显示的数据unsignedcharx0x00,y0x00;t[0]*pt;pt++;t[1]*pt;ift[1]0x07//判断正负温度TempBuffer1[0]0x2d; //0x2d为"-"的ASCII码 t[1]~t[1]; /*下面几句把负数的补码*/ t[0]~t[0]; /*换算成绝对值*********/ xt[0]+1; /***********************/ t[0]x; /***********************/ ifx255/**********************/ t[1]++; /*********************/elseTempBuffer1[0]0x2b; //0xfe为变"+"的ASCII码t[1]4; //将高字节左移4位t[1]t[1]&0x70; //取出高字节的3个有效数字位xt[0]; //将t[0]暂存到X,因为取小数部分还要用到它x4; //右移4位xx&0x0f; //和前面两句就是取出t[0]的高四位 t[1]t[1]|x; //将高低字节的有效值的整数部分拼成一个字节TempBuffer1[1]t[1]/100+0x30; //+0x30为变0~9ASCII码ifTempBuffer1[1]0x30TempBuffer1[1]0xfe;//百位数消隐TempBuffer1[2]t[1]%100/10+0x30; //分离出十位TempBuffer1[3]t[1]%100%10+0x30; //分离出个位t[0]t[0]&0x0c; //取有效的两位小数t[0]2; //左移两位,以便查表xt[0]; ydotcode[x]; //查表换算成实际的小数TempBuffer1[5]y/10+0x30; //分离出十分位TempBuffer1[6]y%10+0x30; //分离出百分位 voiddelayunsignedchari whilei--;voiddelay1unsignedintzunsignedinti,j;foriz;i0;i--forj100;j0;j--;/*******************设定时间函数**************************/voidshijiansetifk30delay1120;ifk30min++;ifk40delay1120;ifk40min--;TempBuffer1[11]min%10+0x30;TempBuffer1[10]min/10+0x30;/*******************确认开始计时函数***************************/voidjishiifk50delay1120;ifk50TR01;//开始计时b1;ifa20a0;min--;ifmin0TR00;/*******************设置温度函数***************************/voidsetwenduTempBuffer1[14]temp/10+0x30;TempBuffer1[15]temp%10+0x30;/*******************主程序***************************/mainunsignedcharTH110,TL-20; //下一步扩展时可能通过这两个变量,调节上下限LED0; //测温函数返回这个数组的头地址EA1;//开总中断EX01;//允许外部中断0EX11;//允许外部中断1IT01;//设置外部触发0为跳沿触发IT11;//设置外部触发1为跳沿触发TMOD0X01;//设置定时器T0为工作方式1TL00XB0;TH00X3C;//设置每次定时时间为50msET01;//允许定时器中断k00;while1 //读取温度,温度值存放在一个两个字节的数组中, delay100;shijianset; setwendu; covert1; covert0TH,TL; jishi; LCD_Initial; //第一个参数列号,第二个为行号,为0表示第一行 //为1表示第二行,第三个参数为显示数据的首地址 LCD_Print0,0,TempBuffer0; LCD_Print0,1,TempBuffer1;voidextern0interrupt0temp++;voidextern1interrupt2temp--;voidtimerinterrupt1TL00XB0;TH00X3C;a++;9.2子程序9.2.1LCD显示子程序//#include//用AT89C51时就用这个头文件#include//用华邦W78E58B时必须用这个头文件#include//注意那个LCD_Wait函数,它是判"忙"标志的,在实际硬件要把注掉的那种打开//PortDefinitions**********************************************************sbitLcdRs P2^0;sbitLcdRw P2^1;sbitLcdEn P2^2;sfrDBPort 0x80; //P00x80,P10x90,P20xA0,P30xB0.数据端口//内部等待函数**************************************************************************unsignedcharLCD_Waitvoid LcdRs0; LcdRw1; _nop_; LcdEn1; _nop_; //whileDBPort&0x80;//在用Proteus仿真时,注意用屏蔽此语句,在调用GotoXY时,会进入死循环, //可能在写该控制字时,该模块没有返回写入完备命令,即DBPort&0x800x80 //实际硬件时打开此语句 LcdEn0; returnDBPort; //向LCD写入命令或数据************************************************************#defineLCD_COMMAND 0//Command#defineLCD_DATA 1//Data#defineLCD_CLEAR_SCREEN 0x01//清屏#defineLCD_HOMING 0x02//光标返回原点voidLCD_Writebitstyle,unsignedcharinput LcdEn0; LcdRsstyle; LcdRw0; _nop_; DBPortinput; _nop_;//注意顺序 LcdEn1; _nop_;//注意顺序 LcdEn0; _nop_; LCD_Wait; //设置显示模式************************************************************#defineLCD_SHOW 0x04//显示开#defineLCD_HIDE 0x00//显示关 #defineLCD_CURSOR 0x02 //显示光标#defineLCD_NO_CURSOR 0x00//无光标 #defineLCD_FLASH 0x01//光标闪动#defineLCD_NO_FLASH 0x00//光标不闪动voidLCD_SetDisplayunsignedcharDisplayMode LCD_WriteLCD_COMMAND,0x08|DisplayMode; //设置输入模式************************************************************#defineLCD_AC_UP 0x02#defineLCD_AC_DOWN 0x00//default#defineLCD_MOVE 0x01//画面可平移#defineLCD_NO_MOVE 0x00//defaultvoidLCD_SetInputunsignedcharInputMode LCD_WriteLCD_COMMAND,0x04|InputMode;//初始化LCD************************************************************voidLCD_Initial LcdEn0; LCD_WriteLCD_COMMAND,0x38;//8位数据端口,2行显示,5*7点阵 LCD_WriteLCD_COMMAND,0x38; LCD_SetDisplayLCD_SHOW|LCD_NO_CURSOR;//开启显示,无光标 LCD_WriteLCD_COMMAND,LCD_CLEAR_SCREEN;//清屏 LCD_SetInputLCD_AC_UP|LCD_NO_MOVE;//AC递增,画面不动//************************************************************************voidGotoXYunsignedcharx,unsignedchary ify0 LCD_WriteLCD_COMMAND,0x80|x; ify1 LCD_WriteLCD_COMMAND,0x80|x-0x40;voidPrintunsignedchar*str while*str!'\0' LCD_WriteLCD_DATA,*str; str++; voidLCD_Printunsignedcharx,unsignedchary,unsignedchar*strGotoXYx,y;Printstr;9.2.2DS18B20控制子程序/#include//用AT89C51时就用这个头文件#include//用华邦W78E58B时必须用这个头文件/***********ds18b20延迟子函数(晶振12MHz)*******//************DS18B20对时间要求很严,但只能长不能短*************在11.0592M下也行,因为时间长些********/voiddelay_18B20unsignedinti whilei--;/**********ds18b20初始化函数**********************/voidInit_DS18B20void unsignedcharx0; DQ1;//DQ复位 delay_18B208;//稍做延时 DQ0;//单片机将DQ拉低 delay_18B2080;//精确延时大于480us DQ1;//拉高总线 delay_18B2014; xDQ;//稍做延时后如果x0则初始化成功x1则初始化失败 delay_18B2020;/***********ds18b20读一个字节**************/unsignedcharReadOneCharvoid unsignedchari0; unsignedchardat0; f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论