信息科学与技术学院微机原理与接口技术课程设计报告题目名称:倒计时牌学生姓名:冉婷婷学号: 2009082244 专业年级:计科09级2班指导教师:张更新时间: 2012-01目录1.课程设计题目及要求 (1)1.1课程设计的题目: (1)1.2课程设计的要求 (1)2.功能设计 (2)2.1功能模块. (2)2.2功能图 (2)3.详细设计. (3)3.1设计方法. (3)3.2各功能模块及流程图 (3)4.运行结果 (7)5. 课程设计总结 (8)6参考书目. (8)附录. (10)1、课程设计题目及要求1.1课程设计的题目:倒计时牌1.2课程设计的要求:1.能实现日历功能2.能实现倒计时功能(显示天、时、分、秒)扩展功能:实现倒计时的时间人为设定2、功能设计2.1、功能模块:宏定义:置光标位置(setf)————定义光标定位宏清屏(clearscreen)————用于将屏幕清成指定的前景背景色输入(input)————定义输入宏程序:主程序模块:根据选择显示日历的时间,或倒计时时间初始化窗口模块:给出操作提示。
系统时间子程序:取得时间,并将时间存于数据段的。
系统日期子程序:取得日期星期,并将日期星期信息存于数据。
转换子程序:将阳历转换成阴历,将阴历信息存于。
显示子程序:通过数据段的shuzi,将时间显示成数码管的形式。
延时子程序:通过检测61h端口,实现延时一秒。
减一秒子程序:执行延时程序后,时间减少一秒。
减一天子程序:若时间00:00:01减少一秒,则执行减一天的操作。
输出子程序————输出指定的字符串。
2.2、功能图:Y开始操作提示进行阴阳历的转换倒计时功能日历功能是否有字符输入?显示时间、操作提示退出3、详细设计:3.1、设计方法:定义clearscreen宏,使用BIOS的06号功能---清屏或上卷;定义setf宏,使用BIOS的02号功能---制光标位置;定义input宏,使用BIOS的01号功能---输入字符。
显示系统当前时间与日期,使用DOS的2A号功能取系统日期和2C号功能取系统时间。
定义数据段Disptime存放系统时间,Dispdata存放系统日期。
年存在ch中,月存在dh中,日存在dl中。
将年份除以10,得到它的每一位,每一位加30h,求取它的ASCII码,并将其送到指定的存储位置中。
求取时间的方法与日期相同。
在代码段中主函数通过调用各子程序来执行相应的功能。
Disp子程序取得disptime内的数字并乘以16确定该数字在shuzi段的位置,之后置光标显示该字符。
Delay子程序通过监听61h端口实现硬件延时,消除由于cpu速率导致的延时不精确。
3.2、各功能模块及流程图取得日期、星期的getdata 模块 延时程序模块nynyny开始设置循环次数75d设置循环次数6632dal ==0 ?bl ==0 ?结束监听61端口,直到第四位发生改变开始mov bx,10取系统年份放入并放入axmov cx,4dx 清0,存余数 商送ax,余数送dx将余数加30h将余数放指定位置pop dx结束push dxdiv bxcx==0 ?时间减少一秒dec_1s模块mov al,[Disptime+7]dec almov [Disptime+7],alYmov [Disptime+7],09hmov al,[Disptime+6]dec almov [Disptime+6],al同理,判断是否导致分、时减1returnN Cmp al,10取得时间的gettime模块将数字显示成数管的形式的disp子程序调用21h的2ch号中断,取得时间从ch中取得时,并除以10,分别将商和余数存于代码段的两个字节,将时的2位分别存储从cl中取得时,并除以10,分别将商和余数存于代码段的两个字节,将分的2位分别存储从cl中取得时,并除以10,分别将商和余数存于代码段的两个字节,将分的2位分别存储取disptime中的时的十位至al将取得数字乘以16得到其对应在shuzi段的对应显示显示字符串置光标位置Dx加06置光标,并显示字符串Dx加06置光标,并显示字符串重复上述过程,将时分秒全部显示4、运行结果 4.1开始界面4.2按e进入4.3按c进行阴阳历的转换4.4按s设置时间按q退出。
5、课程设计总结这次的课程设计使我学到了很多知识,加深了我对汇编语言的理解。
制作日历功能时,虽然知道大概的流程,但是编写起来却很困难,比如并不知道如何取系统时间,如何把字符转换成ASCII码显示出来,如何进行阴阳历之间的转换。
通过学习,我对这些知识点有了一定的了解,尤其是对BIOS的一些中断功能的了解,还有对宏的概念,以及它和子程序的区别。
对于倒计时的功能,我参考了一些别的程序,虽然明白了它的原理,但是实现起来却很吃力,由于我的编程能力有限,所以做的很慢,导致这个功能还有一点问题。
总之,这次的课程设计使我体会到了其中的乐趣,编程能力也有了提高。
同时,我意识到自己在知识储备方面还很欠缺,今后要多动手实践,提高自己的能力。
6、参考文献:[1] 《IBM-PC汇编语言程序设计》沈美明清华大学出版社 2001年8月第2版[2] 《IBM-PC汇编语言程序设计例题习题集》沈美明清华大学出版社 1991年6月第1版[3] 《微机系统和接口应用技术》朱世鸿著清华大学出版社 2006年9月第1版附录:源程序data segmentDisptime db 00,00,":",00,00,":",00,00,"$"Dispdata db 00,00,00,00,"-",00,00,"-",00,00," ","$",00,"$"Dispdata_1 db 32h,30h,31h,31h,".",31h,32h,".",30h,38h," ","$",00,"$" xingqi db "MON","$","TUE","$","WEN","$","THU","$","FRI","$","SUT","$","SUN","$" show_wel db "welcome to my program!!!",0dh,0ah,"$"show_menu db "Settime:s Begin:e Quit:q","$"show_menu_1 db "Settime:s Change:c Quit:q","$"show_reset db "The reset time is:","$"flag db 0tab_1 db 0b4h,0a0h,0b5h,50htab_2 db 00h,04htab_3 db 31d,29d,31d,30d,31d,30d,31d,30d,31dshuzi db " _ ",0dh,0ah,"$"db "| |",0dh,0ah,"$"db "|_|",0dh,0ah,"$"db " ",0dh,0ah,"$"db " |",0dh,0ah,"$"db " |",0dh,0ah,"$"db " _ ",0dh,0ah,"$"db " _|",0dh,0ah,"$"db "|_ ",0dh,0ah,"$"db " _ ",0dh,0ah,"$"db " _|",0dh,0ah,"$"db " _|",0dh,0ah,"$"db " ",0dh,0ah,"$"db "|_|",0dh,0ah,"$"db " |",0dh,0ah,"$"db " _ ",0dh,0ah,"$"db "|_ ",0dh,0ah,"$"db " _|",0dh,0ah,"$"db " _ ",0dh,0ah,"$"db "|_ ",0dh,0ah,"$"db "|_|",0dh,0ah,"$"db " _ ",0dh,0ah,"$"db " |",0dh,0ah,"$"db " |",0dh,0ah,"$"db " _ ",0dh,0ah,"$"db "|_|",0dh,0ah,"$"db "|_|",0dh,0ah,"$"db " _ ",0dh,0ah,"$"db "|_|",0dh,0ah,"$"db " _|",0dh,0ah,"$"data endssetf macro dh1,dl1 ;定义光标定位宏push axpush bxpush dxmov ah,2hmov bh,0hmov dh,dh1mov dl,dl1int 10hpop dxpop bxpop axendmclearscreen macro ch1,cl1,dh1,dl1,bh1;定义清屏宏 mov ah,6mov al,0mov ch,ch1mov cl,cl1mov dh,dh1mov dl,dl1mov bh,bh1int 10hendm;----------主程序---------------code segment para 'code'assume cs:code,ds:data,es:datamain proc farpush dsxor ax,axpush axmov ax,datamov ds,axcall kaijisetf 0bh,1bhmov dx,offset show_welcall outputsetf 0eh,19hmov dx,offset show_menucall outputcall getdatacall gettimecall change_gtyxunhuan:mov ah,01hint 21hcmp al,'e'jz begincmp al,'c'jz changecmp al,'s'jz settimecmp al,'q'jz quitchange: jmp change_1settime: clearscreen 00h,00h,18h,4fh,0fh setf 09h,14hmov dx,offset show_resetcall outputmov ah,01hint 21hand al,0fhmov [Disptime],alint 21hand al,0fhmov [Disptime+1],alint 21hint 21hand al,0fhmov [Disptime+3],alint 21hand al,0fhmov [Disptime+4],alint 21hint 21hand al,0fhmov [Disptime+6],alint 21hand al,0fhmov [Disptime+7],aljmp beginquit: jmp nextbegin: jmp begin_1change_1:setf 0bh,16hpush bxmov bl,[flag]cmp bl,0hjz ccmov dx,offset Dispdatacall outputmov [flag],0hjmp next_1cc: mov dx,offset Dispdata_1call outputmov [flag],1hnext_1: pop bxjmp abegin_1:clearscreen 00h,00h,18h,4fh,02h clearscreen 05h,10h,0dh,35h,68hclearscreen 06h,12h,0ch,33h,04hsetf 0eh,14hmov dx,offset show_menu_1call outputsetf 0bh,16hmov dx,offset dispdatacall outputsetf 0bh,24hmov dx,offset xingqipush axpush bxmov bl,4hmov al,[dispdata+0eh]sub al,30hdec almul bladd dx,axcall outputpop bxpop axA: setf 07h,13hcall dispcall delayCall dec_1smov ah,0bhint 21hinc aljnz Ajmp xunhuannext:RETmain endp;------------gettime子程序--------- gettime proc nearpush bxpush axmov bl,0ahmov ah,2chint 21hmov ax,0mov al,chdiv blmov [Disptime],almov [Disptime+1],ahmov ax,0mov al,cldiv blmov [Disptime+3],almov [Disptime+4],ahmov ax,0mov al,dhdiv blmov [Disptime+6],almov [Disptime+7],ahpop axpop bxretgettime endp;------------getdata子程序--------- getdata proc nearpush cxpush dxpush axpush bxint 21hpush axpush dxmov bx,1000dmov ax,cxmov dx,0hdiv bxor al,30hmov [Dispdata],al mov ax,dxmov bl,100ddiv blor al,30hmov [Dispdata+1],al mov al,ahmov ah,0mov bl,0ahdiv blor al,30hor ah,30hmov [Dispdata+2],al mov [Dispdata+3],ahpop dxmov ax,0mov al,dhdiv blor al,30hor ah,30hmov [Dispdata+5],al mov [Dispdata+6],ahmov ax,0mov al,dldiv blor al,30hor ah,30hmov [Dispdata+8],al mov [Dispdata+9],ah pop axor al,30hjnz jieshu_getmov al,37hjieshu_get:mov [Dispdata+0eh],al mov [Dispdata_1+0eh],alpop bxpop axpop dxpop cxretgetdata endp;-----delay子程序-----delay proc nearpush bxpush axpush cxmov bl,75dwaitf2: mov cx,6632dwaitf1:in al,61hand al,10hcmp al,ahje waitf1mov ah,alloop waitf1dec blcmp bl,0jnz waitf2pop cxpop axpop bxretdelay endp;-----dec_1s子程序-----dec_1s proc nearpush axmov al,[Disptime+7]dec almov [Disptime+7],alcmp al,00hjnz bbmov [Disptime+7],09mov al,[Disptime+6]dec almov [Disptime+6],alcmp al,00hbb: jnz returnmov [Disptime+6],05hmov al,[Disptime+4]dec almov [Disptime+4],alcmp al,00hjnz returnmov [Disptime+4],09hmov al,[Disptime+3]dec almov [Disptime+3],alcmp al,00hjnz returnmov [Disptime+3],05hmov al,[Disptime]cmp al,00hjz b_4mov al,[Disptime+1]dec almov [Disptime+1],alcmp al,00hjnz returnmov [Disptime+1],03hmov al,[Disptime]dec almov [Disptime],aljmp returnb_4: mov al,[Disptime+1] dec almov [Disptime+1],alcmp al,00hjnz returnmov [Disptime],2hmov [Disptime+1],03hcall dec_1dsetf 0bh,16hmov dx,offset dispdatacall outputreturn: pop axretinc_1s endp;-----output子程序----- output proc nearpush axmov ah,09hint 21hpop axretoutput endp;-----change_gty子程序----- change_gty proc nearpush axpush bxpush cxpush dxmov ah,0hmov al,[Dispdata+3]sub al,32hmov bx,365dmul bxmov cx,axmov al,[Dispdata+5]sub al,30hmov bl,10dmul bladd al,[Dispdata+6]sub al,30hcmp al,1hjz next1add cx,31dcmp al,2hjz next1cmp al,3hjz next1add cx,31dcmp al,4hjz next1add cx,30dcmp al,5hjz next1add cx,31dcmp al,6hjz next1add cx,30dcmp al,7hjz next1add cx,31dcmp al,8hjz next1add cx,31dcmp al,9hjz next1add cx,30dcmp al,0ahjz next1add cx,31dcmp al,0bhjz next1add cx,30dnext1: mov al,[Dispdata+8] sub al,30hmov bl,10dmul bladd al,[Dispdata+9]sub al,31hmov ah,0hmov ax,cxsub ax,21cmp ax,0jns goonadd cx,8hmov ax,cxmov bl,0ahdiv blor ax,3030hmov [Dispdata_1+8],almov [Dispdata_1+9],ahgoon: pop dxpop cxpop bxpop axretchange_gty endp;-----kaiji子程序-----kaiji proc nearclearscreen 05h,0fh,13h,40h,30h clearscreen 06h,11h,12h,3eh,0fhretkaiji endp;-----disp子程序-----disp proc nearmov al,[Disptime]mov bl,12hmul blmov dx,offset shuziadd dx,axcall outputsetf 08h,13hadd dx,06hcall outputsetf 09h,13hcall outputsetf 07h,16hmov al,[Disptime+1] mul blmov dx,offset shuzi add dx,axcall outputsetf 08h,16hadd dx,06hcall outputsetf 09h,16hadd dx,06hcall outputsetf 08h,1ahmov dl,1Ehmov ah,02hint 21hsetf 09h,1ahmov dl,1fhint 21hsetf 07h,1chmov al,[Disptime+3] mul blmov dx,offset shuzi add dx,axcall outputsetf 08h,1chadd dx,06hcall outputsetf 09h,1chadd dx,06hcall outputsetf 07h,1fhmov al,[Disptime+4] mul blmov dx,offset shuzi add dx,axcall outputsetf 08h,1fhadd dx,06hcall outputsetf 09h,1fhadd dx,06hcall outputsetf 08h,23hmov dl,1Ehmov ah,02hint 21hsetf 09h,23hmov dl,1fhint 21hsetf 07h,25hmov al,[Disptime+6]mul blmov dx,offset shuziadd dx,axcall outputsetf 08h,25hadd dx,06hcall outputsetf 09h,25hadd dx,06hcall outputsetf 07h,28hmov al,[Disptime+7]mul blmov dx,offset shuziadd dx,axcall outputsetf 08h,28hadd dx,06hcall outputsetf 09h,28hadd dx,06hcall outputretdisp endpcode endsend main。