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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

汇编语言课程设计电子闹钟教学总结.docx

1、汇编语言课程设计电子闹钟教学总结电子闹钟一、 课题内容和要求题目描述: 利用汇编语言实现一个可以在显示器上显示时、分、秒的电子时 钟,并能提供整点报时功能。基本要求:(1)设计一个基本的具有显示时、分、秒的电子时钟。(2)到整点或预定的报警时间,能够以不同的音乐进行报时,可以 自行设置闹钟报警时间;(3)实物演示时要求讲出程序原理和设计思想;(4)程序运行良好、界面清晰。提高要求:设计一个具有钟面、分针、秒针的指针式钟表,在圆盘上有均匀分布 的 60 根刻度,对应小时的刻度用不同颜色的长刻度区别,并且将 12、 3、 6、 9 对应的拉丁文绘制于表盘外。设计提示:(1)指针式钟表的绘制。将屏幕

2、设置成图形显示方式,通过画点、画 线,画圆等基本程序完成钟表的绘制。 表盘圆周上刻度线段两端点坐标计算是钟 表绘制的核心部分。(2)秒针、分针、时针的转动。是经过一定的延时时间,通过在下 一位置重新画一个,在原来的位置用背景色覆盖的方法实现。(3)音乐的演奏。利用CPU支持的外围电路8254与8255,通过汇 编程序改变 8255 的 PB0, PB1 口,接通扬声器,使得计算机能够发出一定频率 的声音, 同时通过 8254的与 8255连接的 2号计数器控制指定频率, 从而达到控 制扬声器的音乐的效果。 通过建立适当的延时程序达到一定时间后则改变 2号计 数器产生的方波的频率,实现音乐程序的

3、演奏。二、需求和思路分析 经分析本次程序设计的主要内容主要分为如下的几个模块: 当前时间的获取并显示, 码制转换,设定闹钟报鸣的时间, 不同频率的闹 铃声,钟表的绘制和并实现动态等模块。 其中钟表的绘制和动态走动部分比较难 是本次课程设计的提高部分, 且改模块可单独形成一个模块, 所以放到最后进行 考虑1时间的获取可以用INT 21H的2CH功能,该功能调用DOS寸间调用功能, 功能号:2CH,小时,分钟,秒数分别保存在,保存的形式是以二进制的形式,故显 示时要2码制转化利用ASCII码与二进制码的关系 ASCII=进制+30H3闹钟鸣叫主要利用8254的二号计数器和8255的PB0和PB1来

4、设定4 闹钟的表盘,指针的绘制,并实现时针,分针,秒针的走动。主要通过 过图形的画点进行操作,并通过在固定的区域内不断的刷屏来实现。三、概要设计(一)算法设计及重要程序流程图1) 程序整体流程check设定完毕判断键入 的选项显示提示信息 ,并等待键入 选择结束 退出整点or定 占八、始 displa是否有 键入?取出闹钟定时时间 与当前时间比较call bctd进行二进制转ASCII取当前系统时 间 int 21h 的 2ch功能call editmusic 设 定闹钟音乐种类键入ESC退 出清屏程序clear打开扬声 器鸣叫call edittime 设定闹钟时间2)edittime子程序

5、流程图2) editmusic子程序设定不同的 鸣叫频率3)打开和关闭扬声器此处重要用到了 8254和8255的相关知识,书中P238有相关代码首先,应该读出8255的PE端口当前的状态,将PB0和PB份别置1,以读修改写 的方式修改PB0和PB1接通扬声器。其次,利用8254的2号计数器产生XXX Hz的方波,此处计数初值利用公式N=fclk1 /fout2对8254先写低8位,再写高8位,out2输出方波8254设定计数初值CALL CLOSE8254设定计数初值最后,将8255的PB0和PB1回复位00,用AND AL,11111100昧修改4)BCT子程序的流程图该子程序程序功能主要是

6、实现二进制转化成相应 BC码AX输入参数AX输出参数,存放调整过的BC码(二)变量名声明DATA SEGMENTMESS1 DB * *ASM ASSIGNMENT* * ,OAH,ODHDB ,0AH,0DHDB * ELECTRONIC CLOCK* * ,0AH,0DHDB ,0AH,0DHDB ,0AH,0DHDB *presS C OR C TO EDIT THE ALARM TIME PRESS M OR M TO CHANGESOUND!* ,0AH,0DHDB ,0AH,0DHDB *press ESC BUTTON TO EXIT* ,0AH,0DH,$TN DB PLEAS

