ImageVerifierCode 换一换
你正在下载:

2秒表.docx

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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

2秒表.docx

1、2秒表目 录摘要-3一、设计内容与要求-3二、设计原理 -32.1 原理概述-32.2 延时原理-32.3 显示字符及字符串原理-32.4 压缩BCD转为ASCII原理-42.5 动态扫描键盘原理-4三、程序流程图 -43.1 主程序流程图-43.2 压缩BCD转ASCII码子程序流程图-63.3 延时子程序流程图-7四、程序代码及效果图 -84.1 程序代码-84.2 效果图-134.3 效果说明-13五、程序调试 -145.1 取键值部分程序调试-145.2 延时程序调试-145.3 效果图形调试-145.4 加颜色调试-145.5 总体调试-14六、设计心得 -14七、参考资料-15摘

2、要本设计用软件实现了电子秒表的功能。在运用汇编语言这个工具下在PC机上实现的,并且在实现基本功能的基础上我们为秒表加框,做了修饰,并在其下方动态显示“STOPWATCH!”字样。启动停止等按键数字采用彩色字,两侧边框着色,这样使得秒表显得美观。关键词:电子秒表(stopwatch),8086,汇编语言一、设计内容与要求设计要求:1 具有秒和百分之一秒计时,并显示在屏幕中央2 秒表具有启/停3 秒表具有复位功能在此基础上,我们为秒表加框,加色,动态显示“STOPWATCH!”,二、设计原理2.1 原理概述在main程序控制的前提下,我们用INT 16H的1号功能和0号功能实现键值的输入,通过调用

3、延时程序实现百分之一秒的定时,通过INT 10H的2号功能实现光标定位,通过INT 21H的2号功能实现字符的输出,通过调用INT 21H的9号功能实现字符串的输出。2.2 延时原理计算机在执行指令时,各种操作都按照指令执行,但在想顺序控制器那样由计算机发出指令控制外部设备时,由于外部设备所具有的机械惯性或其他原因,需要在计算机发出命令后有规律的延迟或等待一段时间。这类延迟可以用硬件演示完成,但在本次设计中,没有硬件定时器的支持,只能靠软件实现延时,即通过可控制的循环来占用CPU的时间来实现延时,这种延时方法不够精确,且会占用大量的CPU资源,使CPU的效率降低,因此,编制延时程序应尽量采用较

4、少的指令,节约存储器。我们发现运行秒表程序后,PC机的速度明显变慢。本设计的技术参数不可能与实际的秒表相比,延时函数名为TIME,是长延时程序。运用内外两层循环,外循环由AX中的数值来控制,内循环用CX中的数值来控制。实现不同延时的控制,AX和CX值需要通过反复比较调试确定,我们确定AX的值为0093H,CX的值为0FFFCH。2.3 显示字符及字符串原理我们显示字符和字符串的子程序没有使用课本上的函数,而是运用老师刚讲的宏定义来实现,由于我们还要显示图形,所以这样的做法显得必要而且更恰当。我们的设计中的显示均先定位光标后显示完成的。定位光标用INT 10H的2号功能,DH中存的中行号,DL中

5、存的是列号,BH中存页号。整个屏幕有24行79列,对应的16进制为:左上角为(0,0),右下角为(18,4F)。显示彩色字符用INT 10H的9号功能,AL 中存放要显示字符的ASCII码。显示字符串用INT 21H的9号功能,DX中存要显示的字符串的偏移地址。由于要显示的字符和字符串较多和出于程序的精简考虑,我们把显示字符定义为DISCHAR宏,显示字符串定义为DISSTRING宏。2.4 压缩BCD转为ASCII原理本段程序是参考教材的。先将压缩BCD码的高4位取出,右移四位后,与30H相或,存到相应的内在单元。然后将低4位取出,与30H相或,存到下一内存单元。 2.5 显示字符及字符串原

