微机原理与汇编语言课程设计-多功能定时器设计.doc_第1页
微机原理与汇编语言课程设计-多功能定时器设计.doc_第2页
微机原理与汇编语言课程设计-多功能定时器设计.doc_第3页
微机原理与汇编语言课程设计-多功能定时器设计.doc_第4页
微机原理与汇编语言课程设计-多功能定时器设计.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中北大学微机原理与汇编语言课程设计任务书 2009/2010 学年第 二 学期学 院:电子与计算机科学技术学院专 业:计算机科学技术学 生 姓 名:学 号:设 计 题 目:多功能定时器设计起 迄 日 期: 2010.6.12-2010.6.25设 计 地 点:指 导 教 师:下达任务书日期: 2010 年 6 月 12 日微机原理与汇编语言课程设计任务书1设计目的:通过微机原理与汇编语言课程设计,使学生根据所学的微机原理与汇编语言知识,进一步学习掌握汇编语言程序设计知识,充分理解计算机内部的管理、接口内容以及系统功能调用。能针对一个简单的控制或汇编语言程序设计项目,做出分析,设计其硬件、软件,达到预期的控制目的。2设计内容和要求(包括原始数据、技术参数、条件、设计要求等):设计内容:利用8086汇编语言,多功能定时器设计。设计要求: 主要功能:1、 具有7段数码管显示2、 圆盘指针式显示3、 具有操作提示功能4、 带夏令时/冬令时转换5、 最小设定时间为1分钟,最大设定时间:7天 。每天最多可置20组开与关,每星期最多可设置140组,可参照某些手机上的定时器功能。6、 利用键盘鼠标操作7、 菜单功能,所有功能可通过菜单执行8、 文件读写,把设置信息写入/读出文件,定时信息等9、 整点音乐提醒(注意此处应设计成背景音乐)10、 显示修改当前系统时间日期11、 秒表功能,具有起停等功能12、 数码管和圆盘钟表大小及位置可调3设计工作任务及工作量的要求:组长王小帆:与同组同学协商完成本设计的实现方法和原理,合理分配所设计软件的功能模块,督促同组其他成员独立完成各自负责的模块,以及将全组其他同学的软件进行连接,完成整个设计任务。王小帆:绘制钟表(包括数码和模拟钟表)杜龙:声音编程,如制作背景音乐及嘀嗒声徐龙 孔艳萍:文件读写,如定时时间是否声音提醒,是否重复重复方式等等等陈继强:键盘及鼠标操作,如设置时间,定时开始结束等其他没有提及的功能由组长协同组员分配。在设计内容完成的条件下,编写微机原理与汇编语言课程设计说明书中北大学微机原理与汇编语言课 程 设 计 说 明 书学生姓名:孔艳萍学 号:0706034448学 院:电子计算机科学技术专 业:计算机科学技术题 目:多功能定时器成绩 指导教师潘广贞 雷海卫 乔道迹2010 年 6月24日1. 引言通过微机原理与汇编语言课程设计,使学生根据所学的微机原理与汇编语言知识,进一步学习掌握汇编语言程序设计知识,充分理解计算机内部的管理、接口内容以及系统功能调用。能针对一个简单的控制或汇编语言程序设计项目,做出分析,设计其硬件、软件,达到预期的控制目的。2需求分析“时钟功能处理程序”是运行于windows 系统下的应用软件,主要用于实现时钟显示 时钟调整以及倒计时功能。此程序为用户提供了一个简单的人机对话界面。在屏幕上显示系统当前的时间以及操作方法,它可以接受用户对系统系统时间 颜色 声音的常规性修改,并在确认修改后实现定时闹钟,画面颜色更改等功能。3总体设计 下面从程序的整体流程、各个功能模块以及数据结构几个方面进行总体设计。 本程序的设计基本是参照微型计算机原理与接口技术教程里“汇编语言程序设计”一章中的dos功能调用,中断程序的代码,然后设计出本程序各子程序的代码。 关于时钟信息的更新,由于试了好久都无法常驻内存,所以这里只好用最原始的办法延时与循环。延时的子程序是参照其他教程中发声程序的延时程序,利用in al,61h获得与cpu频率无关的延时。4. 详细设计文件读写主要是在键盘上输入信息,在界面上实现定时器对声音,颜色,倒计时的控制。press a to change the time 12-24 ! 按a键可实现时间12制到24制的转换press c to edit the alarm time ! 按c键可实现对闹钟的设定。press q t to change color !按w=t可实现界面颜色的更改。press b to reset!按b键可以重置时间。press x to edit the final countdown!按x键可实现倒计时功能。press esc to exit esc键为推出此界面。否 是 否 是 否 是 否 是结束延时是s?call settime是q?是a?call setdate判断输入?开始call show_menu ;显示菜单更新时钟信息call show_dt ;显示时间 程序流程图 5. 软件测试图1 总界面图2 字母a12制到24制小时转换图3 字母t实现界面颜色的转换6. 程序清单guangbiao macro num1,num2 ;带参数的宏 mov bh,0h ;本宏用于置光标的位置 mov ah,2h mov dh,num1 mov dl,num2 int 10hendmdispcolor macro color push ax push bx push dx push cx mov ah,02h ;设置调色板和边框 mov dh,0 mov dl,0 mov bh,0 int 10h mov ah,9 ;读取调色板和边框 在当前光标处按指定属性显示字符 mov bl,color mov cx,2000 mov al, int 10h guangbiao 0,0 call showmenu pop cx pop dx pop bx pop axendm.model small.stack.data.code.startupjmp install;大海音乐(默认)freq dw 196,220 dw 262,262,262,262,262,220,196 dw 262,262,262,262,294,262,220,262 dw 294,294,294,294,294,262,220 dw 294,294,294,294,330,294,330,392 dw 440,440,392,440,392,330 dw 294,294,330,294,262,220,196,220 dw 262,262,262,262,262,220 dw 262,196,220 dw 440,440,392,440,524,440 dw 392,330,294,262,220,196,220 dw 262,262,262,262,294,262 dw 262,330,392 dw 440,440,440,440,524,440 dw 392,392,392,440,392,330,294 dw 262,262,262,262,294 dw 330,330,294 dw 262,262,262,262,524,440 dw 392,392,392,440,392,330,392 dw 440,524,524,440,392 dw 392,330,392 dw 440,440,440,440,524,440 dw 392,392,392,440,392,330,294 dw 262,262,262,262,392 dw 330,330,294 dw 262,262,262,262,294,330 dw 392,392,330,392,330,392 dw 440 dw 9,9,196,660,294,294,262 dw 262,-1 ;音乐频率表 time dw 400,400 dw 400,200,400,400,800,400,400 dw 400,200,400,200,200,800,400,400 dw 400,200,400,400,800,400,400 dw 400,200,400,200,200,800,400,400 dw 400,800,400,800,400,400 dw 400,200,200,400,400,800,400,400 dw 400,200,400,400,800,800 dw 1600,800,800 dw 400,800,400,800,400,400 dw 400,400,400,400,800,400,400 dw 400,800,400,800,400,200 dw 2400,400,400 dw 400,800,400,800,400,400 dw 400,800,200,200,800,400,400 dw 400,800,400,800,800 dw 2400,400,400 dw 400,800,400,800,400,400 dw 400,800,200,200,800,400,400 dw 800,400,800,400,200 dw 2400,400,400 dw 400,800,400,800,400,400 dw 400,800,200,200,800,400,400 dw 400,800,400,800,800 dw 2400,400,400 dw 400,800,400,800,400,400 dw 400,800,400,800,400,400 dw 3200 dw 800,400,400,400,400,400,400 dw 4000 ;延时表 freq0 dw 262,294,330,262 dw 330,349,392 dw 392,440,392,349,330,262 dw 294,196,262 time0 dw 1600,800,800,1600 dw 400,400,400,400,800,800 dw 800,800,1600;两只老虎音乐menudb *electronic clock* ,0ah,0dh db 1.press a to change the time 12-24 ! ,0ah,0dh db ,0ah,0dh db 2.press c to edit the alarm time ! (press s to stop),0ah,0dh db ,0ah,0dhdb 3.press x to edit the final countdown !(press s to stop) ,0ah,0dh db ,0ah,0dhdb 4.press q t to change color !,0ah,0dh db ,0ah,0dh db 5.press b to reset,0ah,0dhdb ,0ah,0dh db 6.press esc to exit,0ah,0dh,$ tc db please input the alarmtime (hh:mm:ss):,$tc_buff db 40 db ? db 40 dup (?)temp_hdb ?temp_mdb ?temp_sdb ?tx db please input the final countdown time(00-99):,$tx_buff db 40 db ? db 40 dup (?)txtemp db ?msg db current time is: time_h db ?,? db :time_m db ?,? db :time_sdb ?,?,0,0hoursdb ?secondsdb 0flag1db 0flag2db 0flag3db 0oldint1c dd ?newint1c procpush ax push bx push cx push dx push si push di push escmp flag1,01hjnz acdcall showtxtempacd: mov ax,0200h ;获取系统时间,chhours clminutes dhseconds,均为bcd码格式 int 1ahmov hours,ch;把小时送到hours中,以防变换12和24进制后出现异常 cmp flag2,01h jnz notchg cmp ch,12h jc notchg mov al,ch pushf sub al,12h das popf mov ch,alnotchg:cmp flag1,01h;判断是否开始倒计时jnz notdocmp dh,secondsjz notdomov seconds,dhcmp txtemp,0hjz notdomov al,txtemppushfsub al,01hdas mov txtemp,alpopfnotdo: mov al,ch lea si,time_h call bcd mov al,cl lea si,time_m call bcd mov al,dh lea si,time_s call bcd mov ax,0b800h ;显存地址 采用直接写显存的方法输出字符 mov es,ax ;es:di 指向显存地址 mov di,160*12+108d lea si,msgdisp: mov al,cs:si inc si or al,al jz disp0 ;cs=ds cld stosb inc di ;将cs:si指向的一个字节传送到es:di jmp dispdisp0: pop es pop di pop si pop dx pop cx pop bx pop ax jmp cs:oldint1c ;新1ch中断的事情做完后调用原来的1ch中断iret;中断返回bcd: mov ah,al shr ah,1 shr ah,1 shr ah,1 shr ah,1 and al,0fh add ax,00 xchg ah,al mov cs:si,ax retnewint1c endp;中断结束showtxtemp procpush axpush espush dipush simov ax,0b800h mov es,ax ;es:di 指向显存地址 mov di,160*10+130dmov al,txtempmov ah,alshr ah,1shr ah,1shr ah,1shr ah,1and al,0fhadd ax,00push axmov al,ahstosbinc dipop axstosbpop sipop dipop espop axretshowtxtemp endpedittime_c procpush axpush bxpush cxpush dxpushfmov ah,0ch;清除键盘 缓冲区int 21h guangbiao 14,0mov dx,offset tc ;显示设置闹铃时间的格式提示mov ah,09hint 21hmov dx,offset tc_buffmov ah,0ahint 21hguangbiao 15,0add dx,0hlea bx,tc_buffinc bxinc bxmov dh,bxsub dh,30h ;将输入数值09的asc码转化成09的数字inc bxmov dl,bxsub dl,30hmov cl,10hmov al,dhmul cladd al,dlmov ch,almov temp_h,al;小时存放于temp_h变量中 inc bx inc bxmov dh,bx sub dh,30h inc bx mov dl,bx sub dl,30h mov cl,10h mov al,dh mul cl add al,dlmov ch,al mov temp_m,al ;分钟存放于temp_m变量中 inc bx inc bx mov dh,bx sub dh,30h inc bx mov dl,bx sub dl,30h mov cl,10h mov al,dh mul cl add al,dlmov ch,almov temp_s,al ;秒钟存放于temp_s变量中 popf pop dx pop cx pop bx pop axjmp compretedittime_c endpedittime_x procpush axpush bxpush cxpush dxpushfmov ah,0ch;清除键盘 缓冲区int 21h guangbiao 15,0mov dx,offset tx ;显示设置倒计时闹铃时间mov ah,09hint 21hmov dx,offset tx_buffmov ah,0ahint 21hguangbiao 16,0add dx,0hlea bx,tx_buffinc bxinc bxmov dh,bxsub dh,30h ;将输入数值09的asc码转化成09的数字inc bxmov dl,bxsub dl,30hmov cl,10hmov al,dhmul cladd al,dlmov ch,almov txtemp,al;小时存放于txtemp变量中mov flag1,01h;设置标志位,以判断是否要求倒计时popf pop dx pop cx pop bx pop axretedittime_x endpchangecolor proc push ax in al,60h ;60h:键盘输入数据缓冲区 cmp al,10h jne i1 dispcolor 41h ;q显示41h(红底蓝字)i1: cmp al,11h jne i2 dispcolor 20h ;w显示20h(绿底黑字)i2: cmp al,12h jne i3 dispcolor 02h ;e显示02h(黑底绿字)i3: cmp al,13h jne i4 dispcolor 40h ;r显示40h(红底黑字)i4: cmp al,14h jne i5 dispcolor 0f0h ;t显示0f0h(白底黑字)i5: pop ax retchangecolor endpshowmenu procpush axpush dxmov ah,09hmov dx,offset menuint 21hpop dxpop axretshowmenu endpyinyue proc ;音乐子程序push cs pop dscmp flag3,01hjnz l0mov si,offset freq0 mov di,offset time0jmp l1l0: mov si,offset freq mov di,offset timel1: mov cx,si cmp cx,-1 jz return mov bx,di call gensound add si,2 add di,2in al,60hcmp al,1fhjz return jmp l1return: mov flag1,0hmov flag3,0hjmp f0 ;闹铃音乐结束返回主界面yinyue endp gensound proc near push dx mov al,0b6h ;计数器选择:计数器2;数据读/写格式:16 位计数先读写高字节,后读写低字节;工作方式:工作方式3;数制选择:二进制 out 43h,al ;43h可编程中断计时器,控制字寄存器(模式设置端口,写入方式控制字) mov dx,08h mov ax,3208h ;设置输出频率537096hz(dx:ax) div cx ;控制实际输出频率ax=537096hz/cx out 42h,al ;先写入低 8位 mov al,ah out 42h,al ;后写入高 8位(参数据读/写格式及计数器选择) in al,61h ;取得设备控制寄存器开关量 mov ah,al ;暂存以下次恢复 or al,3 ;d0d1=11接通扬声器 out 61h,al ;设置设备控制寄存器开关量l2: push dx push ax mov dx,8h mov ax,0f05hs1: sub ax,1 sbb dx,0 jnz s1 pop ax pop dx dec bx jnz l2 mov al,ah out 61h,al pop dx retgensound endpcheck_c procpush axpush bxpush cxpush dxpush simov ax,0200hint 1ahmov ch,hours cmp ch,temp_h jnz cf cmp cl,temp_m jnz cf cmp dh,temp_sjnz cfcall yinyuecf:pop sipop dxpop cxpop bx

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论