7、E INPUT THE NEW TIME (HH:MM:SS):,0DH,0AH,$MUSICMESS DB PLEASE CHOOSE THE TYPE OF MUSIC:1(FAST) 2(MIDDLE)3(SLOW),0DH,0AH,$MESS2 DB *TIME IS:,0AH,0DH,$T_BUFF DB 40 ; 在数据段开一段时间显示缓冲区DB ?DB 40 DUP (?)TEMPHOR DB ? ; 存放键入的定时时间的小时TEMPMIN DB ? ; 存放键入的定时时间的分钟TEMPSEC DB ? ; 存放键入的定时时间的秒数MUSIC DW 800 ; 存放默认音乐的频率

8、数DATA ENDSSTACK SEGMENTDB 100 DUP(?)STACK ENDS四、详细设计课题任务实现的源程序 (可以是一组源程序, 每个功能模块采用不同的函数 实现),源程序要按照写程序的规则来编写。 要结构清晰, 重点函数的重点变量, 重点功能部分要加上清晰的程序注释。(一)1 主函数代码CODE SEGMENTASSUME CS:CODE,SS:STACK,DS:DATA ; 确定各个逻辑段的类型START:MOV AX,DATAMOV DS,AXCALL CLEAR ; 调用清屏子程序DISPLAY: ; 时间显示部分MOV AX,DATAMOV DS,AXMOV BX,

9、OFFSET T_BUFF ; 送T_BUFF 的偏移地址到 BXMOV AH,2CH ;调用DOS时间调用功能,功能号:2CH,小时,分钟,秒数分别保存在CH,CL,DH中INT 21H ; 判断时间是否相等SUB DH,1 ;秒钟 +1修正CALL CHECKMOV AL,CH ;小时数设定MOV AH,0CALL BCTD ;调用进制转换子程序 二进制转BCD码子程序PUSH AXAND AL,0F0H ;选取AL高四位MOV CL,4 ; 设置右循环的次数ROL AL,CL ; 右循环OR AL,30H ;加30H 得到 ACSII 码MOV BX,AL ;将得到的结果送到 T_BUF

10、F缓冲区INC BX ;BX 自加1,指针指向下一个缓冲区的下一个地址POP AXAND AL,0FH ; 选取低四位OR AL,30HMOV BX,AL ; 将转换后的低四位值送入缓冲区的第二个地址 INC BXMOV AL,: ; 显示分隔符号MOV BX,ALINC BXMOV AH,2CHINT 21HMOV AL,CL ; 分钟数设定MOV AH,0CALL BCTDPUSH AXAND AL,0F0HMOV CL,4ROL AL,CLOR AL,30HMOV BX,ALINC BXPOP AXAND AL,0FHOR AL,30HMOV BX,ALINC BXMOV AL,: ;

11、显示分隔符号MOV BX,ALINC BXMOV AH,2CH ; 秒设定INT 21HMOV AL,DHMOV AH,0CALL BCTDPUSH AXAND AL,0F0HMOV CL,4ROL AL,CLOR AL,30HMOV BX,AL INC BXPOP AXAND AL,0FH OR AL,30HMOV BX,AL INC BXMOV AL,$ ; 将字符串的结束位送至显示缓冲区的最后一位MOV BX,ALPUSH BX ;置光标位置,AH=2,BH=0,DH跟DL分别为行号与列号,并入栈保护BXMOV AH,2 ;01 用于此程序快下边的 在下面的两个置光标位置MOV BH,0

12、MOV DH,17MOV DL,41INT 10HPOP BX送T_BUFF偏移地址到DX,并调用DOS显示功能,功能号为9PUSH BXMOV AH,2MOV BH,0MOV DH,0MOV DL,0INT 10H; 置光标位置POP BXLEA DX,MESS1MOV AH,9; 显示 MESS1INT 21HPUSH BX ;置光标位置MOV AH,2MOV BH,0MOV DH,17MOV DL,21INT 10HPOP BXLEA DX,MESS2MOV AH,9CALL DELAY1MOV AH,1 ;调用键盘I/O中断功能号1,获取键值到ALINT 16HCMP AL,C ;是C

13、键,转到时间修改程序JE EDITTIMECMP AL,C ;是C键,转到时间修改程序JE EDITTIMECMP AL,M;是M键,转到闹铃种类设定程序JE EDITMUSICCMP AL,M;是M键,转到闹铃种类设定程序JE EDITMUSICCMP AL,1BHJZ QUIT ;是ESC键,退出程序JMP DISPLAYQUIT:MOV AH,4CH ; 程序终止功能号INT 21HRET2 功能函数代码1)二进制转BCD码子程序BCTD PROC NEAR ;二进制转BCD码子程序;AX 输入参数;AX输出参数,存放调整过的BCD码MOV DX,AXMOV AX,0MOV CX,16

14、; 设循环次数BCTD1:CLC ; 清进位标志 CRCL DX,1 ; 通过进位的循环右移ADC AL,AL ; 带进位加法DAA ; 加法的十进制调整XCHG AL,AH ; 交换高、低八位ADC AL,ALDAAXCHG AL,AHLOOP BCTD1 ;循环次数保存在CX里RETBCTD ENDP2) 清屏CLEA子程序CLEAR PROC NEARPUSH AX ; 入栈保护现场PUSH BXPUSH CXPUSH DXMOV AX,0600H ;AH=06(滚动)AL=00(全屏空白)MOV BH,3EH ; 设置背景颜色 (2)和前景颜色 (E) SUB CX,CXMOV DX,

15、5F5FHINT 10HPOP DX ;出栈恢复现场POP CXPOP BXPOP AXRETCLEAR ENDP3) 精确延迟时间子程序 delay1DELAY1 PROC ; 精确延迟时间子程序MOV DX,04FFH ; 循环次数UP: XOR CX,CXA: NOPLOOP ADEC DXJNZ UPRETDELAY1 ENDP4) 设定定时时钟EDITTIME子程序EDITTIME PROC ; 时间修改子程序PUSH AX ; 入栈保护数据PUSH BXPUSH CXPUSH DXPUSHFMOV DX,OFFSET TN ; 显示修改时间的格式提示MOV AH,09HINT 21

16、HMOV DX,OFFSET T_BUFF ; 数据缓冲区的数据输入MOV AH,0AHINT 21HAND DX,0HLEA BX,T_BUFFINC BXINC BXINC BXMOV DH,BXSUB DH,30HINC BXMOV DL,BXSUB DL,30HMOV CL,10MOV AL,DHMUL CLADD AL,DLMOV CH,ALMOV TEMPHOR,ALINC BXINC BXMOV DH,BXSUB DH,30HINC BXMOV DL,BXSUB DL,30HMOV CL,10MOV AL,DHMUL CLADD AL,DLMOV CL,ALMOV TEMPMIN

17、,ALINC BXINC BXMOV DH,BXSUB DH,30HINC BXMOV DL,BXSUB DL,30HMOV CL,10MOV AL,DHMUL CLADD AL,DLMOV DH,ALMOV TEMPSEC,ALPOPF ;出栈恢复数据POP DXPOP CXPOP BXPOP AXJMP STARTRETEDITTIME ENDP5)检验定时时间是否到CHEC子程序CHECK PROCPUSH AXPUSH BXCMPCH,TEMPHORJNECFCMPCL,TEMPMINJNECFCMPDH,TEMPSECJNEXIANGCF1CMPCL,0JNECFCMPDH,0JNE

18、CF;设置定点报时;设置整点报时XIANG:CALL OPENPUSH DXPUSH CXMOV DX,12HMOV AX,34DEHMOV CX,MUSICDIV CXOUT 42H,AL MOV AL,AHOUT 42H,ALMOV AH,1;打开扬声器INT 21HPOP CX;关闭扬声器POP DXCALL CLOSECF:POP BXPOP AXRETCHECK ENDP6)开启和关闭扬声器子程序open和closeOPEN PROCPUSH AXIN AL,61HOR AL,03HOUT 61H,ALPOP AXRETOPEN ENDPCLOSE PROCPUSH AXIN AL,

19、61HAND AL,0FCHOUT 61H,ALPOP AXRETCLOSE ENDP6)设置闹钟音乐种类子程序 editmusicEDITMUSIC PROCPUSH AX ; 入栈保护数据PUSH BXPUSH CXPUSH DXPUSHFMOV DX,OFFSET MUSICMESS ; 显示修改音乐的种类提示MOV AH,09HINT 21HMOV DX,OFFSET T_BUFF ; 数据缓冲区的数据输入MOV AH,0AHINT 21HAND DX,0H LEA BX,T_BUFFINC BXINC BXINC BXMOV AL,BXCMP AL,1JE M800TOCMP AL,