6、理由于INT 16H的1 号功能只能读键盘缓冲区从而判断有无键值输入,无自动清缓冲区功能,我们运用INT 16H的1 号和0号功能来实现动态扫描键盘。由1号功能判断有无键按下,如果有键按下,则ZF=0,跳转到相应的位置调用0号功能来读键值,相应键值的ASCII码被存的AL中。如果没有键按下,刚继续循环。从而实现动态扫描键盘。三、程序流程图3.1 主程序流程图主程序流程图如下:3.2 压缩BCD转ASCII码子程序流程图压缩BCD转ASCII码子程序流程图如下:3.3 延时子程序流程图延时子程序流程图如下:四、程序代码及效果图4.1 程序代码DATA SEGMENT ;数据段 DIS_BUF D

7、B ?,?,:,?,?,.,?,?,?,?,?,? ;显示缓冲区,最后一字节用来存$SOP DB 1 ;运行标志位(START OR PAUSE) ;0为运行,1为停止FUN1 DB :START/PAUSE$FUN2 DB :RESET$FUN3 DB :EXIT$NUM1 DB 1NUM2 DB 0NUM3 DB 2DESI DB Design by:$CHY DB Ocean & Guan Shihu$DAT DB Date:22th,Dec,2008$WORDS DB S t o p w a t c h!$SPACE DB $LINER DB - $DATA ENDSSTA SEGME

8、NT PARA STACK STACKSTAPN DB 100 DUP (?)TOP EQU LENGTH STAPNSTA ENDSCODE SEGMENTMAIN PROC FAR ASSUME CS:CODE,DS:DATA,SS:STA MOV AX,DATA MOV DS,AX MOV AX,STA MOV SS,AX MOV AX,TOP MOV SP,AX XOR CL,CL ;CL中存放分清零 XOR DH,DH ;DH中存放秒 清零 XOR DL,DL ;DL中存放百分之一秒 清零DISCHAR MACRO X,Y ;显示彩色字符用的宏,X的位置,Y是ASCII MOV AH

9、,02 ;中断10H的2号置光标位功能 MOV BH,0 MOV DX,X ;定位,DH是行,DL是列 INT 10H MOV AH,9 ;10H的9号功能 MOV AL,Y MOV BH,0 MOV BL,0CAH ;颜色 MOV CX,1 INT 10H ENDMDISSTRING MACRO X,Y ;显示字符串的宏 MOV AH,02 XOR BH,BH MOV DX,X ;定位,DH是行,DL是列 INT 10H MOV DX,OFFSET Y ;显示字符串 MOV AH,09H INT 21H ENDM PUSH AX PUSH DX DISSTRING 111EH,WORDS D

10、ISSTRING 091BH,LINER ;显示边框 DISSTRING 0F1BH,LINER DISCHAR 0A1BH,- DISCHAR 0B1AH,- DISCHAR 0C19H,- DISCHAR 0D1AH,- DISCHAR 0E1BH,- DISCHAR 0A33H,- DISCHAR 0B34H,- DISCHAR 0C35H,- DISCHAR 0D34H,- DISCHAR 0E33H,- ;显示边框结束 POP DX POP AXGET_CHAR: MOV AH,1 ;扫描键盘,检测是否有键按下 INT 16H JNZ NEXT ;有则跳到NEXT MOV AL,SO

11、P ;没有键按下,则判断SOP CMP AL,1 JNE START ;SOP中的内容是0就开始,1就暂停 JMP PAUSE NEXT: MOV AH,0 INT 16H CMP AL,1 JNE RESET_TEST MOV AL,SOP ;取到的是1,01与SOP的内容异或存放 XOR AL,01H MOV SOP,AL CMP AL,1 ;AL中的内容是0就开始,1就暂停 JNE START JMP PAUSERESET_TEST: CMP AL,0 ;判断是按下的是否是0 JNE EXIT_TESTRESET: XOR CX,CX ;复位 XOR DX,DX CMP SOP,0 ;判

