ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:18.99KB ,
资源ID:25716536      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25716536.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(微机课程设计.docx)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

微机课程设计.docx

1、微机课程设计PC机实时时钟的设计利用PC机现有的硬件和软件资源设计程序,以实现在显示器上显示XX(时):XX(分):XX(秒)。DATA SEGMENT COUNT DB 100;*初始的时间显示* TENH DB 1 HOUR DB 2: TENM DB 0 MINUTE DB 0 DB : TENS DB 0 SECOND DB 0,0DH,0DH,$;初始显示12:00:00;*初始的界面显示内容* ENTER1 DB -WELCOME-,0AH,0DH DB BaoYan 120900931 ,0AH,0DH DB All Rights Reserved ,0AH,0DH ENTER2

2、 DB The Time Now is ,10 DUP(0) ENTER3 DB Do you want to change the time? Y/N ENTER4 DB *-When finished changing the time,please press enter to continue-* ENTER5 DB *-You can press the left or right button for changing the hour ,minute -* ENTER6 DB *-or second that you want-*DATA ENDSSTACK SEGMENT PA

3、RA STACK STACK DB 256 DUP(0)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START PROC FAR PUSH DS MOV AX,0 PUSH AX;标准序返回DOS MOV AH,07H INT 21H ;初始时无显示,此时等待键盘输入,AL=字符的ASCII码,输入无回显;*将中断矢量压入堆栈保存* CLI ;关中断,防止有些硬件对中断的干扰 CLD ;使DF=0 MOV AX,0000H MOV DS,AX MOV SI,0020H ;DS:SI指向08H中断向量 LODSW ;取08中断入口

4、的偏移地址 MOV BX,AX LODSW ;取08中断入口的段地址 PUSH AX PUSH BX ;压栈保护 MOV AX,DATA MOV DS,AX ;建立数据段的可寻址性;*将中断向量压入新地址* MOV AX,0000H MOV ES,AX MOV DI,0020H ;ES:DS指向08中断向量存放地址 MOV AX,OFFSET TIMER STOSW ;写入偏移地址 MOV AX,CS STOSW ;写入段地址 MOV AL,00110110B ;8253初始化,0通道,方式3,二进制计数 OUT 43H,AL MOV AX,11932 ;计数初值=11932 OUT 40H,

5、AL MOV AL,AH OUT 40H,AL IN AL,21H ;读8259的中断屏蔽寄存器IMR PUSH AX ;压栈保护,AL的值为0FCH STI ;开中断 MOV AH,1 MOV CH,30H INT 10H ;置光标类型 CALL CLEAN_SCREEN ;清屏;*屏幕初始化* PUSH AX PUSH BX MOV AX,0600H ;AH=06(滚动)AL=00(全屏空白) MOV BH,000CH ;设置背景颜色(3)和前景颜色(e) SUB CX,CX ;从0行0列开始 MOV DX,8F8FH ;到8F行8F列 INT 10H POP AX POP BX;*显示E

6、NTER1的内容* MOV DH,1 ;行号 MOV DL,0 ;列号 MOV BH,0 ;页号 MOV AH,2 ;置光标位置 INT 10H MOV CX,199 MOV SI,OFFSET ENTER1SHOW: MOV AH,0EH ;显示字符(光标前移 ) ,al 字符, bl 前景色 MOV AL,SI INT 10H INC SI LOOP SHOW;*显示ENTER2的内容* PUSH ES PUSH BP PUSH BX PUSH CX PUSH DX;保护现场,让寄存器压栈(后同) MOV BP,OFFSET ENTER2;取ENTER2的偏移地址(后同) MOV AX,S

7、EG ENTER2;取ENTER2的段地址(后同) MOV ES,AX;ES:BP为欲显示的字符串地址(后同) MOV CX,60;假设字符串长度为60(后同) MOV BX,0007H;BH=00,为页号,BL=07H为显示的字符串属性,为银白色(后同) MOV DX,0600H;起始行为06,起始列为00(后同) MOV AL,1 MOV AH,13H INT 10H POP DX POP CX POP BX POP BP POP ES;*显示ENTER3的内容* PUSH ES PUSH BP PUSH BX PUSH CX PUSH DX MOV BP,OFFSET ENTER3 MO

