定时消毒碗柜课程设计报告.docx
《定时消毒碗柜课程设计报告.docx》由会员分享,可在线阅读,更多相关《定时消毒碗柜课程设计报告.docx(43页珍藏版)》请在冰豆网上搜索。
定时消毒碗柜课程设计报告
一、题目:
用单片机模拟消毒碗柜的工作过程+液晶显示(03)
二、目的与要求:
1.目的:
培养学生综合利用汇编语言进行程序设计的能力。
2.基本要求:
能够模拟消毒碗柜的基本工作过程。
三、设计方法和基本原理:
1.问题描述:
消毒碗柜可以定时对碗筷等进行消毒,当用户放入碗筷,关闭厨门并且按下开始按钮以后,消毒开始,10分钟以后自动结束,目前采用的比较广泛地消毒方式是臭氧消毒,如果中途用户开门,则必须立即停止消毒,防治臭氧泄漏。
2.问题的解决方案:
(1)鉴于实际条件的限制,我们只是从试验板上模拟这个过程,可以利用红绿灯的亮灭来模拟消毒状态,用拨动开关来模拟厨门,用外部中断来模拟开始消毒的按钮。
(2)可以用软件延时的办法,利用内存单元来存储定时中断的数量,配合定时中断实现长时间定时。
四、主要技术问题的描述:
本题内容比较简单,主要技术点有如下几个:
(1)主程序可以采用循环的办法,不断检测厨门的状态,在已经开始消毒的前提下,确定是否应该停止消毒。
(2)在开始消毒的中断中,应该首先检测厨门状态,才确认是否可以启动消毒,如果厨门没有关闭,应该提示用户(可以用一个灯来模拟)并拒绝消毒。
(3)开始消毒的中断中,启动定时中断,定时完成以后应该关闭消毒过程并禁止定时中断本身再次中断。
五、书写设计报告的要求:
设计报告中包含以下几个方面:
1、设计题目
2、总体设计
1)所实现的功能描述
2)设计方案的描述
3、硬件系统设计,包括所需设备,接线方式,以及资源分配。
4、软件系统的设计,包括划分功能模块,写出各个功能模块实现的功能。
画出程序流程图
5、列出程序清单,并加以必要的注释
6、写出调试程序的方法
7、指出所设计问题的不足和改进方案
8、自评分和收获体会
六、课程设计的考核方式及评分方法
1.考核方式
课程设计结束时,在机房当场验收。
1.学生演示,老师检查运行结果是否正确。
2.回答教师提出的问题。
3.学生提交课程设计报告(A4纸打印),并将电子文档和源程序发至知道教师信箱。
2.评分方法
(1)出勤率
(2)课程设计准备工作
(3)课程设计期间纪律
(4)课程设计运行结果
(5)课程设计报告
(6)答辩情况
目录:
一.题目…………………………………………………………4页
二.问题的提出…………………………………………………4页
三.总体设计……………………………………………………4页
四.详细设计……………………………………………………5页
五.调试程序的方法……………………………………………8页
六.你所设计的程序最终完成的功能…………………………9页
七.对该设计题目有何更完善的方案………………………12页
八.收获及心得体会…………………………………………12页
九.附录:
程序清单…………………………………………13页
河北工业大学计算机硬件技术基础(2010)
课程设计报告
学院
理学院
班级
物理C071
成绩
姓名
梁少锋
学号
073009
同组人
陶磊
学号
073012
一、题目
用单片机模拟消毒碗柜的工作过程+液晶显示(03)
二、问题的提出
定时消毒碗柜是现代化生活中不可缺少的电器,给家庭生活带来方便和卫生。
这个学期我们学习了单片机硬件技术技术这门课,从中获益匪浅,希望将所学得以应用。
于是设计了这样一个程序来模拟定时消毒的目的。
(1)培养综合运用所学单片机知识来解决生活中常见问题的能力。
(2)掌握单片机的接口技术及相关外围芯片的外特性和控制方法。
(3)通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。
(4)进一步加深对MCS-51单片机内部结构和程序设计方法的理解。
三、总体设计
1、分析问题的功能
(1)通过软件编程利用8051单片机内部定时器实现对消毒的定时,开关模拟消毒柜的门,外部中断实现消毒开始命令。
(2)设计中加入了液晶的同步显示,可以提示用户消毒的状态,如进行、暂停、结束。
2、系统总体结构设计
(1)硬件设计:
根据问题需要确定单片机、I/O接口、定时器、I/O设备、中断等设备设备的应用;实验平台是DP-51PROC实验箱,用的是TKSMONITOR51仿真器,采用NXP(foundedbyPhilips)的P89C52X2型号单片机,晶振频率为11.0592MHz。
用到的I/O接口有P0.0,P0.1,P0.2,P1,P2.0,P2.1,P2.2,P3.2,P3.5等,用到了外部中断INT0、INT1,内部定时器计数器T/C0、T/C1,锁存器,74LS138译码器,输出设备有:
液晶屏、蜂鸣器、LED灯、输入设备:
1*8按键中的KEY1、KEY2,开关SW1。
(2)软件设计:
主要功能分两大模块,即定时模块,液晶显示模块.
其中定时为主要模块,在定时的过程中根据需要调用液晶显示,并进行蜂鸣提醒。
四、详细设计:
1、硬件详细设计:
1)1液晶显示部分电路图;
1)2八段显示和消毒部分电路图:
2)进行硬件资源分配(包括I/O口地址、所用各存储单元的用途)。
用途介绍:
(1)SDA为总线定义,串行数据存取位;SCL为总线定义,串行时钟位;RST为MCU复位输出信号,低电平复位ZLG7290,用于倒计时的显示。
(2)P1.4与开关相连,控制门的关闭;INT1与按键1相连,控制消毒按钮,P1.2与LED1相连,根据亮灭判断门的开关;P1.3与LED2相连,判断消毒状态的进行;整个相连用于消毒过程。
(3)P0与P2口为外部总线扩展,其中P0口接锁存器后组成地址总线的低八位,低八位中的低三位分别接液晶屏的D/I,R/W,CS1控制端口,P0口不接锁存器直接与液晶屏的数据接口(DB0~DB7)相连。
P2口为地址总线的高八位,用于选择液晶屏的右半屏,其中实验箱内部已将CS1与CS2进行非链接,可以保证同时只会有一块显示屏被选中。
P3.2使用第二功能外部中断0,用来控制屏幕的切换。
P1.0用于控制液晶屏的复位操作。
总体用来静态和动态显示消毒状态,实现了液晶的显示。
下面以表格的形式列出所有的硬件连接:
串行口
器件引脚
P1.0
液晶RST
P1.1
T1
P1.2
LED1
P1.3
LED2
P1.4
SW1
P3.1
BUZZ
P3.2(INT0)
KEY2
P3.3(INT1)
KEY1
P3.4(T0)
不接线
P3.5(T1)
P1.1
A0
D/I
A1
R/W
A2
CS1
Y0
CS
A15
G2A
A14
G2B
A13
G1
A12
C
A11
B
A10
A
2、软件详细设计:
按各功能模块进行程序设计,并说明各功能模块的实现方法。
3、设计中的主要困难及解决方案
在将液晶显示糅合在程序中时,前三张的静态显示可以正常运行,后边的动态显示无法调用,,后来发现是主程序和液晶显示所用的存储单元和地址有冲突,经过调整,程序正常。
五、调试程序的方法
硬件调试方法(确定硬件工作是否正常)
在进行实验之前要对所用到的硬件进行检测,看其是否完好。
再有“图形点阵液晶显示屏驱动"参考程序看液晶显示屏及KYE1是否能正常工作。
在检验个部分都能工作后再由此硬件进行设计实验。
特别应注意的是在进行硬件连线一定得在断电的情况下进行,否则容易烧坏仪器。
软件调试方法(如何调试程序的方法)
在程序无法正常运行的时候,采用单步运行,查看每一步程序时是否正常,发现不能执行的地方就是问题的所在;在某个功能不能运行的时候,采用执行到光标处指令,如不能正常跳转,应是循环出现问题或子程序有错误。
比如,在开始调用液晶静态图行的时候,调用完,不能继续执行后边的程序,经研究发现是液晶显示子程序中有死循环,不能跳出,修改后便正常了。
六、你所设计的程序最终完成的功能
(1)我们所编制的定时消毒碗柜+液晶显示程序,首先可以实现对放入其中的碗筷进行定时消毒,并在柜门被中途打开时停止消毒,防止臭氧的扩散,同时可以用液晶显示同步提示用户现在消毒所处的状态,最后消毒完成时会有蜂鸣提示。
准备的测试数据,将以图解说明。
七、对该设计题目有何更完善的方案
1、对自己完成程序进行自我评价。
程序在基本要求的基础上,进行了全面的创新,包含了基本的单片机知识点,融会贯通。
将中断控制消毒以及中断级联延时等各个方面融到一起,液晶动态显示融入其中,达到了较高的单片机应用与创新水平。
对本次课程设计,我们倾注了很大的心血,使任务书中所要求的功能圆满的实现,并在此的基础上,加入了创新功能,如液晶同步显示及蜂鸣器的提示音等,使消毒碗柜更加贴近生活,贴近实际应用。
此外这个设计还可以应用到其他需要计时及显示的用具中,大大增加其使用价值。
2、对课题提出更完善的方案。
定时消毒碗柜基本程序简单,却运用的知识广泛,在此基础上可以将其它的课题和此课题合二为一,运用中断的嵌套等解决问题。
八、收获及心得体会
1、通过本次课程设计,自己在哪些方面的能力有所提高。
对单片机的基本理论有了更深刻的理解和掌握,通过查阅资料和文件,扩大了自己又一个领域的知识面,掌握了一门新的技能。
在编程的过程中,逻辑思维能力及实践能力,创新能力,合作能力以及学习能力都得到了全面的提高。
2、收获和心得体会。
首先,谢谢赵老师在这半年来对我们的谆谆教导,不仅仅是在学习方面,更重要的是老师让我们学会了创新,学会了自己思维,动手的能力,并且在人生观、价值观给予了很多很多耐人寻味的道理。
通过这门课程的学习,我懂得了要努力去争取,努力去创造,正直加奋斗才等于成功。
最后希望老师身体健康、万事如意!
日期:
2010年月日
程序清单:
LCD_WR_CMD1XDATA2004H
;THECONSTANTSOFTHECOMMAND,THE1REPRESENTTHELEFT
LCD_WR_DATA1XDATA2005H
;SCREEN,ANDTHE2REPRESENTTHERIGHTSCREEN
LCD_WR_CMD2XDATA2000H
LCD_WR_DATA2XDATA2001H
LCD_IS_BUSY1XDATA2006H
LCD_IS_BUSY2XDATA2002H
LCD_RSTBITP1.0
LCD_DISP_ONEQU3FH
;THEEQUISTHECONSTANTSANDTHEDATAISTHEVARIABLES
LCD_DISP_CLREQU00H
LCD_ADDZ_ZEROEQU0C0H
;THEFIRSTDISPLAYLINE
LCD_ADDX_ZEROEQU0B8H
LCD_ADDX_ENDEQU0C0H
LCD_ADDY_ZEROEQU40H
LCD_DISP_BUFDATA0EH
LCD_DATA_BUFDATA02H
LCD_CMD_BUFDATA02H
LCD_XDATA08H
;THELEFT-UPLOCATION'SINTHEX-COORDINATE
LCD_YDATA09H
SIZE_XDATA0AH
;SIZE_X*8ISTHEDISPLAYEDAREA'SSIZEINTHEROWDIRECTION
SIZE_YDATA0BH
;THEDISPLAYEDAREA'SSIZEINTHECOLMUNDIRECTION
START_XDATA0CH
;INTHEACTIVEDISPALY,IT'STHEFIRSTAREA'SLCD_X
START_YDATA0DH
ORG8000H
LJMPMAIN
ORG8003H
SETBF0
RETI
ORG8013H;外部中断1入口地址
LJMPTOP1
ORG800BH;定时器0入口地址
LJMPTOP3
ORG801BH;定时器1入口地址
LJMPTOP5
ORG8100H
;-------主程序如下:
MAIN:
MOVSP,#70H;堆栈区从70H开始
SETBEA
SETBEX0
SETBIT0
CLRF0
ACALLLCD_INIT
LCALLFIRST_SCREEN
LCALLSECOND_SCREEN
LCALLTHIRD_SCREEN
MOVTMOD,#51H;1为计数0为定时
MOVTH1,#0FFH;计数100个
MOVTL1,#9CH
MOVTH0,#3CH;延时50ms
MOVTL0,#0B0H
MOVIE,#10001111B;申请中断
CLRRS0
SETBRS1
SETBIT1;采用边缘触发外部中断1下降眼厨房
SETBP1.2;门显示灯(灭)
SETBP1.3;消毒指示灯
CLRP1.1;100ms的脉冲(CLR清0)
WELL:
JBP1.0,WELL1;不断判断门的状态等待中断判断P1.0是1,如果是1就条到WELL1,如果是0就顺序执行
SETBP1.2
SJMPWELL
WELL1:
CLRP1.2
AJMPWELL
TOP1:
JNBP1.0,TOP2;门中断触发判断触发方式(JNB0的时候转到TOP21的时候就一直执行)
CLRP1.2
LJMPNEXT
TOP2:
SETBP1.2;关门启动定时器0
SETBTR0;kaizhongduan1weikaitiaodao
CLRP1.3
SETBTR1
LCALLFIVE_SCREEN
NEXT:
RETI;恢复到中断处
TOP3:
CLRP1.3;消毒指示灯打开
JBP1.0,TOP4
CPLP1.1;每50ms取反一次weilegeip1.1yigemaichong
MOVTH0,#3CH;重新赋值
MOVTL0,#0B0H
LJMPNEXT1
TOP4:
CLRTR0;判断门转移
CLRTR1
SETBP1.3
CLRP1.2
NEXT1:
RETI
TOP5:
CLRTR0;定时器1中断
CLRTR1
SETBP1.3
CLRP1.2
MOVTH1,#0FFH;计数100个
MOVTL1,#9CH
MOVTH0,#3CH;延时50ms
MOVTL0,#0B0H
LCALLSIX-SCREEN
delay2:
MOV7BH,0FFH
LCALLDELAY1
LCALLDELAY1
djnz7BH,DELAY2
LCALLFOUTH_SCREEN
mov35h,#05h
DELAY1:
MOV34H,#05H
DJNZ34H,$
DJNZ35H,DELAY1
RET
RETI
DELAY4:
MOVR5,#00H
DELAY4_L1:
MOVR4,#00H
DJNZR4,$
DJNZR5,DELAY4_L1
RET
DELAY10:
MOVR3,#01H
DL1:
MOVR4,#01H
DL2:
MOVR5,#0FH
DJNZR5,$
DJNZR4,DL2
DJNZR3,DL1
RET
DELAY50:
MOVR3,#04H
DL11:
MOVR4,#0FH
DL22:
MOVR5,#0AFH
DJNZR5,$
DJNZR4,DL22
DJNZR3,DL11
RET
DELAY100:
MOVR3,#06H
DL111:
MOVR4,#0FFH
DL222:
MOVR5,#0FFH
DJNZR5,$
DJNZR4,DL222
DJNZR3,DL111
RET
IS_BUSY1:
;NOPARAMETER
PUSHDPH
PUSHDPL
MOVDPTR,#LCD_IS_BUSY1
MOVXA,@DPTR
JBACC.7,IS_BUSY1
POPDPL
POPDPH
RET
IS_BUSY2:
PUSHDPH
PUSHDPL
MOVDPTR,#LCD_IS_BUSY2
MOVXA,@DPTR
JBACC.7,IS_BUSY2
POPDPL
POPDPH
RET
WR_CMD1:
;THEINPUTPARAMETERISLCD_CMD_BUF
PUSHDPH
PUSHDPL
ACALLIS_BUSY1
MOVDPTR,#LCD_WR_CMD1
MOVA,LCD_CMD_BUF
MOVX@DPTR,A
POPDPL
POPDPH
RET
WR_CMD2:
PUSHDPH
PUSHDPL
ACALLIS_BUSY2
MOVDPTR,#LCD_WR_CMD2
MOVA,LCD_CMD_BUF
MOVX@DPTR,A
POPDPL
POPDPH
RET
WR_DATA1:
;THEINPUTPARAMETERISTHELCD_CMD_BUF
PUSHDPH
PUSHDPL
ACALLIS_BUSY1
MOVDPTR,#LCD_WR_DATA1
MOVA,LCD_DATA_BUF
MOVX@DPTR,A
POPDPL
POPDPH
RET
WR_DATA2:
PUSHDPH
PUSHDPL
ACALLIS_BUSY2
MOVDPTR,#LCD_WR_DATA2
MOVA,LCD_DATA_BUF
MOVX@DPTR,A
POPDPL
POPDPH
RET
DISP_ALL1:
;THEINPUTPARAMETERISLCD_DISP_BUF
MOVLCD_CMD_BUF,#LCD_ADDZ_ZERO
ACALLWR_CMD1
MOVLCD_CMD_BUF,#LCD_ADDX_ZERO
REP_X1:
ACALLWR_CMD1
PUSHLCD_CMD_BUF
MOVLCD_CMD_BUF,#LCD_ADDY_ZERO
ACALLWR_CMD1
MOVR3,#40H;EACHSCREENHAVE64COLMUNS
REP_Y1:
MOVLCD_DATA_BUF,LCD_DISP_BUF
ACALLWR_DATA1
DJNZR3,REP_Y1
POPLCD_CMD_BUF
INCLCD_CMD_BUF
MOVA,LCD_CMD_BUF
CJNEA,#LCD_ADDX_END,REP_X1
RET
DISP_ALL2:
MOVLCD_CMD_BUF,#LCD_ADDZ_ZERO
ACALLWR_CMD2
MOVLCD_CMD_BUF,#LCD_ADDX_ZERO
REP_X2:
ACALLWR_CMD2
PUSHLCD_CMD_BUF
MOVLCD_CMD_BUF,#LCD_ADDY_ZERO
ACALLWR_CMD2
MOVR3,#40H
REP_Y2:
MOVLCD_DATA_BUF,LCD_DISP_BUF
ACALLWR_DATA2
DJNZR3,REP_Y2
POPLCD_CMD_BUF
INCLCD_CMD_BUF
MOVA,LCD_CMD_BUF
CJNEA,#LCD_ADDX_END,REP_X2
RET
LCD_INIT:
;NOPARAMETER
CLRLCD_RST
ACALLDELAY50
ACALLDELAY50
ACALLDELAY50
ACALLDELAY50
SETBLCD_RST
MOVLCD_CMD_BUF,#LCD_DISP_ON
ACALLWR_CMD1
ACALLWR_CMD2
MOVLCD_CMD_BUF,#LCD_ADDZ_ZERO
ACALLWR_CMD1
ACALLWR_CMD2
MOVLCD_DISP_BUF,#LCD_DISP_CLR
ACALLDISP_ALL1
ACALLDISP_ALL2
RET
PRINTE:
;THEINPUTPARAMETERSARELCD_X,LCD_Y,DPTR,SIZE_X,SIZE_Y
MOVLCD_CMD_BUF,#LCD_ADDZ_ZERO
ACALLWR_CMD1
ACALLWR_CMD2
MOVR4,SIZE_X
REP_X:
MOVA,LCD_X
ADDA,#LCD_ADDX_ZERO
MOVLCD_CMD_BUF,A
ACALLWR_CMD1
ACALLWR_CMD2
MOVR3,SIZE_Y
PUSHLCD_Y
REP_Y: