电子时钟课程设计报告文档格式.docx
《电子时钟课程设计报告文档格式.docx》由会员分享,可在线阅读,更多相关《电子时钟课程设计报告文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
通过设计实践,培养学生查阅专业资料,工具书或参考书,了解有关工业标准,掌握现代设计手段和软件工具,并能以图纸和说明书表达设计思想和结果的能力。
通过设计,不但要培养和提高学生解决工程具体问题,动脑动手的技术工作能力,而且还要逐步建立科学正确的设计和科研思想,培养良好的设计习惯,牢固树立实事求是和严肃认真的工作态度。
提高学生的创新意识及动手操作能力,为后续各门计算机课程的学习,以及毕业后从事微机硬件及软件开发打下基础,积累初步的经验。
2.3方案论证
2.3.1思路
先建立显示界面,再根据键盘输入的字符判断是显示日期还是时间,然后调用DOS系统2AH(或2CH)号功能分别将系统的日期(或时间)取出,接着把时间(或日期)转换成ASCII码并存到指定的系统内存区中,最后调用BIOS中断10的13号功能将其在屏幕上显示出来。
2.3.2程序设计原理
首先利用调用BIOS的中断10的0号功能创建显示窗口,选择适当的背景和前景等,使屏幕显示更加完美。
在数据段开辟两个显示缓冲区,分别用来存储系统时间及日期。
根据键盘输入的字符显示相应的内容。
假如输入的是T,则进入时间显示子程序,调用DOS中断21H的2CH号系统功能返回系统时间,再调用字符转换成ASCII码的子程序分别将二进制小时数、分钟数、秒数转换成ASCII码并存入显示缓冲区,方便时间显示时的调用。
调用BIOS的中断10的13号功能,定位光标的开始位置,结合着将时间显示在我们预先定义好的位置上。
由于获取了的系统时间不会自动刷新,而我们要设计成刷新的方式来不断获取系统的时间,故需调用BIOS的中断16的1号功能,这样才能形成会跳动的电子钟,将不间断地显示时间。
假如输入的是D,则进入日期显示子程序,调用DOS中断21H的2AH号系统功能返回系统日期,再调用字符转换成ASCII码的子程序分别将二进制年数、月数、日数转换成ASCII码并存入显示缓冲区,方便年月日显示时的调用。
调用BIOS的中断10的13号功能,定位光标的开始位置,结合着将日期显示在我们预先定义好的位置上。
由于获取了的系统日期不会自动刷新,而我们要设计成刷新的方式来不断获取系统的日期,故需调用BIOS的中断16的1号功能,这样才能形成会跳动的电子钟,将不间断地显示日期。
要想程序停止运行,可在键盘按下Q键,这样就可以返回DOS系统。
2.3.3用到的DOS系统功能
A:
中断21H:
1)键盘输入单字符——1号功能的调用
调用格式:
MOVAH,1
INT21H
功能:
调用无入口参数,执行时系统首先等待键盘输入,待程序员按下任何一键,系统先检查是否是Ctrl-Break键。
如果是则退出,否则将键入的字符ASCII码置入寄存器,并在屏幕上显示该字符。
2)取日期——2AH号系统功能调用
入口参数:
AH=2AH
出口参数:
CX=年份(1980~2099)
DH=月份(1~12)
DL=日(1~31)
AL=星期(0~6,0代表星期天)
调用取出由DOS保持的年、月、日及星期。
CX、DH、DL、AL中都是二进制数,要想在屏幕上显示出来必须变成ASCII码才行。
3)取时间——2CH号系统功能调用
AH=2CH
CH=小时(0~23)
CL=分钟(0~59)
DH=秒(0~59)
DL=1/100秒(0~99)
调用取出由DOS保存的时间。
CX与DX中都是二进制数,要想在屏幕上显示出来必须变成ASCII码才行。
4)返回操作系统——4CH号系统功能调用
MOVAH,4CH
调用无入口参数,执行结果是结束当前正在执行的程序,并返回DOS操作系统。
2.3.4用到的BIOS系统功能
中断10H:
1)设置显示方式——0号功能调用
入口参数AL=显示方式值
0040×
25黑白文本方式
0140×
25彩色文本方式
0280×
0380×
04320×
320彩色图形方式
功能:
无出口参数,将显示方式设置为指定形式
2)置光标位置——2号功能调用
入口参数DH=行号
DL=列号
BH=页号
无出口参数,将光标设置在指定的位置
3)显示字符串——13号功能调用
ES:
BP=串地址
CX=申长度
DH,DL=起始行,列
BH=页号
AL=0,BL=属性串:
char,char,…
AL=1,BL=属性串:
char,char,…
AL=2
串:
char,char,char,attr,…
AL=3
显示字符串并设置显示的属性
B:
中断16H:
1)读键盘缓冲区字节——1号功能调用
MOVAH,01H
INT16H
用来查询键盘缓冲区,对键盘扫描但不等待,并设置ZF标志。
若有按键操作(即键盘缓冲区不空),则ZF=0,AL中存放的是输入的ASCII码,AH中存放输入字符的扩展码。
若无键按下,则标志位ZF=1。
3.方案设计
3.1流程图
图1:
主程序流程图图2:
显示时间子程序流程图
图3:
3.2程序代码设计
根据设计思路及流程图,设计系统为主-子程序结构,通过子程序调用和嵌套完成对时间、日期的显示。
因此自然分成三个部分——主程序、日期显示子程序、时间显示子程序。
另外界面显示在本程序占较大比例故作一独立模块单独设计。
于是,程序代码的设计共分四个主要的模块进行——主程序模块、日期显示子程序模块、时间显示子程序和界面显示模块。
3.2.1主程序模块的设计
根据设计思路本程序主要实现从键盘输入“D”可显示系统当前日期及星期几;
输入“T”可显示系统当前时间;
输入“Q”返回操作系统。
主程序模块主要完成对键盘键入字符判别及分别调用日期显示子程序和时间显示子程序。
依次要求设计如下代码:
CODESEGMENT;
代码段
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK
START:
MOVAX,DATA;
装填数据段、附加段
MOVDS,AX
MOVES,AX
INT21H
MOVAH,1;
从键盘输入单字符
CMPAL,44H;
AL='
D'
?
JNESHIJIAN
CALLDATE;
显示日期
SHIJIAN:
CMPAL,54H;
T'
JNEEXIT
CALLTIME;
显示时间
EXIT:
CMPAL,51H
JNESTART
MOVAH,4CH;
返回DOS状态
CODEENDS
ENDSTART
本段成程序完成当键盘键入“D”时调用日期显示子程序DATE,键入“T”时调用时间显示子程序TIME。
字符判断程序包含在一循环内可实现字符的连续判别。
3.2.2日期显示子程序模块
日期显示子程序模块设计功能为实时调用系统日期并将日期信息转化为ASCII码存入日期缓存显示之。
系统日期调用应用2AH号系统功能。
将年、月、日及星期存入CX、DH、DL、AL。
其都是二进制数,要想在屏幕上显示出来必须变成ASCII码才行。
为此首先编写一个将二进制转换为ASCII码并存入日期缓存的子程序BCDASC1:
BCDASC1PROCNEAR;
日期数值转换成ASCII码字符子程序
PUSHBX
CBW
MOVBL,10
DIVBL
ADDAL,'
0'
INCSI
ADDAH,'
MOVWORDPTRDBUFFER1[SI],AX
POPBX
RET
BCDASC1ENDP
调用此子程序可使日期显示子程序大为简化。
显示日期时,年、月、日得显示只需将其转存AL调用BCDASC1即可。
但年的显示需将其高两位,低两位分开调用BCDASC1。
如年的显示:
MOVAX,CX;
将年的高两位,低两位分开
MOVBX,100
MOVBL,AH
CALLBCDASC1;
年份高两位转换成ASCII存入缓存
MOVAL,BL
年份低两位转换成ASCII存入缓存
在调用BCDASC1时注意日期缓存指针SI的变化,通过这种方法依次将年份高两位、年份低两位、月份、日期存入日期缓存DBUFFER1。
星期显示时,考虑到星期的表达有别于年、月、日。
年、月、日可直接用数字表示,而星期习惯用英文缩写表示。
这样星期显示单独编程。
首先在数据段定义星期字符串:
DBUFFER2DB'
Sun.Mon.Tue.Wed.Thu.Fri.Sat.'
根据AL值对星期字符串指针DI做偏移找到星期显示地址。
由于寄存器有限需先将AX保存如DI内。
星期实现代码:
MOVAX,DI;
恢复AX
XORAH,AH;
偏移星期地址
SHLAL,1
SHLAL,1
LEADI,DBUFFER2
ADDDI,AX
实现找到星期显示地址。
完成后应用INT10H的13号功能将年、月、日及星期显示与屏幕制定位置。
代码如下:
MOVBP,串地址
MOVDX,制定位置
MOVCX,串长
MOVBX,00F0H
MOVAX,1301H
INT10H
此段可将字符串安制定长度,制定颜色,制定位置显示与银幕。
以上程序段均包含于如下循环中:
DATEPROCNEAR;
显示日期子程序
DISPLAY:
MOVAH,2AH;
取日期,CX:
年份;
DH:
月
;
份;
DL:
日期;
AL:
星期
MOVAH,02H;
设置光标位置位03*00
MOVDX,0300H
MOVBH,0
CALLDELAY;
调用延时程序
MOVAH,01H;
读键盘缓冲区字符到AL寄存器
INT16H
JEDISPLAY;
键盘缓冲区AL不变跳至DISPLAY循环
JMPSTART
DATEENDP
此循环可保时间信息连续刷新直到键盘键入字符。
3.2.3时间显示子程序模块
此模块与日期显示模块类似,同样有二进制转换为ASCII码并存入时间缓存的子程序BCDASC,和外循环结构。
具体程序如下:
TIMEPROCNEAR;
显示时间子程序
DISPLAY1:
MOVSI,0
MOVAH,2CH;
取时间,CH:
小时;
CL:
分;
秒
MOVAL,CH
CALLBCDASC;
小时转换成ASCII存入时间缓存
MOVAL,CL
分钟转换成ASCII存入时间缓存
MOVAL,DH
CALLBCDASC;
秒转换成ASCII存入时间缓存
MOVBP,OFFSETDBUFFER;
系统时间为黑子白底色
MOVDX,0D0DH
MOVCX,20
设置光标位置
CALLDELAY;
MOVAH,01H;
读键盘缓冲区字符到AL寄存器
JEDISPLAY1;
JMPSTART
MOVAX,4C00H
TIMEENDP
此部分程序完成对系统时间的调用并显示并能实时刷新时间。
3.2.4界面显示模块
为了使显示界面更加具有美感,不致枯燥无味,因此我们将界面设计成如下样式:
图4显示界面
以上界面的实现通过如下程序实现:
DATASEGMENT;
数据段
SPACEDB1000DUP('
'
);
定义25*40个空格
PATTERNDB3DUP('
'
),0C9H,26DUP(0CDH),0BBH,3DUP('
)
;
定义显示区图形
DB3DUP('
),0BAH,1DUP('
DATE:
'
),21DUP(20H),0BAH,3DUP('
TIME:
WEEK:
),0C8H,26DUP(0CDH),0BCH,3DUP('
DBUFFERDB'
7DUP('
:
),12DUP('
);
时间缓冲区
DBUFFER1DB'
10DUP('
/'
),9DUP('
日期缓冲区
星期缓存区
STRDB0DH,0AH,'
PLEASEINPUTDATE(D)ORTIME(T)ORQUIT(Q),$'
提示信息
MOVAX,0001H;
设置显示方式为彩色文本方式
MOVAX,DATA;
MOVBP,OFFSETSPACE;
显示25*40空格
MOVDX,0B00H;
起示位置是0B行00列
MOVCX,1000;
串长为1000
MOVBX,00F0H;
文本底色为白色
MOVAX,1300H
MOVBP,OFFSETPATTERN;
显示矩形条
MOVCX,200;
设置矩形条为黑色
INT10H
LEADX,STR;
显示提示信息
MOVAH,9
·
显示界面主要通扩展ASCII码特殊字符的排列来实现。
并用INT10H的13号功能显示。
4.结果与分析
4.1调试过程
1)编译源文件,命名为123.ASM,并保存于D盘
2)键入命令MASMD:
\123.ASM生成一个OBJ文件,检查源程序中的错误,并改正。
3)键入连接命令LINKD:
\123.OBJ,再次键入123回车,即可显示结果。
4.2结果
:
当键盘输入T时结果如下:
图5输入T时界面显示
当键盘输入D时结果如下:
图6输入D时界面显示
4.3分析
经验证,当从键盘输入T时,电子钟只显示时间,且与PC机系统时间保持一致,随PC机变化而变化;
当从键盘输入D时,电子钟只显示日期和星期,且与PC机系统保持一致;
当从键盘输入Q时,返回DOS系统。
当不停地键入字符D或T时,电子钟可以不停的刷新。
综上所述,本次课程设计基本达到课题要求,实现了和系统时钟一致。
此外,我们在此基础上加以拓展,首先是创建了华丽的显示见面,其次是实现了查询功能,最后是我们所设计的数字显示电子钟还可以显示星期。
总的来说,本次设计还是比较成功的。
5.总结与体会
很快两个星期的课程设计就结束了,在本次实践中我们学到了很多宝贵的知识和经验。
本次课程设计并不是一帆风顺的,期间-我们遇到过一些问题,有过喜悦,也有过失落,曾一度热情高涨,也曾一度情绪低落,从开始时满富盛激情到最后汗水背后的复杂心情,点点滴滴无不令我们回味无长。
通过近两周的课程设计,课程设计的基本目的达到了,我懂得了理论与实际相结合的重要性,只有把所学的理论知识与实践相结合起来,才能提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
我想说,设计确实有些辛苦,但苦中也有乐,在如今单一的理论学习中,很少有机会能有实践的机会,但我们可以,而且设计也是一个团队的任务,一起的工作可以让我们有说有笑,相互帮助,配合默契,多少人间欢乐在这里洒下,大学里一年的相处还赶不上这十来天的合作,我感觉我和同学们之间的距离更加近了;
我想说,确实很累,但当我们看到自己所做的成果时,心中也不免产生兴奋。
也许有人不喜欢这类的工作,也许有人认为设计的工作有些枯燥,但我们认为无论干什么,只要人生活的有意义就可。
这个时代不欢迎孤独的英雄,因为一个人的能力毕竟有限,惟有善于合作的团队才能发挥出最大的能量。
在这次课程设计中,我真正体会到了合作的重要性。
在这次程序设计中我们四个人在一起,从要实现的功能到流程图的绘制,从程序的编写到程序的检查,从程序的调试到实验报告的写作,其间每一个过程都凝聚了我们组的力量。
在遇到棘手的问题时,我们总是一起讨论,一起把问题解决。
这次课程设计终于顺利完成了,在设计中遇到了很多专业知识问题,最后在老师和同学的帮助下,终于游逆而解。
同时,在别人的身上我们学也到很多实用的知识,在此对给过我帮助的老师和各位同学表示衷心的感谢!
参考文献
[1]朱金钧,麻新旗.微型计算机原理及应用技术(第二版)[M].机械工业出版社,2005
[2]杨立,赵丑民,曲凤娟.微型计算机原理与接口技术学习与实验指导(第一版)[M].中国水利水电出版社,2005
附录
程序源代码:
STACKSEGMENTSTACK;
堆栈段
DW200DUP(?
STACKENDS
DATASEGMENT;
);
DB3DUP('
*'
);
;
STRDB0DH,0AH,'
DATAENDS
代码段
ASSUMECS:
MOVAX,DATA;
MOVCX,1