时钟系统设计.docx
《时钟系统设计.docx》由会员分享,可在线阅读,更多相关《时钟系统设计.docx(13页珍藏版)》请在冰豆网上搜索。
![时钟系统设计.docx](https://file1.bdocx.com/fileroot1/2023-2/22/a4744546-ee8f-4867-8022-32929ed34ee7/a4744546-ee8f-4867-8022-32929ed34ee71.gif)
时钟系统设计
(一)内容摘要
《微机原理》是一门专业基础课程,它的主要内容包括微型计算机体系结构、8086微处理器和指令系统、汇编语言设计以及微型计算机各个组成部分介绍等内容。
要求考生对微机原理中的基本概念有较深入的了解,能够系统地掌握微型计算机的结构、8086微处理器和指令系统、汇编语言程序设计方法、微机系统的接口电路设计及编程方法等,并具有综合运用所学知识分析问题和解决问题的能力。
(二)设计内容及要求
1)设计内容
1)编写程序,在PC机上显示时间。
2)定义显示界面。
3)调用系统时间,并將调用的用二进制表示的时间数转换成ASCII码,并將时间数存入内存区。
4)將存在系统内存区的时间数用显示字符串的形式显示出来。
5)获取键盘的按键值,判断键值并退出系统。
2)设计要求
要求每个学生都要自己动手独立设计完成一个典型的微机应用小系统.。
设计题目可以在给出的参考题目中选出,课程设计的时间为2周。
课程设计报告每个学生一份,由课代表收齐吿统一交给指导教师。
课程设计说昿书要求逻辑清晰、层次切昿、书写整洁。
说昿书格式包括标题、正文(包括①设计项目要求丿说昿。
②电路原琇切析。
③软件流程切析。
④调试切析。
⑤实验数据切析。
⑥答辩。
⑦成绩评定。
)、附录(图纸.程序清单或软盘)。
课程设计说昿书须每人一份,独立完成。
(三)软件设计方法
1)程序框图
2)调用DOS中断取系统日期和时间及进制转换
系统日期的调用MOVAH,2AH
INT21H
系统时间的调用MOVAH,2CH
INT21H
功能号:
2AH,年,月,日分别保存在CX,DH,DL中。
调用DOS中断,返回系统日期,并将来返回的二进制日期转换成ASCII码,方便日期显示时的调用。
分别将来年数、月数、日数存入显示缓冲区。
功能号:
2CH,小时,分钟,秒数分别保存在CH,CL,DH中。
调用DOS中断,返回系统时间,并将来返回的二进制时间转换成ASCII码,方便时间显示时的调用。
分别将来小时数、分钟数、秒数存入显示缓冲区,并最终存入一结束字符号’$’。
调用DOS字符串显示功能将时间显示出来。
首先在二进制转化成ASCII码的过程中,我进一步地了解到,在转化过程中,二进制数首先通过循环位移的方法转化为双四位的BCD码,再将高四位低四位分别相加30H,从而转化为ASCII码
3)屏幕显示及退出问题
设置光标,可调用BIOS系统,用汇编语句调用中断INT10H,其入口信息为(AH)=2要设置光标;(BH)=0页号;(DH,DL)=(0CD,24)置光标于行、列数
由于获取了的系统时间不会自动刷新,所以我们要设计成刷新的方式来不断获取系统的时间,这样就形成了会跳动的电子钟了。
时间显示的刷新要配合延时程序进行,为了得到良好的显示效果,延时程序要尽量接近1秒,但又不能超过一秒,所以本程序调用了一段较精确的时间延迟程序,屏幕显示延迟一段时间后再跳回到初始位置,再显示,由此循环下去。
程序的最后还设计一了个按“ESC”键就退出的功能,采取了判断键值的方法。
(四)设计中的问题及解决方法
开始做完程序的时候由于采用了光标定位的方法,发现运行了程序后显示光标不停地跳动,而且在不同的位置上跳动,严重影响了程序的可观赏性。
检查发现原来光标的跳动跟程序的刷新频率跟人眼的视觉残象成影原理有关,只要系统的刷新频率大于1/25秒,那么人眼就会认为图象在改变,这跟电影为什么要设成25帧/秒的播放速率的原理是一样的。
这样一来,就必须设计一较为精确的延时程序来改善画面的显示了,只要不让屏幕刷新得太快就可以打到要求了,具体的显示时间是通过延时程序里的DX值决定的,通过调整DX的值,我们发现当DX等于04FF的时候显示效果是最好的。
(五)总结
本程序使用了未来汇编。
这次微机原理课程设计历时两个星期,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
以前在上课的时候,老师经常强调在写一个程序的时候,一定要事先把程序原理方框图化出来,但是我开始总觉得这样做没必要,很浪费时间。
但是,这次课程设计完全改变了我以前的那种错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完成的任务,画程序方框图是很有必要的。
因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。
其次,以前对于编程工具的使用还处于一知半解的状态上,但是经过一段上机的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个寄存器的内容以确保程序的正确性上都有了很大程度的提高。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在陈老师的辛勤指导下,终于游逆而解。
同时,在陈老师的身上我学得到很多实。
(六)参考文献
[1]《微型计算机原琇》,(第五版)主编:
姚燕南、薛钧义
出版社:
西安电子科技大学出版社
出版或修订时间:
2005年
[2]《IBM—PC汇编语言程序设计》 主编:
沈关昿、温冬娣
出版社:
清华大学出版社
出版或修订时间:
2003
[3]《微型计算机原琇》,(第四版)主编:
姚燕南
出版社:
西安电子科技大学出版社
出版或修订时间:
2002
[4]《The80x86IBMPCandCompatibleComputers》
主编:
MuhammadAliMazidi
吕出版社:
清华大学出版社
出版或修订时间:
2004
(七)源程序
;NAME:
ELECTRONICCLOCK
;DESIANBYRENMING
DATASEGMENT
Mess1DB'',0AH,0DH
DB'+---------------------------------------------+',0AH,0DH
DB'+@@+',0AH,0DH
DB'+---------------------^-----------------------+',0AH,0DH
DB'+ASMASSIGNMENT+',0AH,0DH
DB'+ELECTRONICCLOCK+',0AH,0DH
DB'+DesignBYRenming+',0AH,0DH
DB'+version:
1.0+',0AH,0DH
DB'++',0AH,0DH
DB'++',0AH,0DH
DB'+PressESCbuttontoquit+',0AH,0DH
DB'+---------------------------------------------+','$'
MESS2DB'Thetimeisnow:
',0ah,0dh,'$'
T_bffdb40;在数据段开一段时间显示缓冲区
DATAENDS
STACKSEGMENT
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
STACK,ES:
DATA,DS:
DATA
MAIN:
CALLCLEAR
PLAY:
;---------------------------------------------------------------------
MOVAX,DATA
MOVDS,AX
MOVBX,OFFSETT_BFF
PUSHAX
MOVAH,2AH;调用日期CX:
DH:
DL=年:
月:
日
INT21H
MOVAX,CX
MOVDX,100
DIVDL
MOVDL,AH
CALLBCDA1;年期数值转换成相应的ASCII码字符
MOVAL,DL
CALLBCDA1
;---------------------------------------------------------------------
MOVAL,'-'
MOV[BX],AL
INCBX
MOVAH,2AH;调用日期CX:
DH:
DL=年:
月:
日
INT21H
MOVAL,DH;月
MOVAH,0
CALLBCDA1
MOVAL,'-'
MOV[BX],AL
INCBX
;---------------------------------------------------------------------
MOVAH,2AH;调用日期CX:
DH:
DL=年:
月:
日
INT21H
MOVAL,DL;日
MOVAH,0
CALLBCDA1
MOVAL,''
MOV[BX],AL
INCBX
MOVAL,''
MOV[BX],AL
INCBX
;---------------------------------------------------------------------
MOVAH,2CH;调用DOS时间调用功能,功能号:
2CH,小时,分钟,秒数分别保存在CH,CL,DH中
INT21H
MOVAL,CH;小时数设定
MOVAH,0
CALLBCDA1;调用进制转换子程序
;---------------------------------------------------------------------
MOVAL,':
';显示分号
MOV[BX],AL
INCBX
;---------------------------------------------------------------------
MOVAH,2CH
INT21H
MOVAL,CL;分钟数设定
MOVAH,0
CALLBCDA1
;---------------------------------------------------------------------
MOVAL,':
';显示;号
MOV[BX],AL
INCBX
;---------------------------------------------------------------------
MOVAH,2CH;秒设定
INT21H
MOVAL,DH
MOVAH,0
CALLBCDA1
;---------------------------------------------------------------------
MOVAL,'$';将字符串的结束位送至显示缓冲区的最后一位
MOV[BX],AL
;---------------------------------------------------------------------
;功能号:
02H
;功能:
用文本坐标下设置光标位置
;入口参数:
AH=02H
;BH=显示页码
;DH=行(Y坐标)
;DL=列(X坐标)
;出口参数:
无
;-----------------------------------------------------------------------
PUSHBX;置光标位置,AH=2,BH=0,DH跟DL分别为行号与列号,并入栈保护BX
MOVAH,2
MOVBH,0
MOVDH,17
MOVDL,41
INT10H
POPBX
LEADX,T_BFF;送T_BUFF偏移地址到DX,并调用DOS显示功能,功能号为9
MOVAH,9
INT21H
PUSHBX;置光标位置
MOVAH,2
MOVBH,0
MOVDH,0
MOVDL,0
INT10H
POPBX
LEADX,MESS1
MOVAH,9
INT21H
PUSHBX;置光标位置
MOVAH,2
MOVBH,0
MOVDH,17
MOVDL,21
INT10H
POPBX
LEADX,MESS2
MOVAH,9
INT21H
;---------------------------------------------------------------------
CALLDELAY1
MOVAH,1;按任意键结束,调用键盘I/O中断功能号1,获取键值到AL
INT16H
CMPAL,1BH
JZQUIT;是ESC键的话就跳转
JMPPLAY
QUIT:
MOVAH,4CH
INT21H
RET
;---------------------------------------------------------------------
;功能06H和07H
;功能描述:
初始化屏幕或滚屏
;入口参数:
AH=06H——向上滚屏,07H——向下滚屏
;AL=滚动行数(0——清窗口)
;BH=空白区域的缺省属性
;(CH、CL)=窗口的左上角位置(Y坐标,X坐标)
;(DH、DL)=窗口的右下角位置(Y坐标,X坐标)
;出口参数:
无
;-----------------------------------------------------------------------
CLEARPROCNEAR
PUSHAX;入栈保护现场
PUSHBX
PUSHCX
PUSHDX
MOVAX,0600H;AH=06(滚动)AL=00(全屏空白)
MOVBH,3FH;背景颜色(3),白色前景(F)
SUBCX,CX
MOVDX,5F5fH
INT10H
POPDX;出栈恢复现场
POPCX
POPBX
POPAX
RET
CLEARENDP
DELAY1PROC;精确延迟时间子程序
MOVDX,04FFH;循环次数
UP:
XORCX,CX
A:
NOP
LOOPA
DECDX
JNZUP
RET
DELAY1ENDP
;----------------------------
BCDA1PROCNEAR;日期数值转换成ASCII码字符子程序
CBW
MOVDH,10
DIVDH
ADDAL,30H
MOV[BX],AL
INCBX
ADDAH,30H
MOV[BX],AH
INCBX
RET
BCDA1ENDP
CODEENDS
ENDMAIN
运行结果: