微机原理课程设计电子闹钟由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“数字电子闹钟课程设计”。
电子钟设计
1任务要求
1.1显示位置:屏幕中央.1.2日期显示格式“时:分:秒.1.312/24时制可调.1.4在显示屏上显示提示语“CURRENT TIME IS:”和当前时间.2工作原理
1时钟起始时间的设置
先调用DOS操作系统模块9,在显示屏上显示提示语“TIME SYSTEM IS:”,输入时制12或24后,显示“CURRENT TIME IS:”,再调用DOS操作系统模块10,提示要输入时钟的起始时间,输入时间的格式是“时:分:秒”。输入的时间以字符串形式存放在已定义的存储器缓存区内,继而调用TRAN1转换子程序和MUL10乘10子程序,将存放在存储器缓存区内的ASCII字符转换为压缩BCD码,并将时、分、秒的值放在寄存器CH、DH、DL中。
2延时程序
调用延时TIME延时中断服务程序,累加到存放秒值的寄存器DL中,并进行十进制调整。在累加的过程中,不断地对时、分、秒值进行比较,秒不能等于60,分不能等于60,时不能等于24。秒等于限制值时,则使秒值为0分值加1;分等于限制值时,则使分值为0时值加1;时等于限制值时,则使时值为0;时、分、秒值都不超过限制值时,就转显示屏输出。
3时间显示
调用DOS操作系统模块9,可用来显示存储器内字符串。由于显示的字符必须为ASCII码,因为要调用TRAN2转换子程序将寄存器CH、DH、DL内压缩BCD码字符串转换成ASCII字符串,字符串最后以字符“$”结束,并按时、分、秒的顺序送存储器缓冲区内。调用DOS操作系统模块9,(DS:DX)应指向字符串首址。程序一旦进入运行,就将不间断地在显示屏显示时间,要想程序停止运行,可同时在键盘按下CTRL和BREAK二键。
4程序堆图 5程序清单
DATA SEGMENT BUFFER DB 10;设置输入字符串用缓冲区 DB ? DB 10 DUP(?)TS DB 'TIME SYSTEM IS:$' CT DB 'CURRENT TIME IS:$' PM DB 'PM $' AM DB 'AM $' KEEPIP DW 0 KEEPCS DW 0 SR DB ? HOUR DB ? DAT ENDS STA SEGMENT PARA STACK 'STACK' STAPN DB 100 DUP(?)TOP EQU LENGTH STAPN STA ENDS COD SEGMENT START PROC FAR ASSUME CS:COD,DS:DAT,SS:STA MOV AX,DATA MOV DS,AX MOV AX,STA MOV SS,AX MOV AX,TOP MOV SP,AX MOV AH,35H;设置1CH中断
MOV AL,1CH
INT 21H
;段地址放入ES,偏移地址放入BX
MOV KEEPIP,BX
;保偏移地址存
MOV KEEPCS,ES
;保存段地址
PUSH DS
MOV DX,OFFSET TIME
MOV AX,SEG TIME
MOV DS,AX
MOV AL,1CH
MOV AH,25H
;设置中断功能调用
INT 21H
POP DS
MOV DX,OFFSET TS
;DOS功能模块,显示字符串
MOV AH,9
INT 21H
MOV AH,1
;DOS功能模块,从键盘输入字符
INT 21H
MOV AH,1
INT 21H
MOV SR,AL
MOV DL,0AH
;”换行“
MOV AH,2
INT 21H
MOV DL,0DH
;”回车“
MOV AH,2
INT 21H
MOV DX,OFFSET CT
;DOS功能模块,显示字符串,提示从键盘输入
MOV AH,9
INT 21H
MOV DX,OFFSET BUFFER
MOV AH,10
;DOS功能模块,从键盘输入字符串到缓冲区
INT 21H
MOV BX,OFFSET BUFFER+2
CALL TRAN1
;将输入的ASCII码转换为BCD码
INC BX
INC BX
CALL TRAN1
INC BX
INC BX
CALL TRAN1
MOV BX,OFFSET BUFFER+2
MOV AL,[BX]
CALL MUL10
;将BCD码转换为压缩的BCD码
MOV CH,AL
INC BX
INC BX
MOV AL,[BX]
CALL MUL10
MOV DH,AL
INC BX
INC BX
MOV AL,[BX]
CALL MUL10
MOV DL,AL AGAIN: PUSH CX
MOV CX,18
STI
;开中断 W:
CMP CX,0
JNE W
CLI
POP CX
MOV AL,DL
ADD AL,1
;”秒“加1
DAA
MOV DL,AL
CMP AL,60H
;”秒“与60比较
JNE DISPY
;小于60S,转显示程序
MOV DL,0
;等于60S, ”秒“值为0,”分“+1
MOV AL,DH
ADD AL,1
DAA
MOV DH,AL
CMP AL,60H
;”分“于60比较
JNE DISPY
MOV DH,0
MOV AL,CH
ADD AL,1
DAA
MOV CH,AL
MOV AL, SR
CMP AL,32H
JNE NEXT
JMP DISPY NEXT: MOV AL,CH
MOV HOUR,CH
CMP AL,24H
JNE DISPY
MOV CH,0
DISPY: CALL IOCLR
CALL IOSET1
CALL STAR
CALL IOSET2
CALL STAR
CALL IOSET
MOV BX,OFFSET BUFFER
MOV AL,SR
CMP AL,32H
JNE NEXT2
CALL AD12
MOV AL,HOUR
JMP NEXT1 NEXT2: MOV AL,CH
;”时“值转换成ASCII码
NEXT1: CALL TRAN2
;将压缩BCD码转换成ASCII码
INC BX
MOV AL,':'
MOV [BX],AL
INC BX
MOV AL,DH
;”分“值转换成ASCII码
CALL TRAN2
INC BX
MOV AL,':'
MOV [BX],AL
INC BX
MOV AL,DL
;”秒“值转换成ASCII码
CALL TRAN2
INC BX
MOV AL,'$'
;显示字符串结束码
MOV [BX],AL
PUSH BX
PUSH CX
PUSH DX
MOV DX,OFFSET BUFFER
MOV AH,9
;DOS功能模块,显示字符串
INT 21H
POP DX
POP CX
POP BX
JMP AGAIN
CLI
PUSH DS
MOV DX,KEEPIP
MOV AX,KEEPCS
MOV DS,AX
MOV AH,25H
MOV AL,1CH
INT 21H
POP DS
STI
RET START ENDP MUL10 PROC
;将BCD码转换为压缩的BCD码
ADD AL,AL
DAA
MOV CL,AL
ADD AL,AL
DAA
ADD AL,AL
DAA
ADD AL,CL
DAA
MOV CL,AL
INC BX
MOV AL,[BX]
ADD AL,CL
RET MUL10 ENDP TRAN1 PROC
MOV AL,[BX]
AND AL,0FH
MOV [BX],AL
INC BX
MOV AL,[BX]
AND AL,0FH
MOV [BX],AL
RET TRAN1 ENDP TRAN2 PROC
MOV CL,AL
SHR AL,1
SHR AL,1
SHR AL,1
SHR AL,1
OR AL,30H
MOV [BX],AL
INC BX
MOV AL,CL
AND AL,0FH
OR AL,30H
MOV [BX],AL
RET TRAN2 ENDP IOCLR PROC
PUSH CX
PUSH DX
PUSH BX
PUSH AX
MOV AX,0600H
MOV BH,02
SUB CX,CX
MOV DX,184FH
INT 10H
;ASCII码转换成BCD码
;将压缩BCD码转换成ASCII码;调用BIOS,清除全屏幕
POP AX
POP BX
POP DX
POP CX
RET IOCLR ENDP TIME
PROC
DEC CX
IRET TIME
ENDP
PUSH DX PUSH BX PUSH AX MOV AH,02 SUB BH,BH MOV DX, 0C23H INT 10H POP AX POP BX POP DX RET IOSET ENDP IOSET1 PROC PUSH AX PUSH BX PUSH DX MOV DX,0A1AH MOV BH,00 MOV AH,02 INT 10H POP DX POP BX POP AX RET IOSET1 ENDP IOSET2 PROC PUSH AX PUSH BX PUSH DX MOV DX,0E1AH MOV BH,00 MOV AH,02 INT 10H
调用BIOS,设置屏幕光标在中央
;POP DX POP BX POP AX RET IOSET2 ENDP STAR PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV AL,3DH MOV BH,0 MOV BL,0CH CMP HOUR,24H JNZ X MOV HOUR,0H X: MOV CX,WORD PTR HOUR INT 10H POP DX POP CX POP BX POP AX RET STAR ENDP AD12 PROC PUSH DX MOV HOUR,CH MOV AL,SR CMP AL,32H JNE ZH MOV AL,HOUR CMP AL,24H JNE NEXT3 MOV CH,0 MOV HOUR,CH JMP S12 NEXT3: CMP AL,12H JBE S12 MOV DX,OFFSET PM MOV AH,9 INT 21H MOV AL,HOUR MOV DH,12H SUB AL,DH DAS MOV HOUR,AL JMP ZH S12: CMP AL,12H JNE Z MOV DX,OFFSET PM MOV AH,9 INT 21H JMP ZH Z: MOV DX,OFFSET AM MOV AH,9 INT 21H ZH: POP DX RET AD12 ENDP COD ENDS END STAR
6设计时遇到的问题及解决方法
在课程设计中遇到的最大的困难是如何利用软、硬件配合的方式产生中断,对中断向量表的装载还比较模糊,对中断的初始化、具体设置、中断返回还不是很清楚,程序设计一度陷入停滞状态,不知如何是好.于是我又重新翻阅了我们的学习课本,也就是电子工业出版社的《微机原理与接口技术(基于16位机)》,重点研究了第9章《中断》,通过对这一章的学习,我终于对中断有了详细的认识,在设计程序时也容易了很多。
设中断服务程序入口地址为TIME,则相应的程序如下:
„„
KEEPIP DW 0
;设置内存缓冲区,用于暂存 KEEPCS DW 0
;DOS的中断矢量
„„
;在主程序的初始化部分,先取出DOS的中断矢量并加以保存,然后装入需要的中断矢量
MOV AH,35H
;取出DOS的中断矢量,并送ES:BX
MOV AL,1CH
INT 21H
MOV KEEPIP,BX
;保存DOS的中断矢量
MOV KEEPCS,ES
PUSH DS;保护DS
MOV DX,OFFSET TIME
;将中断矢量取代
MOV AX,SEG TIME
;DOS的中断矢量
MOV DS,AX
MOV AL,1CH
MOV AH,25H
;设置中断功能调用
INT 21H
POP DS
;恢复DS „„
AGAIN: PUSH CX
MOV CX,18
STI
;开中断 W:
CMP CX,0
JNE W
CLI „„
TIME
PROC
DEC CX
IRET TIME
ENDP „„
;在程序结尾处,用以下程序恢复DOS的中断矢量 CLI
PUSH DS
MOV DX,KEEPIP
MOV AX,KEEPCS
MOV DS,AX
MOV AH,25H
MOV AL,1CH
INT 21H
POP DS
STI 7新增功能及实现方法
7.112时制时显示AM或PM
„„
AD12 PROC PUSH DX MOV HOUR,CH MOV AL,SR CMP AL,32H JNE ZH MOV AL,HOUR CMP AL,24H JNE NEXT3 MOV CH,0 MOV HOUR,CH JMP S12 NEXT3: CMP AL,12H JBE S12 MOV DX,OFFSET PM MOV AH,9 INT 21H MOV AL,HOUR MOV DH,12H SUB AL,DH DAS MOV HOUR,AL JMP ZH S12: CMP AL,12H JNE Z MOV DX,OFFSET PM MOV AH,9 INT 21H JMP ZH Z: MOV DX,OFFSET AM MOV AH,9 INT 21H ZH: POP DX RET AD12 ENDP „„
7.2绿色显示时间
„„
IOSET PROC PUSH DX PUSH BX PUSH AX MOV AH,02 SUB BH,BH MOV DX,0C23H INT 10H POP AX POP BX POP DX RET IOSET ENDP „„
7.3在数字上下方各显示一行个数同小时数的”=“ „„
IOSET1 PROC PUSH AX PUSH BX PUSH DX MOV DX,0A1AH MOV BH,00 MOV AH,02 INT 10H POP DX POP BX POP AX RET IOSET1 ENDP IOSET2 PROC PUSH AX PUSH BX PUSH DX MOV DX,0E1AH MOV BH,00 MOV AH,02 INT 10H POP DX POP BX POP AX RET IOSET2 ENDP STAR PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV AL,3DH MOV BH,0 MOV BL,0CH CMP HOUR,24H JNZ X MOV HOUR,0H X: MOV CX,WORD PTR HOUR INT 10H POP DX POP CX POP BX POP AX RET STAR ENDP „„ 8心得体会
这是我第一次用汇编语言来设计一个小程序,历时一周终于完成,其间有不少感触。首先就是借鉴.鲁迅先生曾说过要”拿来“,对,在这次课程设计中,就要”拿来"不少子程序,比如将ASCII码转换成BCD码,将BCD码转换成压缩BCD码,将压缩BCD码转换成ASCII码等,这些子程序的设计是固定的,因此可以直接从指导资料中调用,至于设置光标的子程序,只需要修改几个参数就可以,这大大方便了我的设计,为我节省了很多的时间。还有就是指导老师提供的资料很重要.这次课程设计的大部分程序,都可以在李老师提供的资料中找到,这对我的程序设计很有帮助,从这些资料中,我可以看出这个时钟程序的基本流程,修改一些程序就可以实现这个时钟的基本功能,添加一些程序就可以实现这个时钟的附加功能,可以说,如果没有李老师提供的源程序,我将面临很大的困难。文章引用自:
电子时钟课程设计一:设计背景电子数字钟的应用十分广泛,通过计时精度很高的石英晶振(也可采用卫星传递的时钟标准信号),采用相应进制的计数器,转化为二进制数,经过译码和显示电路准......
接口技术课程设计一、设计内容设计一个投票统计器,完成投票、计票统计和票数显示等功能。二、设计原理及方案在8086最小工作模式下,连接一块8255A芯片。在 8255A的C端口连接8......
一、设计题目单片机综合试验仪——计数/中断模块 二、功能及性能指标显示计数,记到15就重新开始计数 三、设计目的1 了解单片机综合实验仪基本构成和分模块设计方法。掌握PRO......
合肥工业大学 计算机与信息学院课程设计课程:微机原理与接口技术设计 专业班级:计算机科学与技术班 学号:2 姓名: 一、设计题目及要求:利用 8259A中断,实现对8253多种计数初值的设......
《微机原理》课程设计报告时间 学 院 专业班级 姓 名 学 号 合 作 者指导教师 成 绩 2013 年 11 月摘要本文针对可燃气体检测模块MQ—K1,综合运用《微机原理》所学知识,选择合......