课程设计说明书姓名:学号:院系:专业:题目:实时时钟程序设计指导教师:职称:课程设计说明书院系:专业:姓名:学号:课程设计题目:实时时钟程序设计起迄日期:课程设计地点:指导教师:系主任:课程设计任务书课程设计任务书目录第一章课题设计目的内容及要求 (6)1.1 目的..................... (6)1.2 内容 (6)1.3 要求 (6)第二章程序流程图设计 (2)2.1主流程图设计 (2)2.2子流程图设计........................... 错误!未定义书签。
第三章程序段落的说明 (8)3.1光标的设立和隐藏 (8)3.2调用系统的时间 (5)3.3判断是否有键盘的输入 (6)第四章程序调试说明、结果记录与分析 (7)4.1程序调试的过程 (7)4.2调试结果 (7)4.3分析结果 (8)第五章总结与体会 (8)参考文献 (8)附录 (9)1.程序流程图 (9)2.程序清单 (11)第一章课题设计目得内容及要求1.1 目得1)培养学生文献检索的能力,特别是如何利用Internet检索需要的文献资料。
2)培养学生综合分析问题、发现问题和解决问题的能力。
3)培养学生运用知识的能力和工程设计的能力。
4)提高学生课程设计报告撰写水平。
1.2 内容设计一个根据所学汇编语言课程的知识,熟练8086汇编语言的编程原理,和程序设计思想,编写一个实时时钟程序进一步提高综合运用知识的能力。
1.3 要求每隔一秒显示系统时钟;可以重复输入,有退出键功能。
第二章程序流程图设计2.1主流程图设计由方案设计分析可知,此次设计比较简单,先初始化程序,然后设立光标,在光标移动时,不断地取时,取分,取秒,并不断的循环。
在循环的过程中,当按下ESC键时退出程序;当按下其它键时,程序继续运行,并显示时间界面,再按下ESC键时,程序又将退出。
流程图设计:当初始化后,设定一个光标用来显示时间的时、分、秒,并将光标隐藏。
流程图有两个分支,表示有两个判断,当时分秒取完后,判断是否在键盘上有输入,如果没有输入,则返回到光标定位,若有输入判断是否为ESC键的ASC码,如果是则退出程序,程序结束,过程比较明了,流程图分支不多,但功能能够很好的实现。
流程图如1所示图1 主程序设计流程图2.2子流程图设计可知,在时间的获取时,需要时、分、秒分别获取,显示时使用的是相应的ASCII码。
加上分隔符“:”,共同组成完整时钟显示,我们对子程序做流程图,如图2所示。
图2 子程序流程图第三章程序段落的说明3.1 光标的设立和隐藏光标的不停移动,使时间能不停地显示时间的时分秒,并使其显示界面不消失,并随着系统时间的变化而同步变化,隐藏光标使界面看起来更美观。
程序如下:mov dh,0ah ;行数mov dl,35 ;列数mov bh,0 ;页数mov ah,2int 10h ;确定光标的位置,使其居在中间mov cx,2000hmov ah,01hint 10h ;隐藏光标3.2调用系统的时间获取系统的时间,用程序将系统的时间调用,使显示的时间和系统的时间同步变化,其中时间的时分秒显示都是需要先转换成相应的ASCII码,再显示在屏幕上。
获取系统时间:mov ah,02int 1ah ;系统时间调用push cxpush dx ;现场保护时的获取:xor dl,dl ;dl清零mov dl,ch ;cx高四位给dlmov cl,4shr dl,cl ;最终dl中为ch的高四位add dl,30h ;转换成ASCII码mov ah,02hint 21h ;光标处显示时的第一位mov dl,chadd dl,0fhadd dl,30h ;转换成ASCII码mov ah, 02int 21h ;光标处显示时的第二位mov dl,":"mov ah,02int 21h ;光标处显示“:”分的获取:pop dxpop cx ;出栈,恢复现场push dx ;置光标位置xor dl,dlmov dl,clmov dh,clmov cl,4shr dl,cladd dl,30h ;转化成相应的ASCII码mov ah,02int 21h ;光标处显示分的第一位mov cl,dhand cl,0fhadd cl,30h ;转化成相应的ASCII码mov dl,clmov ah,02int 21h ;光标处显示分的第二位mov dl,':'mov ah,02int 21h ;光标处显示“:”秒的获取:pop dx ;出栈,恢复现场mov bl,dhmov cl,4shr dh,cladd dh,30h ;转化成相应的ASCII码mov dl,dhmov ah,02int 21h ;光标处显示秒的第一位mov cl,bland cl,0fhadd cl,30h ;转化成相应的ASCII码mov dl,clmov ah,02int 21h ;光标处显示秒的第二位3.3 判断是否有键盘输入判断是否有输入,当有字符时判断是否为ESC,若是则退出程序,如果不是程序继续运行。
程序段:a1: mov ah,0bh ;调用DOS 功能0BH 检测键盘是否有输入int 21hcmp al,00h ;检测是否有输入jne a2 ;有则跳到a2jmp go ;没有则回到goa2: mov ah, 08hint 21hcmp al,1bh ;判断是否为ESCje exit ;是则退出jmp go ;不是则跳到goexit:mov ah,4chint 21h ;退出程序第四章程序调试说明、结果记录与分析4.1 程序调试的过程程序调试,是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。
这是保证计算机信息系统正确性的必不可少的步骤。
编完计算机程序,得调试所写程序是否正确,是否能满足所要求的功能。
写好程序后,对DOS系统界面调用功能指令不太熟悉,界面出来后时间显示在右上角,并且光标不能消失,最后经过查询,运用了10号中断,最后把光标隐藏了,并使时间显示在界面的中间位置。
在判断是否在键盘上有输入时,开始不会用键盘扫描功能,没有调试出来,经过向同学请教最后调用DOS功能0bh,并用08h来判断是否是ESC输入,最终实现了退出功能。
4.2调试结果运行程序,时间显示界面,如图3所示:图3 进入后的运行界面单击其他键时的显示界面,如图4所示,与图3相同。
单击ESC键时,界面消失,退出程序。
图4 单击其它键时的显示界面4.3分析结果可知运行程序后,能达到设计要求,即进入后能显示时间在屏幕的中央位置,单击ESC外的键时,程序继续,时间继续显示,单击ESC时,退出程序,程序设计成功。
第五章总结与体会参考文献[1] 沈美明,温冬禅.IBM PC汇编语言程序设计.清华大学出版社,第二版[2] 刘丽莉.汇编语言程序设计.北京大学出版社,2010附录Array1.程序流程图主程序设计流程图子程序流程图2.程序清单datas segmentdatas endsstacks segment ;此处输入堆栈段代码stacks endscodes segmentassume cs:codes,ds:datas,ss:stacksstart: mov ax,datasmov ds,axgo: mov dh,0ah ;行数mov dl,35 ;列数mov bh,0 ;页数mov ah,2int 10h ;确定光标的位置,使其居在中间mov cx,2000hmov ah,01hint 10h ;隐藏光标xor dl,dl ;dl清零mov dl,ch ;cx高四位给dlmov cl,4shr dl,cl ;最终dl中为ch的高四位add dl,30h ;转换成ASCII码mov ah,02hint 21h ;光标处显示时的第一位mov dl,chadd dl,0fhadd dl,30h ;转换成ASCII码mov ah, 02int 21h ;光标处显示时的第二位mov dl,":"mov ah,02int 21h ;光标处显示“:”pop dxpop cx ;出栈,恢复现场push dx ;置光标位置xor dl,dlmov dl,clmov dh,clmov cl,4shr dl,cladd dl,30h ;转化成相应的ASCII码mov ah,02int 21h ;光标处显示分的第一位mov cl,dhand cl,0fhadd cl,30h ;转化成相应的ASCII码mov dl,clmov ah,02int 21h ;光标处显示分的第二位mov dl,':'mov ah,02int 21h ;光标处显示“:”pop dx ;出栈,恢复现场mov bl,dhmov cl,4shr dh,cladd dh,30h ;转化成相应的ASCII码mov dl,dhmov ah,02int 21h ;光标处显示秒的第一位mov cl,bland cl,0fhadd cl,30h ;转化成相应的ASCII码mov dl,clmov ah,02int 21h ;光标处显示秒的第二位a1: mov ah,0bh ;调用dos 功能0bh 检测键盘是否有输入int 21hcmp al,00hjne a2 ;如果有输入,则跳转到a2jmp go ;如果没有输入,则跳转到goa2: mov ah, 08hint 21h ;调用dos 功能08h 判断键盘输入的字母cmp al,1bh ;判断键盘输入是否为escje exit ;如果是则跳转到exitjmp go ;重新跳回开头exit: mov ah,4ch ;结束dos以及跳出语句int 21hcodes endsend start。