20、2 JE M1600TOCMP AL,3JE M3200TOM800TO: MOV MUSIC,800JMP TM1600TO: MOV MUSIC,1600 JMP TM3200TO: MOV MUSIC,3200T:POPF ;出栈恢复数据POP DXPOP CXPOP BXPOP AXJMP STARTRETEDITMUSIC ENDP五、测试数据及其结果分析1)运行画面2)测试结果A)键入c或C会出现提示“ PLEASE INPUT THE NEW TIME (HH:MM:SS” 再输入19: 08: 40。回车结束后,在19: 08: 40时,闹钟会鸣叫。B)键入m或 M会出现提示

21、“ PLEASE CHOOSETHE TYPE OF MUSIC:1(FAST) 2(MIDDLE) 3(SLOW) ”回车后会设定此时的闹铃鸣叫的频率六、调试过程中的问题本次程序设计中遇到了很多的问题,在设计每一个模块都有遇到了一定的难 度。首先关于,如何获得系统当前的时间,查阅了 INT 21H,21H的2CH可以返回的的CH CL,DH中分别为时,分,秒但是都是二进制的,故需要的 进行二进制的码制,写代码时发现通过寄存器移位的可以十分的节省寄存器 的使用数目。其次在写EDITTIME的子程序是发生了一个错误,很久才改正。我在使用21H的0AH向T_BUFFE内存空间输入字符串是,第一个位

22、置是初始化时设定的T_BUFFER勺最大长度,第二个位置是实际输入的长度,我于是 INC BX两次(BX发的T_BUFFER勺地址),以为能够得到我的输入的第一个字符,但是 结果是错误的,查了了很久才发现,其实我在调用该子程序前的一个控制已 经输入了一个字符,该字符已经存入了 T_BUFFER故此处应该在INC BX。 在 EDITMUSIC 的子程序中同样会遇到类似问题。在编写程序中由于经常的要使用寄存器,有时没有将其压栈保存,导致 寄存器的值发生了不可知的变化。所以一定要注意压栈的使用在实验中使用 MASM 开发环境,因为开始发现未来汇编的 JNE 等功能 的转移范围有限制,但是在 MAS

23、M 中转移的范围很大。本程序并没有对一些异常输入和其他的异常进行处理,所以在程序的健 壮性上有所欠缺。后来一直在看关于绘制钟表的相关代码,看懂了一半,但 是还是没能完成,希望以后有机会能够完成七、专业课程设计总结 通过本次的课程设计,对汇编语言和微型计算机接口计数,有了更加深刻认 识,复习了关于 8254和 8255的相关知识。自己设计了程序的全部的流程, 对每 个环节都要十分清楚。 代码完成后深切的感觉到, 编写代码前的设计十分的重要。 因为,如果等到完成了许多功能后,再需要增添一个功能, 或改写一个光标的位 置,汇编语言的改写比 JAVA 等高级语言麻烦的多,十分不好改,毕竟汇编是一 种低

24、级语言, 没有面向对象的概念, 很有可能大部分带都重写, 导致效率十分低。 在程序的调试过程中熟悉了通过观察各个寄存器内值的变化来跟踪程序的运行 是否有误。在编写程序的时候发现许多的技巧比如要学会多利用左移或右移的操作,这 样会十分的节省寄存器的使用。 另外当你的寄存器不够时, 可以先把几个寄存器 压栈,进行操作后在弹出栈, 这样可以解决寄存器不够, 或某些寄存器的值不知 觉的被改变。总之这次的汇编实验比 JAVA 那部分要难一点, 还好最后把基本功能完成了, 能够实现一个电子闹钟的定时,整点鸣叫,设定闹钟铃声的种类。 自己第一次编 写这么多的汇编的代码。 唯一有点遗憾的地方是, 提高的钟表指针走动的功能没 能够实现,网上找到一个范例,但是只看懂了一半,只看懂了绘制的过程,对指针如何走动还是没弄懂,希望以后有机会,能够对无论是汇编的图形绘制还是其 他高级语言的图形绘制再次实践一下。充分的锻炼自己!

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

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