8、V AX,SEG ENTER3 MOV ES,AX MOV CX,40 MOV BX,0007H MOV DX,0C00H MOV AL,1 MOV AH,13H INT 10H POP DX POP CX POP BX POP BP POP ES;*显示ENTER4的内容* PUSH ES PUSH BP PUSH BX PUSH CX PUSH DX MOV BP,OFFSET ENTER4 MOV AX,SEG ENTER4 MOV ES,AX MOV CX,48H MOV BX,0007H MOV DX,0D00H MOV AL,1 MOV AH,13H INT 10H POP DX

9、POP CX POP BX POP BP POP ES;*显示ENTER5的内容* PUSH ES PUSH BP PUSH BX PUSH CX PUSH DX MOV BP,OFFSET ENTER5 MOV AX,SEG ENTER5 MOV ES,AX MOV CX,4DH MOV BX,0007H MOV DX,0E00H MOV AL,1 MOV AH,13H INT 10H POP DX POP CX POP BX POP BP POP ES;*显示ENTER6的内容* PUSH ES PUSH BP PUSH BX PUSH CX PUSH DX MOV BP,OFFSET E

10、NTER6 MOV AX,SEG ENTER6 MOV ES,AX MOV CX,1FH MOV BX,0007H MOV DX,0F00H MOV AL,1 MOV AH,13H INT 10H POP DX POP CX POP BX POP BP POP ES FOREVER: MOV DL,0FFH MOV AH,06H INT 21H ;判断键盘是否有输入 MOV DL,AL MOV AH,02H INT 21H ;显示键盘输入的字符 JZ DISP ;无键按下则转显示DISP CMP AL,20H ;判断按键是否为空格 JZ EXIT1 ;若为空格,则退出程序 CMP AL,Y J

11、Z CHANGE CMP AL,y JZ CHANGE ;判断是否为“Y”或者“y”,若是则转到修改函数;*显示时间模块*DISP: PUSH ES PUSH BP PUSH BX PUSH CX PUSH DX MOV BP,OFFSET TENH MOV AX,SEG TENH MOV ES,AX MOV CX,8 ;显示从TENH开始的八个字符串,即时间 MOV BX,000CH MOV DX,0923H MOV AL,1 MOV AH,13H INT 10H POP DX POP CX POP BX POP BP POP ES MOV BH,0 MOV DX,0C2AH MOV AH,

12、02H INT 10H;将光标置于0CH行的2AH列 MOV AL,SECOND ; 取秒单元值WAITCHA: CMP AL,SECOND ;判断秒的数值是否改变 JZ WAITCHA ;没有改变则继续等待 JMP FOREVER ;改变则转FOREVEREXIT1: JMP EXIT;*修改时间模块*CHANGE: MOV DX,0923H ;将光标位置锁定到时钟的第一位CHANGE1:MOV AH,02H INT 10H ;锁定光标位置,DH为行,DL为列 MOV AL,0 MOV CX,DX SUB CX,0923H ;判定当前光标在时钟的第几位,存在CX里 LEA SI,TENH A

13、DD SI,CX ;将SI指向当前光标位置所显示存储单元,以便进行修改 MOV AH,0 INT 16H ;读取键盘按键信息,存在AL里,但并不回显 CMP AL,0DH ;0DH为回车的ASCII码,当键盘敲入回车时,则继续显示时间 JZ FOREVER CMP AH,4DH ;判断是否按了右方向键 JZ WRI2 ;若按了右方向键则转WRI2 CMP AH,4BH ;判断是否按了左方向键 JZ MOVE2 ;若按了左方向键则转MOVE2 CMP AL,30H JB CHANGE1 ;输入小于0作无效处理;*对输入的时间值进行判断模块*HOUR_H: CMP CX,0 ;对小时高位输入判断

14、JNZ HOUR_L ;判断是否是小时的高位,若不是则指向小时的低位 CMP AL,2 ;将输入小时的高位的值判断 JA CHANGE1 ;若大于2,无效,转到CHANGE1 JMP WRI1 ;否则将其写入(后同)HOUR_L: CMP CX,1 ;对小时低位输入判断 JNZ MINU_H ;判断是否是小时的低位,若不是则指向分钟的高位 MOV BL,TENH CMP BL,2 ;判断高位是否为2 JZ HOUR_2 ;高位是2则转向 HOUR_2 CMP AL,9 JA CHANGE1 ;高位不为2时,低位可以输入小于等于9的数 JMP WRI1HOUR_2: CMP AL,3 ;高位为2

