电子日历课程设计(完整版)
学科基础课硬件课程设计
设计说明书
电子日历设计
学生姓名 学班成
号 级 绩
叶友波 0618014059 计本062
陆慧玲
指导教师
计算机科学与技术系 2009年9月5日
学科基础课硬件 课程设计评阅书
课程设计任务书
2008—2009学年第一学期
专业: 计算机科学与技术 学号: 0618014059 姓名:叶友波 课程设计名称: 学科基础课硬件课程设计 设计题目:电子日历设计
完成期限:自 2009 年 8月31日至 2009年 9月 11日共 2 周
设计依据、要求及主要内容(可另加附页): ⒈设计任务:
(1)电子钟具有显示年、月、日、时、分、秒及星期功能,可识别闰年. (2)给出流程图,编写并调试程序。 (3)撰写设计报告。 ⒉设计要求:
⑴完成系统的软件设计及调试。 ⑵完成系统的硬件设计及调试。 ⑶自行设计系统原理图及程序流程图。
指导教师(签字): 教研室主任(签字): 批准日期: 年 月 日
摘 要
电子日历具有性能稳定、精确度高、成本低、易于产品化,以及方便、实用等特点。本次设计可分为两部分:硬件系统、软件系统。硬件主要有:8088CPU ,38译码器,LED 数码管显示器等。通过键盘的按键来决定显示的是年月日还是时分秒。利用proteus 仿真软件进行仿真测试。
关键词:电子日历; LED数码管;proteus 仿真
目 录
1 课题描述 ..................................................... 1 2 设计过程 ..................................................... 2 2.1硬件电路原理 .............................................. 2 2.1.1 LED显示 ............................................. 2 2.2 软件设计思想及流程图 ...................................... 4 2.2.1.软件设计思想 ........................................ 4 2.2.2 程序设计模块 ......................................... 4 2.2.3汇编源程序 .......................................... 10 3 测试 ........................................................ 14 总结 .......................................................... 14 参考文献 ...................................................... 16
1 课题描述
在现今的电子日历具有性能稳定、精确度高、成本低、易于产品化,以及方便、实用
等特点。本次设计可分为两部分:硬件系统、软件系统。利用LED 显示器能显示出当前的时间包括年月日时分秒并且能计算出闰年的功能的电子日历装置。由于LED 显示器只有六个数码管所以不能同时显示年月日和时分秒。所以通过键盘的按键来决定显示的是年月日还是时分秒,利用单片机将RC 复位电路、动态显示电路、电源电路、去抖电路等正确的连接在一起,并通过单片机的编程来实现本次设计任务中的要求
2 设计过程
2.1硬件电路原理
一、实现电子钟计时的基本方法: (1) 计数初值计算:
把定时器设为工作方式1,定时时间为50ms ,则计数溢出20次即得时钟计时最小单位秒,而100次计数可用软件方法实现。
假设使用T/C0,方式1,50ms 定时,fosc=12MHz。 则初值X 满足(216-X )×1/12MHz×12μs =50000μs X=15536→[**************]0→3CB0H
(2) 采用中断方式进行溢出次数累计, 计满20次为秒计时(1秒); (3) 从秒到分和从分到时的计时是通过累加和数值比较实现。 2.1.1 LED显示
6个LED 数码显示可以采用P0、P2口实现。此次设计是基于MCS-51对LED 的接口,选用八段共阳LED 。八段LED 显示管由八只发光二极管组成,编号是a,b,c,d,e,f,g 和SP ,分别与同名管脚相连。八段LED 数码显示管原理很简单,是通过同名管脚上所加电平的高低来控制发光二极管是否点亮从而现实不同的字形的。如图2.1为共阳八段LED 数码显示管原理图。图2.2中,所有发光二极管阳极共连后接到G 脚。正常显示时G 脚接+5V,各发光二极管是否点亮取决于a~SP各引脚上是否是低电平0伏。
2.1 LED显示结构 2.2 LED显示原理
2.1.2 电路原理设计
2.3 电路原理图
2.2 软件设计思想及流程图
2.2.1.软件设计思想
程序的设计主要有T0中断服务程序,动态显示程序,数字分离程序,键盘扫描程序,键处理程序,设置时间,设置年月日初值,判闰年程序,清除显示缓冲区程序这几个功能模块。
运用汇编语言, 设计一个简单的电子日历, 在6位LED 七段显示器动态的显示出来 年、月、日、和时、分、秒,实现计时,秒到60,分加1分到60,时加1 在通过键盘按键的切换小时到24时天加1,由于公历是比较有规律的,1、3、5、7、8、10、12月为大月,每月31天;4、6、9、11月为小月,每月只有30天;而2月份,则要根据当前的年份来决定,平年,2月份有28天,闰年,2月份有29天。所以处理2月份天数前要先判断是平年还是闰年。因为每个月份的天数不同,则需要设置一个月值表,通过查表找到相应月的天数,先判断到哪个月份,再从月份表中查出此月份的天数值。实现月加1,月到12时候年再加1. ,还需请注意:平年与闰年的二月份的天数不同,平年二月28天,闰年的二月29天。
2.2.2 程序设计模块
1. 本程序采用模块化设计的方法,主要由主函数,显示模块,判断是否闰年模块,提取系统日期模块组成
以下是对各个模块的说明:
(1) 主函数。主函数体现着本程序设计的基本思路。从程序流程图上可以看到主函数执行的过程,这里不再赘述。需要注意的是主程序中有一段循环结构,其作用是为了等待停止中断服务的申请,即键盘按键,一旦检测到有键盘按键,则跳出循环,根据按键的内容来判断下一步应要做什么。
(2) 显示模块。程序中INITJM 子程序,作为显示界面的初始化程序,主要实现显示输入字符提示语和显示当前日期的提示语,根据光标定位的不同分别将其显示在不同的位置
2. 主要模块流程图
2-2-1 主程序流程图
3. 数字分离程序
R0为计时单元地址,R1为显示缓冲区地址。因为时分秒,都需分离,则设置R2的循环次数为3。先将41H 单元内的时传送给累加器A ,再与0F 与,保留低四位,这样就使得时的低位被分离出来了。分离后送与显示缓冲区R1的50H 单元。再将41H 单元内的时传送给累加器A ,使高低位交换。交换之后,再与0F 进行与运算。使时的高位也分离出来 ,并送给显示缓冲区的51H 单元内。分和秒的分离方法与时一样,最终的分离结果为:时分秒在50H —55H 内显示。同理,年月日,其分离方法也是同时分秒的分离原理一样。 其分离程序的流程图如下所示:
2-2 数字分离流程图
4. 设置年月日初值程序
先清除显示区的内容,因为年是四位,而月日是一起显示也是4位,所以将R0指向显示区53H 单元并设置循环次数为4,再调用键盘扫描程序,判断是否有键按下设置年,然后将R0指向30H 单元,键值区。等到输入四个数,即年份。这是年份在数码管上的显示,再将其低、高两位分别存放在46H ,47H 存储区内。其设置月日的的方法与设置年的方法也是一样的,但将日月分别存放在44H 、45H 存储区里。
2-3 设置年月日初值程序流程图
5. 动态显示程序
动态显示程序实现的功能是将年月日,时分秒在LED 管中显示出来。使用第一组工作寄存器组,再调用数字分离程序,数字分离程序能将键如的数值在LED 数码管正确显示出来。然后设置循环次数为6再将其存入R2中,,再将R3,R0分别指向地址为01H 和50H 。将显示管字型表首址放如DPTR 中再将50H 单元的内容送到A 中,接着R0加1,查字型码表。循环6次查字型码表即可在LED 上显示出时分秒,年月日。
2-4动态显示程序流程图
6. 判断闰年
因为年是四位,而月日是一起显示也是4位。让A 指向46H 单元,判断里面的内容是不是世纪年,若是世纪年,则要判断能不能被400整除。能就是闰年,不能就不是;若不是世纪年,要判断能不能被4整除,不能被100整除。满足这两个条件就是闰年,不满足就不是。在判断过程中,使用A 中的高低位互换,再让A 中的内容与03H 相与,若结果为0,则是闰年,若不为0,则不是闰年。
2-5判断闰年流程图
2.2.3汇编源程序
主程序 LP1:
MOV AH,1 ;从键盘输入单个字符 INT 21H
CMP AL,'M' ;AL='M'? JNE LP5
CALL DATE ;显示系统日期
LP2: MOV AH,1 ;从键盘输入单个字符 INT 21H
CMP AL,'M' ;AL='M'? JNE LP5
CALL TIME ;显示系统时间
LP3: MOV AH,1 ;从键盘输入单个字符 INT 21H
CMP AL,'M' ;AL='M'? JNE LP4
CALL STOPWATCH ;显示秒表
LP4: MOV AH,1 ;从键盘输入单个字符 INT 21H
CMP AL,'M' ;AL='M'? JNE LP5 CALL RING
LP5: CMP AL,'Q' ;AL='Q'? JNE LP1
MOV AH,4CH ;返回DOS 状态 INT 21H
;--------------------------------------------------------------- ; 显示日期子程序 DATE PROC NEAR DISPLAY:
MOV AH,2AH ;取日期CX:DH:DL=年:月:日 AL=星期 INT 21H MOV SI,0 MOV AX,CX MOV BX,100 DIV BL
MOV BL,AH
CALL BCDASC1 ;日期数值转换成相应的ASCII 码字符 MOV AL,BL CALL BCDASC1
INC SI
MOV AL,DH CALL BCDASC1 INC SI
MOV AL,DL CALL BCDASC1
MOV BP,OFFSET DBUFFER1 MOV DX,0C0DH MOV CX,20 MOV BX,004EH MOV AX,1301H INT 10H
MOV AH,02H ;设置光标位置 MOV DX,0300H MOV BH,0 INT 10H
MOV BX,0018H
REPEA:MOV CX,0FFFFH ;延时 REPEAT:LOOP REPEAT DEC BX JNZ REPEA
MOV AH,01H ;读键盘缓冲区字符到AL 寄存器 INT 16H JE DISPLAY JMP LP2
MOV AX,4C00H INT 21H RET
DATE ENDP
;------------------------------------------------------ ; 显示时间子程序 TIME PROC NEAR DISPLAY1: MOV SI,0 MOV BX,100 DIV BL
MOV AH,2CH ;取时间CH:CL=时:分 DH:DL=秒:1/100秒 INT 21H MOV AL,CH
CALL BCDASC ;将时间数值转换成ASCII 码字符 INC SI
MOV AL,CL CALL BCDASC INC SI
MOV AL,DH CALL BCDASC
MOV BP,OFFSET DBUFFER MOV DX,0C0DH MOV CX,20 MOV BX,004EH MOV AX,1301H INT 10H
MOV AH,02H MOV DX,0300H MOV BH,0 INT 10H
MOV BX,0018H
RE: MOV CX,0FFFFH REA: LOOP REA DEC BX JNZ RE
MOV AH,01H INT 16H
JE DISPLAY1 JMP LP3
MOV AX,4C00H INT 21H RET
TIME ENDP
;------------------------------------------------------ ; 显示秒表子程序
STOPWATCH PROC NEAR DISPLAY2: PUSHA MOV SI,0 MOV BX,100 DIV BL
;CALL WATCH DISP3:
MOV AX,DATA MOV DS,AX
MOV AL,WHOUR
CALL BCDASC2 ;将时间数值转换成ASCII 码字符 INC SI
MOV AL,WMIN CALL BCDASC2 INC SI
MOV AL,WSEC CALL BCDASC2 MOV AL,WMSEC INC SI
CALL BCDASC2
MOV BP,OFFSET DBUFFER2 MOV DX,0C0DH MOV CX,20 MOV BX,004EH MOV AX,1301H INT 10H
MOV AH,02H MOV DX,0300H MOV BH,0 INT 10H
MOV BX,0018H
RE2: MOV CX,0FFFFH REA2: LOOP REA2 DEC BX JNZ RE2
MOV AH,01H INT 16H
JE DISPLAY2 POPA JMP LP4
MOV AX,4C00H INT 21H RET
STOPWATCH ENDP
3 测试
利用proteus 仿真软件进行仿真测试,测试结果如下:
总结
“纸上得来终觉浅,心中感悟方能深”, 作为一种实践取向和经验取向的课程,综合
实践活动比其他任何形式的课程都注重过程的教育价值。从某种意义上说,综合实践活动的设计与实施反映了一种“实践哲学”或“过程哲学”。因此,处理好过程与结果的关系,是综合实践活动的基本要求。实践中自主地提出问题,运用已有的知识和经验来尝试问题解决,获得丰富的经验,体验问题解决的基本方法,发展实践能力和良好的情感态度及个性。综合实践活动为学生的发展提供一种开放的发展空间和发展机会。这种发展空间和机会是开放的经过此次综合实践设计过程,收获了不少东西,要认真理解课本上的程序与知识点,课下也经常需要上机实践,这样才能使诸多理论实践,实践成功才是真正的理解与领会。
这次硬件部件设计与调试实践,使我学习了很多的东西。通过两个礼拜的学习和实践,使我对所学的知识进行了系统的复习和巩固,同时,通过课设,培养和锻炼了我 的动手能力,这一点非常重要,不仅对我以后的学习有帮助,还可以为以后的工作打下一定的基础。这一次的课设对我的帮助很大,使我真正的认识到了理论与实际的区别,这将成为我的学习目标和动力,更进一步的挖掘自己的能力,使自己获得进一步的提高。这段时间的学习,使我了解到了理论和实际之间的差别,第一次真正接触到了实际中的问题,并通过和老师、同学交流,加强了自身的分析问题、解决问题的能力。同时,我也发现了自己在某些方面的不足,这是我以后要加以改进的方面。
在组织电路图的过程中使我也学会了如何搭建单片机的硬件电路,如何根据硬件电路图来编制相误码的程序,使我对硬件课程的学习有了更浓的兴趣,使我对我所学的这个方向服了更浓的兴趣。虽然在做课设的过程中遇到过许多困难,犹其是思路一开始不正确的时候也产生过放弃的念头,但最终还是坚持了下来,终于把这个课设完整圆满的做完了。 经过这次的练习,我会更加严格要求自己,认真对待每一个课设,认真学好计算机控制这门课,争取有一个新的提高。
参考文献
[1]李建忠编著. 单片机原理及应用. 西安:西安电子科技大学出版社,2002
[2]李群芳,肖看编著. 单片机原理、接口及应用. 北京:清华大学出版社,2005
[3]于海生编著. 微型计算机控制技术. 北京:清华大学出版社,2008
[4]戴梅萼,史嘉权编著. 微型计算机技术及应用(第3版). 北京:清华大学出版社,2008
[5]江晓安,董秀峰编著. 数字电子技术(第二版). 西安:西安电子科技大学出版社,2005
16