12、断此时状态:运行还是暂停 JNE NEXT1 MOV SOP,1NEXT1: JMP DISPYEXIT_TEST: CMP AL,2 ;检测是否是2 JNE DISPYEXIT: MOV AH,4CH ;退出 INT 21HPAUSE: JMP DISPY ;暂停START: CALL TIME ;运行 MOV AL,DL ;百分之一秒加一 ADD AL,1 DAA ;压缩BCD调整 MOV DL,AL ;判断是否到一秒 JNC DISPY PUSH AX PUSH DX TEST DH,01H JE WOR DISSTRING 111EH,SPACE DISSTRING 0F1BH,LIN

13、ER JMP DISSPACE WOR: DISSTRING 111EH,WORDS ;显示字符串STOPWATCH DISSTRING 0F1BH,SPACE DISSPACE: POP DX POP AX MOV DL,0 MOV AL,DH ADD AL,01H DAA MOV DH,AL CMP AL,59H ;判断是否到一分 JNA DISPY MOV DH,0 MOV AL,CL ADD AL,01H DAA MOV CL,AL CMP AL,59H ;判断是否到一小时 JNA DISPY MOV CL,0 DISPY: ;显示,将各位数据转换为ASCII PUSH AX PUSH

14、 BX PUSH CX LEA BX,DIS_BUF ;取显示缓冲区偏移地址 MOV AL,CL CALL TRAN2 INC BX INC BX MOV AL,DH CALL TRAN2 INC BX INC BX MOV AL,DL CALL TRAN2 INC BX MOV AL,$ ;结束符 MOV BX,AL ;定位光标至屏幕中央 PUSH DX DISSTRING 0305H,FUN1 ;显示字符串:START/PAUSE DISSTRING 0323H,FUN2 ;显示字符串:reset DISSTRING 0343H,FUN3 ;显示字符串:quit DISSTRING 143

15、AH,DESI ;显示字符串:Design by DISSTRING 153AH,CHY ;显示字符串:chy DISSTRING 163AH,DAT ;显示字符串:date DISCHAR 0304H,NUM1 ;显示数字 DISCHAR 0322H,NUM2 DISCHAR 0342H,NUM3 DISSTRING 0C23H,DIS_BUF ;显示字符串,计时时间 POP DX POP CX POP BX POP AX JMP GET_CHARMAIN ENDP ;主函数结束TRAN2 PROC ;压缩BCD转为ASCII子程序 PUSH CX MOV CL,AL SHR AL,1 SH

16、R AL,1 SHR AL,1 SHR AL,1 OR AL,30H MOV BX,AL INC BX MOV AL,CL AND AL,0FH OR AL,30H MOV BX,AL POP CX RETTRAN2 ENDPTIME PROC ;延时子程序 PUSH CX PUSH AX MOV AX,00FFH ;使用循环嵌套,AX控制外循环,CX控制内循环INDELAY: MOV CX,0FFFFH ;实现精确定时OUTDELAY: DEC CX JNZ OUTDELAY DEC AX JNZ INDELAY POP AX POP CX RETTIME ENDPCODE ENDS ;代码

17、段结束 END MAIN 4.2 效果图程序的实际效果图如下:4.3 效果说明 屏幕上边是相关的使用说明,其中:1键实现开始/暂停功能, 0键实现复位功能, 2键实现退出功能。 秒表现是在框中央。 右下角是设计成员信息及设计日期。 中央下边是计时过程中随秒显示的秒表名称,启动前显示,启动后每隔一秒显示一次。 下边边框同样启动时显示,启动后每个一秒显示一次,而且和秒表名称不同时显示。 数字0,1,2和两侧边框彩色效果,生动立体。 五、程序调试我们是使用 emue8086这个软件来做的调试,这个软件是可视化的调试工具,比DEBUG的功能强大得多,而且是可视化界面,使用非常方便。5.1 取键值部分程

18、序调试这部分可以说是整个工程的关键,开始时,使INT 21H的有关功能但不能实现动态扫描。光标不动。通过上网查资料,参考有关的实验课教程,才尝试使用INT 16H的有关功能,我们试验了很多次才成功用到0号和1号功能配合完成这一功能。5.2 延时程序调试延时程序由于不同的CPU的时钟频率不同而需要对相应的AX和CX作修改。我们通过修改延时程序中AX和CX的值,与秒表时间相对比,不断改正,尽量减少误差。这一部分工作比较简单,但比较机械,需要耐心。经过耐心的调试,最终我们秒表的误差被控制在0.1秒之内。5.3 效果图形调试效果图的其实是很伟大的工程,开始想了很多复杂的图案,后来发现实现很困难。我们知

19、道屏幕是有每个点坐标组成,所以我们想到了用坐标纸描点就坐标的方法。先在坐标纸上画出图形,然后把每个点要显示的符号和坐标提取出来。在程序中用宏定义了的函数实现,例如,显示上边框,由于是字符串所以使用DISSTRING实现,具体:DISSTRING 091BH,LINER。5.4 加颜色调试 起初我们是没有打算用宏定义的,因为当时老师还没有讲到,更改颜色总是光标不扫描,或者计时部分显示会有错误,后来发现必要的现场保护很重要,而且如果用了宏,就不用每次显示字符都先写一遍一样的程序段,很方便。在我们程序中除了用宏来显示字符外,还用它来显示字符串。5.5 总体调试总体调试可是花不少工夫,需要耐心细致的检

20、查,调试,当程序编译链接都通过时,显示时却分和1/100秒同时跳动,有经过相当长的时间,终于发现是cx没有保护,这让我也深刻体会大保护的重要性。这一点很重要。六、设计体会在拿到课程设计任务后,首先有种无从下手的感觉,但经过查阅资料后,才发现原来不像想象种的那么难,关键是将整个程序模块化。延时模块,计时模块,转换模块,然后就是画流程图,我们大约用了两天的时间来研究流程图。再下来就是编写修改程序了。写程序时,我认为关键是认真和大局意识,知道自己在做哪部,需要那些子程序,需要怎样编写等等。我们首先编写的是计时模块,这个模块中逻辑复杂,设计过程中,不时翻阅课本,也为我们在实践中能更好的熟悉课本,学以致

21、用。程序中的延时,ASCII转换等都是参照现成的程序,但是显示是运用了宏定义,编制程序花费了一定的时间,尤其是构思上。而后经过几天的努力,程序编出来了。调试的过程更是比编写的时候更需要花时间,需要更大的耐心。特别是显色部分,我们从图书馆借的书上有关这方面的内容,但是仅仅是INT 10的功能号和入口参数,把这个加到实际程序困难也是不小,这让我认识到从理论到实践还是有很大的距离的,需要更多的努力。经过几个昼夜的奋战,程序终于可以准确的运行了,那一刻的喜悦真是谁有谁知道啊。经过这次课程设计,让我有一次深刻体会到了集体的力量大。我们小组两成员相互合作,相互配合终于做出了这个设计,学到了很多东西。对子程

22、序的调用也有了更深刻的理解,他会使程序看起来更有模块的感觉。再者就是应用了宏定义来显示字符和字符串,使程序变得更简洁。设计过程中要注意分工,不能一个人独干,负责事倍功半。在设计中同组者陈海洋同学主要负责延时模块和转换模块,调试时我们一起完成。他高效的按时完成工作是我们成功的重要保证。当然这次设计还有一些遗憾,本打算将闪动的内容着色,但INT 10的功能只有单个字符着色,我们尝试用循环来完成字符串的着色,但最终没有成功。课下,我们会再好好琢磨一下的。总之,这次设计报告,让我受益匪浅!七、参考资料Intel8086/8088系列微型计算机原理及接口技术,杨志坚主编,中国电力出版社,2003年9月微型计算机原理,张荣祥,山东工业大学出版社汇编语言程序设计,齐志儒,高福祥主编,东北大学出版社另外也参考了有关网站的资料,不再一一列举。

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

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