




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
信息科学与技术学院微机原理与接口技术课程设计课 题 名 称: 作息时间控制系统 目录1、题目及要求:11.1题目:作息时间控制系统11.2要求:12、功能设计12.1、功能模块:12.2、功能图:13、详细设计13.1、设计方法:13.1.1、显示系统时间13.1.2、设置闹铃时间与输入时的容错处理方法13.1.3、当到达闹铃时间时响铃13.2、各功能模块及流程图13.3重点难点及解决办法:14、总结15、参考文献16、附录1251、题目及要求:1.1题目:作息时间控制系统1.2要求:能显示时间(时、分、秒)并在规定的作息时间给出闹钟信号并可以手动输入作息时间表2、功能设计:2.1、功能模块:主程序模块main 主要包括调用其他函数和主窗口的实现闹钟模块setRingTime 简单初始界面,要求用户输入所设定的作息时间。调用系统时间模块(GetTime)使用dos功能调用(int 21H)中的2ch中断截取系统时间,再调用显示时间的子程序把时间显示出来(例如显示当前时间为 16:30:45 并且如果时间数少于两位数就要在其前面加0后显示出来如 04:07:03);延时模块(aSecond)利用端口61H中的PB4每15.08微秒触发一次的特点,通过适当的循环次数进行循环从而实现延时1秒钟;刷新模块(TIME)在延时后再循环执行步骤1从而实现时间每一秒的刷新,在屏幕上不断显示当前的时间宏的作用:清屏(Clear) 用于按要求清理屏幕。(不同颜色)定位(Dingwei) 用于移动光标位置,以便按要求输出。输出(Xianshi) 用于程序中的字符输出。输入闹钟setRin setRing清屏得到当前时间刷新Y提醒作息时间是否为闹钟时间结束开始MainN2.2、功能图: 图1 全局功能图3、详细设计:3.1、设计方法:3.1.1、显示系统时间使用dos功能调用(int 21H)中的2ch中断截取系统时间,再调用显示时间的子程序把时间显示出来(例如显示当前时间为 16:30:45 并且如果时间数少于两位数就要在其前面加0后显示出来如 04:07:03);利用端口61H中的PB4每15.08微秒触发一次的特点,通过适当的循环次数进行循环从而实现延时1秒钟;在延时后再循环执行步骤1从而实现时间每一秒的刷新,在屏幕上不断显示当前的时间;3.1.2、设置闹铃时间与输入时的容错处理方法在数据段定义好字型变量hour、minute分别用于存放响铃时的小时数与分钟数;设置闹铃时间由于形式为 12:45(小时:分钟) 为了方便进行容错处理,可以分别用一段代码实现每一位数的输入,总共需要输入五位数字。例如,输入前两位的小时数时,在输入第一位时判断输入的是否是从0到2范围里的一个数字,如果不是就显示错误信息并停止程序的运行;在输入小时的第二位数时判断输入的是否是0到9范围里的一个数字,如果不是就显示错误信息并停止程序的运行;在输入第三位时(应该是冒号)再判断是否是冒号,如果不是就显示错误信息并停止程序的运行;输入第四位(即分钟数的第一位)判断输入的是否是0到5数字里的一个,如果不是就显示错误信息并停止程序的运行;输入最后一位判断是否是0到9的范围中的一个数字,如果不是就显示错误信息并停止程序的运行等等;每次输入如果确定输入无误就使用书本中处理输入一个十进制数常用的方法把输入的数存储到寄存器中,再把它存入相应的变量中如小时数存到变量hour中,分钟数存入变量minute中;3.1.3、当到达闹铃时间时响铃每次在截取系统时间前先把寄存器bx清零,截取时间后把截取到的系统时间分别与变量hour与变量minute进行比较,如果相等,就使寄存器bx加1,这样再执行完截取系统时间后检查bx是否为2,如果是2就表示已经到达设定好的闹铃时间,就跳出显示时间的死循环,跳到响铃的循环去;响铃是使用dos功能调用(int 21H)中的2H, 同时把7H放到dl寄存器中,执行一次后延时三秒(延时的方法同显示时间时所用延时方法一样)再执行一次共循环执行40次从而实现了响铃几秒钟的功能;3.2、各功能模块及流程图main 函数图,如图2所示:开始 在屏幕上输出设置响铃时间的提示 调用子程序setRingTime 从键盘接收输入的响铃时间并存储在相应变量中 调用子程序cleanLine 使光标回到行首并且把这一行的字符串消去输出设置好的响铃时间截取并且显示系统时间是是否到达响铃时间 否输出响铃提示 否延时一秒钟调用中断响铃一声cx为0 延时三秒钟 图2 流程图开始getTime proc 用于截取系统时间的子程序,如图三所示:使bx寄存器清零调用中断截取系统时间小时数是否与响铃小时数相同 是使bx加1 否输出小时数,并输出一个冒号分钟数是否与响铃分钟数相同 是使bx加1 否 输出分钟数,并输出一个冒号结束 图3 系统时间的子程序图3.3重点难点及解决办法: 刚开始拿到这个题目的时候,感觉无从着手,第一难点就是不知道怎么去做这个作息时间系统,后面认为该系统类似一个闹钟系统,可是由于自己能力有限,最后还是只能做到闹钟报时,无法做出一个完整的作息时间系统。这道题的难点就是作息时间系统的多个闹钟设置,最终还是没有想出如何让几个闹钟同时并存,还有要设置延时系统,使步调与保持电脑一致。还有就是闹钟需要在时间到达时响铃,最后想到使用dos功能调用(int 21H)中的2H, 同时把7H放到dl寄存器中,执行一次后延时三秒(延时的方法同显示时间时所用延时方法一样)再执行一次共循环执行40次从而实现了响铃几秒钟的功能。4、总结:通过多次的实践,使我深切的体会到培养动手能力的重要性,程序设计是一门实践性很强的东西,不仅要学好书本知识,那是远远不够的,还必须随时把所学知识投入实际应用之中,在此过程中多参照些相关资料,只有这样,才能达到学习的目的,才能学好一门编程语言。通过这次实践,我感觉到自己的动手能力还很欠缺,也知道了自己其他方面的不足,我想今后我一定会加强这方面的培养。在这次实验后,我更坚定这一观点:只有非常熟悉编程语言的基础知识和基本理论,才能更顺手地编程,才能提高编程的效率,减少出现错误。只要我们注意一些语法细节,其实很多错误是不该出现的。5、参考文献:1 IBM-PC汇编语言程序设计 沈美明 清华大学出版社 2001年8月第2版2 IBM-PC汇编语言程序设计例题习题集 沈美明 清华大学出版社 1991年6月第1版3 微型计算机技术及应用 戴梅萼 史嘉权 著 清华大学出版社 2008年3月6、附录: 源程序data segmenthour dw ? ;响铃时的小时数minute dw ? ;响铃时的分钟数ten dw 10s1 db please set the date time(set it as XX:XX): $s2 db the ringing time is: $s3 db current time is: $s4 db You have a date!$error db set time error!$data endscode segmentassume cs:code,ds:data;用于清除一行的字符cleanLine procpush axpush bxpush cxpush dxmov cx,75mov ah,2hmov dl,0dhint 21h ;此处回车clean:mov dl, int 21hloop cleanmov dl,0dhint 21hpop dxpop cxpop bxpop axretcleanLine endp;用于显示一个回车换行changeline procpush axpush bxpush cxpush dxmov ah,2hmov dl,0dhint 21h ;此处回车mov dl,0ahint 21h ;此处换行pop dxpop cxpop bxpop axretchangeline endpinputNegativeNumber proc;用于从键盘中接受一个十进制数,存到bx中push axpush cxpush dxmov bx,0mov cl,0mov ah,1int 21h ;在键盘上输入一个字符,并在屏幕显示该字符cmp al,-je k4k0:cmp al,30hjb k3 ;小于30h时跳转cmp al,39hja k3 ;大于39H则跳转sub al,30h ;将输入的字符转成十进制数mov ah,0xchg ax,bxpush cxmov cx,10mul cxpop cxadd bx,axk1:mov ah,1int 21hjmp k0k4:mov cl,1jmp k1k3:cmp cl,1jne over ;不相等则转移neg bx;对于bx求补over:pop dxpop cxpop axretinputNegativeNumber endpoutputNumber proc;输出ax中的一个数字push axpush bxpush cxpush dxmov cx,0mov bx,10cmp ax,0jge p0 ;大于等于则跳转push axmov ah,2hmov dl,-int 21hpop axneg axp0:mov dx,0div bxpush dxinc cxcmp ax,0jnz p0 ;不为0则转移mov ah,2cmp cx,2jae p1 ;cx大于2则转移mov dx,0push dxinc cxp1:pop dxadd dx,30hint 21hloop p1pop dxpop cxpop bxpop axretoutputNumber endpsetRingTime proc;用于设置响铃时间push axpush bxpush cxpush dxmov bx,0h:mov ah,1hint 21hcmp al,30hjb wrongcmp al,32hja wrongsub al,30hmov ah,0xchg ax,bxmul tenadd bx,axmov ah,1hint 21hcmp al,30hjb wrongcmp al,39hja wrongsub al,30hmov ah,0xchg ax,bxmul tenadd bx,axmov hour,bxmov ah,1hint 21hcmp al,:jnz wrongmov bx,0m:mov ah,1hint 21hcmp al,30hjb wrongcmp al,36hjae wrong;大于等于36则转移sub al,30hmov ah,0xchg ax,bxmul tenadd bx,axmov ah,1hint 21hcmp al,30hjb wrongcmp al,39hja wrongsub al,30hmov ah,0xchg ax,bxmul tenadd bx,axmov minute,bxjmp owrong:call changelinecall changelinemov ah,9h ;显示error的地址lea dx,errorint 21hmov ah,4ch ;退出程序int 21ho:pop dxpop cxpop bxpop axretsetRingTime endpshowRingTime proc;用于显示响铃时间push axpush bxpush cxpush dxlea bx,hourmov ax,bxcall outputNumbermov ah,2hmov dl,:int 21hadd bx,2mov ax,bxcall outputNumberpop dxpop cxpop bxpop axretshowRingTime endpgetTime proc;用于截取系统时间push axmov bx,0mov ah,2chint 21hmov al,chmov ah,0cmp ax,hourje e1 ;相等则转移g1:call outputNumbermov ah,2hmov dl,:int 21hmov ah,0mov al,clcbwcmp minute,axje e2g2:call outputNumbermov ah,2hmov dl,:int 21hmov ah,0mov al,dhcbwcall outputNumberjmp ed;无条件跳转ede1:inc bxjmp g1e2:inc bxjmp g2ed:pop axret getTime endpdelay proc;用于延时0.5秒push axwaiting:in al,61hand al,10hcmp al,ahje waitingmov ah,alloop waitingpop axretdelay endpaSecond proc;用于延时1秒push axpush bxpush cxpush dxmov bl,2back:mov cx,33144call delaydec bljnz backpop dxpop cxp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 综合解析云南省大理市7年级上册期末测试卷难点解析练习题(含答案详解)
- 中考数学总复习《概率初步》综合提升测试卷附答案详解【模拟题】
- 自考专业(建筑工程)练习题必考附答案详解
- 注册公用设备工程师考前冲刺测试卷含答案详解【基础题】
- 重庆资源与环境保护职业学院病理与病理生理期末能力提升B卷题库加答案详解
- 自考专业(人力资源管理)能力提升B卷题库附完整答案详解【各地真题】
- 电竞公司医疗保险管理办法
- 中医执业医师考前冲刺练习含答案详解【培优B卷】
- 交通行业智能化交通信号灯与导航方案
- 助听器验配师考试综合练习及答案详解(必刷)
- 医疗仪器保养、维护、修理记录本
- 高产小麦品种介绍
- 创新方法教程题库题库(449道)
- 建设工程消防验收评定规则
- 山东省临沂市兰山区2022-2023学年小升初数学自主招生备考卷含答案
- 电气设备交接试验方案
- D500-D505 2016年合订本防雷与接地图集
- 北邮社电机拖动与调速技术教学包课后题解
- 学校门卫岗位职责及管理制度
- JJG 1105-2015氨气检测仪
- GB/T 17421.7-2016机床检验通则第7部分:回转轴线的几何精度
评论
0/150
提交评论