15、时,低位只能输入小于等于3的数 JA CHANGE1 JMP WRI1MINU_H: CMP CX,3 ;对分钟高位输入判断 JNZ MINU_L ;判断是否是分钟的高位,若不是则指向分钟的低位 CMP AL,5 ;将输入的数与5比较 JA CHANGE1 ;若大于5无效 JMP WRI1MINU_L: CMP CX,4 ;对分钟低位输入判断 JNZ SEC_H ;判断是否是分钟的低位,若不是则指向秒钟的高位 CMP AL,9 ;将输入分钟的低位与9比较 JA CHANGE1 ;大于9无效 JMP WRI1SEC_H: CMP CX,6 ;对秒钟高位输入判断 JNZ SEC_L ;判断是否是秒

16、钟的高位,若不是则指向秒钟的低位 CMP AL,5 ;将输入的数与5比较 JA CHANGE1 ;若大于5无效 JMP WRI1SEC_L: CMP CX,7 ;对秒钟低位低位判断 JNZ CHANGE1 ;光标不在时钟上时,输入不回显也不处理 CMP AL,9 ;将输入分钟的低位与9比较 JA CHANGE1 ;大于9无效WRI1: MOV SI,AL ;将输入的字符存到对应内存单元 MOV AH,0EH ;同时将输入的字符显示在当前位置 INT 10H JMP WRI2 WRI2: MOV AL,SI+1 ;按下右方向键,则使偏移量加1 CMP AL,: ;当下一位为“:”时,则对DX加两

17、次,否则跳过它 JNZ MOVE1 INC DXMOVE1: INC DX ;每修改一位,把光标向后移一位 JMP CHANGE1MOVE2: MOV AL,SI-1 ;当输入左方向键时,使偏移量减1 CMP AL,: ;当下一位为“:”时,则对DX减两次,否则跳过它 JNZ MOVE3 DEC DXMOVE3: DEC DX ;每修改一位,把光标向前移一位 JMP CHANGE1 EXIT: CLI ;有空格键按下时退出,关中断 CLD ;清方向标志位 POP AX OUT 21H,AL ;恢复IMR MOV AL,36H ;8253初始化,55ms OUT 43H,AL MOV AL,0

18、OUT 40H,AL OUT 40H,AL;*恢复中断向量* MOV AX,0 MOV ES,AX MOV DI,4*8 POP AX STOSW POP AX STOSW STI RETSTART ENDP ;*时间进位模块*TIMER PROC FAR PUSH AX DEC COUNT JNZ L2 ;不到一秒转L2 MOV COUNT,100;到1秒,重置COUNT,并修改时间 INC SECOND CMP SECOND,9 JLE TIMEXT;如果小于等于9,转至TIMEXT(后同) MOV SECOND,0 INC TENS CMP TENS,6 JL TIMEXT MOV TE

19、NS,0 INC MINUTE CMP MINUTE,9 JLE TIMEXT MOV MINUTE,0 INC TENM CMP TENM,6 JL TIMEXT MOV TENM,0 JMP L3 L2: JMP TIMEXTL3: MOV AL,HOUR AND AL,0FH MOV AH,TENH AND AH,0FH MOV CL,4 ROR AH,CL OR AL,AH ;AH放到AL高四位 ADD AL,1 DAA CMP AL,24 JL L1 ;小于24转L1,否则置0 MOV TENH,0 MOV HOUR,0 JMP TIMEXT L1: MOV AH,AL AND AL

20、,0FH OR AL,30H MOV HOUR,AL MOV CL,4 ROR AH,CL AND AH,0FH OR AH,30H MOV TENH,AHTIMEXT : ;中断结束 MOV AL,20H OUT 20H,AL POP AX IRETTIMER ENDP;*清屏函数*CLEAN_SCREEN PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX MOV AH,6 ; 屏幕初始化或向上滚动 MOV AL,0 ; 清屏 MOV BH,0 ; 滚入行属性 MOV CH,0 ; 左上角行号 MOV CL,0 ; 左上角列号 MOV DH,50 ; 右下角行号 MOV DL,90 ; 右下角列号 INT 10H MOV DX,6100H MOV AH,01H INT 10H POP DX POP CX POP BX POP AX RETCLEAN_SCREEN ENDPCODE ENDSEND START

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1