全自动豆浆机课程设计报告单片机原理及应用.docx
单片机原理及应用课程设计报告题目全自动豆浆机学院(部)电子与控制工程学院专业电气工程及其自动化班级学生姓名指导教师时间2010.12.27-2OILL7任务书:全自动豆浆机(一)功能介绍全自动家用豆类和谷物处理机(即全自动豆浆机)具有按预设模式自动粉碎谷物、加热功能、防止溢出、处理完毕报警等基本功能。一般可以处理如豆类、玉米、其他五谷杂粮、蔬菜等多种食品。全自动家用豆类和谷物处理机的处理食品的过程通常为:加热一一粉碎1一一加热一一粉碎2一加热一一完成报警,整个加工过程的进行按时间控制。由于食品原料的物理特性不同,在加工处理时采用不同的加工(过程)模式,其主要区别在于加热和粉碎时间的长短不同。在工作过程中,被加工的食品液体被限定在某一个给定的液位范围内,当液体加热时泡沫达到溢出液位时,停止加热,待脱离溢出液位区时继续加热。(一)设计参数(1)电机5W24VDC(2)加热器500W220VAC(3)加热容器L25升(4)电力供应:220VAC(三)设计要求(1)实现多模式选择。被选中的模式用LED显示器表明(2)实现不同模式下的加工过程:加热一一粉碎1一一加热一一粉碎2-加热一一完成报警,整个加工过程的进行按时间控制,时间自定(3)液位检测和控制:使被加工的食品液体限定在某一个给定的液位范围内,当液体溢出容器时,报警并断电。(4)设计系统各个部分的工作电源。摘要:1课设制作的全自动豆浆机控制电路,能实现的功能如下:一是:它能实现三种模式选择;并且模式,一次加热时间,一次粉碎时间依次在前三个数码显示器上上显示。选择模式完成后,按照规定的时间完成加热一一粉碎1一一加热一粉碎2加热完成报警整个加工过程。加热和粉碎状态分别用P3.6和P3.7口接发光二极管模拟。二是:它能实现烧干,液体溢出容器的的优先级断电报警和加热时水泡超出液位时的停止加热,延时等待水位下降后继续加热的液位控制功能。三是:扩展部分。它扩展实现了计时功能,用数码管的后三位显示。计时的目的是看在己选的模式下,看距离全过程完成还有多长时间;还可以通过显示的时间判断,报警是中途烧干,液体溢出容器的报警还是工作全过程结束的报警,有一定智能性。四是:它能在上电后或复位后显示654321六位数字。其实可以设计实现显示任意六位数字或者能显示出的字母。2全自动豆浆机控制电路各模块功能实现的方法如下:一是:模式的选择通过键盘扫描的方法,通过键盘按键1,2,3来选择。二是:烧干,液体溢出容器功能采用外部事件中断(INTO)实现,设为高优先级的中断。加热液位控制功能也采用外部事件(INTD中断实现,设为低优先级。三是:计数显示,模式显示,加热时间,粉碎时间的显示,报警并亮报警灯,都采用动态扫描的方法实现。四是:工作过程中的加热时间,粉碎时间均采用定时中断(TRO)的方式实现。前言:豆浆营养价值丰富,需求量很大。那么提高豆浆机的智能化和自动化是非常必要的,以节俭成本和保障它工作时的安全性。该论文设计的豆浆机是基于单片机系统的控制制作的。主要通过编程烧入单片机芯片,然后软硬件结合达到制作要求。论文的附录中配有程序和原理总图,及元件清单。表一:单片机各引脚作用说明引脚作用PO口显示输出口P2口键盘连接口PL1,PL2,PL3数码管和报警控制端P3.2烧干和溢出容器中断口P3.3液位控制中断口P3.6加热模拟输出口P3.7粉碎模拟输出口目录方案分析和论证6模式选择模块6加热粉碎完成报警模块6液位控制模块6计时模块6设计各个部分的工作电源6软硬件调试12软件调试与仿真12硬件调试结果16上电和更位后的界面15不同工作模式下的调试16烧干和液体溢出容器的调试17超出液位的调试18调试过程中出现的问题及解决方案20参考书目24总结20附录21原理总图21总程序22元件清单及元件功能23方案分析与论证:模式选择模块:方案一:键盘选择模式方法。通过按下键的键值判断,来跳转到不同的模式。键盘有九个键,最多可以设计九中模式,设计时设计三种模式即可。该方案可行。方案二:定时计数模式方法。设计一个三循环的计数。通过按一下,外部给单片机一个低电平,计数一次。按两下,计数加二,按三下计数加三。按四下后回到按一下的状态。然后通过计数后的数值来选择不同的模式。该方案可行。方案选择:模式选择模块选择方案一,由于板上有键盘,可以加以运用。计数口可以留着扩展外部事件中断用。总体来讲,两种方案都挺好。、矩阵式键盘实现的模式选择框图如图1加热粉碎完成报警模块:方案一:加热和粉碎时都有一定的时间,用延时实现。方案二:加热和粉碎需要的时间可以用定时实现。方案选择:选择方案二,因为加热和粉碎的时间需要用动态扫描的方式显示出来,因此定时可以实现加热和粉碎时的显示,而延时方式不行。液位控制模块:液位控制模块可用外部事件中断方式实现。烧干,液体溢出容器功能采用外部事件中断(INTO,P3.2)实现,设为高优先级的中断。加热液位控制功能也采用外部事件(INTLP3.3)中断实现,设为低优先级。加热粉碎完成报警及液位控制模块的框图如图2a,2b,2c<,扩展计时模块:计时用来动态计量在某种模式下工作了多久,以此来观察还需要多久完成全过程。并且工作过程中有两个报警的状态,由计时的时间大概可以判断属于那种情况。计时还可以检测豆浆机工作的时间是否正常。方案一:正计时。方案二:倒计时。方案选择:两种方案均可,本设计采用的是正计时。计时模块的框图如图3a,3b.设计各个部分的工作电源:豆浆机的加热和粉碎部分用单片机的输出口控制继电器的开与关来实现,单片机P3.6输出为高电平时,使外部电路接通,220V的电压接在加热电阻上;单片机P3.7输出为高电平时,继电器控制外部变压电路闭合,使220V的电源通过变压和滤波得到电动机需要的25v直流电。图1,矩阵式键盘实现的模式选择框图图2,加热粉碎完成报警及液位控制模块的框图a加热超出液位子框图:图2,加热粉碎完成报警及液位控制模块的框图b工作时时烧干或者液体溢出容器子框图工作时时烧干 或者液体溢出 容器中断,断电,并图2,加热粉碎完成报警及液位控制模块的框图C图3,显示子程序框图a显示区初始化如图3,计时模块的框图b工作I/定时器是否溢aYIRET总框图如下:开始-上_J等待,并调用正计时显示/程序及模式显示程序图4定时程序允许定时器主程序初始化软硬件调试:软件调试模块:1,上电和复位时的仿真:上电和堂位后,设置数码管显示为654321.2,选择模式一的仿真:选择模式一,第一位数码管显示1,第二位代表加热三分钟,第三位代表粉碎你三分钟。后三位是正计时。3,选择模式2的仿真rm1,.r 8 选择模式二,第一位数码管显示2,第二位代表加热4分钟,第三位代表粉碎4分钟。后三位是正计时。4选择模式三时的仿真35500I小P. 1 ,: J :“c®®©°®®®选择模式三,第一位数码管显示3,第二位代表加热5分钟,第三位代表粉碎你5分钟。后三位是正计时。5,超出液位时的仿真3300Bx-.超出液位后,加热停止,下面开关闭合表示超液位。6,烧干和溢出容器的仿真HHOOHTT-Tc® ® ®°®©®上面开关闭合表示烧干或者液体溢出容器,此时,停止加热和粉碎,报警并且报警灯亮。7,模式一完成报警时的仿真由图可知,选择的模式一,加热三分钟,粉碎三分钟。所用时间刚好是计时的45分钟,与理论值一致。硬件调试:】模式一完成的状态2,上电后和复位后的初始状态3,模式一的工作状态5,模式三的工作状态6,模式二的工作状态7.烧干或者液体溢出容器的状态调试出现的问题及解决方案:1,键盘的程序按原理图上接时发现,按键和对应键值是混乱的,最后通过测试发现,原理图有误。按照正确的接法编程就可以了。2,问题:中断执行后不能返回到主程序?解决方案:将中断程序紧跟放在主程序后面就可以了,3,问题:中断时,返回的不是原来的状态?解决方案:因为中断里面的程序改变了主程序里面的端口状态,所以返回时不时原来的状态。需要对影响主程序的量进行保护和还原就行了。4,问题:通过键盘选择某模式,复位后,必须免位后的瞬间选择其它模式,否则就无法选择其他模式了?解决方案:这是因为键盘扫描程序里没有对无按键时的状态进行操作。让无按键时,执行重新扫描键盘即可。5,动态显示问题?解决方案:采用定时来加热和粉碎,并在里面调用显示程序。否则,不能满足动态显示的要求。总结:此次单片机课程设计,收益匪浅,是原创作品。WaVe和PrOtUSe是个非常好的工具用来基于单片机的编程和仿真。该课设联系生活且具有趣味性,把理论知识应用到实践,大大的提高了动手能力。过程中,遇到一些问题,运用单步跟踪寻找错误及向老师同学讨论,最终问题都解决了。此次课设相对完成的比较早,做出来实物的心情是激动的。参考书目:单片机原理及接口技术段晨东附录1元件明细元器件数量备注电阻3IK电阻45.IK电阻28K独石电容60.IuF独石电容230PF电解电容1IOUf25V51单片机实验板189C52芯片1MAX232芯片174LS245芯片274LS138芯片1DS18B201三极管90122PNP二极管IN40011数码管2三位八段共阴继电器1晶振111.0592MHz芯片座6电源座1三脚5V通信插座1CON232电源适配器1通讯电缆1微型按钮开关10实验插板1单排插针若干双排插针若干短路块若干导线若干附录2:实物总原理图MHMNU«n*5VTVa1.+BmnMMQr附录三:程序清单ORGOOOOHLJMPMAINORG0003H1.JMPP_T0ORG0013H1.JMPP_T1ORG0030HMAIN:MOVSP,#60H;开辟栈区CLRITO;INTO低电平触发CLRITl;INTl低电平触发SETBEA;开CPU中断SETBEXO;允许INTO中断SETBEXl;允许INTl中断SETBPXO;设置INTO为高优先级CLRPXI;设置INTl为低优先级CLRP3.6;加热指示灯清零CLRP3.7;粉碎指示灯清零MOV20H,#06HMOV21H,#05HMOV22H,#04HMOV25H,#03HMOV26H,#02HMOV27H,#01H;选择模式前的显示初始化1.CALLDSPLYI;显示前三位1.CALLDSPLY2;显示后三位1.CALLSCAN-KEYB;调用键盘扫描程序MOV25H,#OOHMOV26H,#00HMOV27H,#00H;选择模式后的,显示部分初始化MOVA,R5;根据扫描结果R5的值来选择模式CJNEA,#01H,NEXT1;是否为模式一1.CALLSI-PRESS;调用模式显示,加热时间和粉碎时间显示程序1.LCALLL00P6;调用正计时程序1.CALLL00P4;调用加热粉碎完成报警子程序RETNEXT1:CJNEA,#02H,NEXT21.CALLS2_PRESS1.CALLLOOP61.CALLL00P4;模式二,同上RETNEXT2:CJNEA,#3,NEXT31.CALLS3PRESS1.CALLLOOP61.CALLLOOP4NEXT3:RETORGO100H;烧干和溢出容器子程序P_TO:PUSHACC;保护现场PUSHPSWCLRP3.6;停止加热CLRP3.7;停止粉碎LCALLALARM;调用报警程序POPPSW;恢复现场POPACCRETI;中断返回ORG0200H;超液位中断程序P_T1:CLREA;关中断PUSHACCPUSHPSWSETBEA;开中断SETBRSO把工作寄存器切换到1区,避免中断处理程序CLRP3.6;停止加热CLRP3.7;停止粉碎LCALLDLlMlN;延时让液位下降SETBP3.6;恢免中断前的状态CLREA;关中断POPPSW;保护现场POPACCSETBEA;开中断RETISI-PRESS:MOV20H,#01H;模式一,前三位数码管显示的初始化MOV21H,#03HMOV22H,#03H1.CALLDSPLYI;调用显取前三位的显木程序RETS2_PRESS:MOV20H,M)2H;模式二MoV21H,#04HMOV22H,#04H1.CALLDSPLYlRETS3_PRESS:MOV20H,M)3H;模式三MOV21H,#05HMOV22H,M)5H1.CALLDSPLYlRETDSPLYl:MOVR0,#20H显示数码管前三位的显示程序MOVR2,#00HREDO:ACALLDISPINCR2MOVA,R2INCROXRLA,#03HJNZREDORETDSPLY2:MOVR0,#25H;显示数码管后三位的显示程序MOVR2,#03HRED02:ACALLDISPINCR2MOVA,R2INCROXRLA,#06HJNZREDO2RETDISP:MoVPl,R2;显示子程序MOVDPTR,#LED_SEGMOVA,ROMOVCA,A+DPTRMOVPO,A1.CALLDLIMSRET1.ED-SEG:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;09的数码管的字型编码1.00P6:LCALLDLlS正计时程序,定时ISMOVA,27HCJNEA,#09H,G00N1:判断末位是不是9MOV27H,#00HMOVA,26H;末位清零,倒数第二位加一CJNEA,#05H,GOON2;判断倒数第二位是不是5MOV26H,#00HINC25H;倒数第二位清零,倒数第三位加一RETGOONkINC27H;末位加一RETGOON2INC26HRETDL20MS:MOVTMOD,#01H;定时20MS的子程序MOVTH0,#ODBHMOVTL0,#OOHSETBTROCONTkJBCTFO,OVERFISjmpcontiOVERFkRET1.00P4:豆浆机工作全过程的子程序1.calljiare1.CALLFENSUI1.calljiare1.CALLFENSUI1.calljiareCLRP3.6CLRP3.71.CALLALARMRETJIARE:MOV23H,21H;加热子程序,通过21H的值来控制加热的时间CLRP3.7SETBP3.61.OOPkLCALLDLlMINDJNZ23H,LOOPlRETFENSUkMOV24H,22H;粉碎子程序,通过22H的值来控制粉碎的时间CLRP3.6SETBP3.71.00P2:LCALLDLlMINDJNZ24H,LOOP2RETALARM:;报警子程序1.OOP5:MOVRl,#20MOVA,#06HMOVPl,ALCALLDLlMSLCALLDLlMSINCAMOVPl,ALCALLDLlMSLCALLDLlMS1.CALLDSPLYl1.CALLDSPLY2DJNZRI,LOOP5RET;控制使蜂鸣器响;延时稳定显示;显示报警灯DL1MIN:MOVR7,#60;定时一分钟的子程序DLkLCALLLOOP6DJNZR7,DL1RETDLlMS:MOVRl,#200;延时IMS的子程序DL2:NOPNOPNOPDJNZRI.DL2RETDL1S:MOVR6,#20;定时IS的子程序WAITMOvTMOD,#01HMOVTH0,#3CHMOVTL0,#OBOHSETBTROC0NT2JBCTFO,OVERF21.CALLDSPLYl;定时中加入显示程序1.CALLDSPLY2;定时中加入显示程序,保证动态显示SJMPC0NT2OVERF2DJNZR6,WAITRETSCAN-KEYB:;键盘扫描子程序MOVP2,#0F0H;置pl.4P1.7为输入,P1.0P1.3为输出MOVA,P2ANLA,#OFoHXRLA,#OFOHJZNO-KEY;判断有无按键按下ACALLDL20MS;有按键按下,延时消抖ANLA,#OFOH;重读键盘XRLA,#OFOHJZNO-KEY;再判断有无按键按下MOVR2,#III10111BSCAN:M0VA,R2MOVP2,AMOVA,P2ANLA,#I11100OOBMOVR3,ACJNEA,#OFOH,KEY-PRSDMOVA,R2RRAMOVR2,AXRLA,#01111111BJNZSCAN;4行己扫描完成?未完,继续NoJ<EY:LJMPMAlN;无按键按下KEY_PRSD:MoVA,R2ANLA,#0000111IB0RLA,R3MOVR4,AMOVR5,#OIH;设置按键键值初值MOVDPTR,#KEY_TAB;特征码表首地址CAL_VAL:M0VA,R5;计算按键键值MOVCA,A+DPTRXRLA,R4JZFIXED;键值求出,存在R5中INCR5SJMPCAL.VALFIXED:MoVA,P2;判断键是否释放ANLA,#OFOHXRLA,#OFoHJNZFIXEDACALLDL20MSMOVA,P2ANLA,M)FOHXRLA,#OFOHJNZFIXEDINCARETKEY_TAB:DB77H,77H,7BH,7DH,0B7H,0BEH,0BDHDB0D7H,0DBH,0DDH;键值特征码内容仅供参考,如果您需解决具体问题,建议您详细咨询相关领域专业人士。