合肥工业大学微机原理课程设计数字闹钟.doc_第1页
合肥工业大学微机原理课程设计数字闹钟.doc_第2页
合肥工业大学微机原理课程设计数字闹钟.doc_第3页
合肥工业大学微机原理课程设计数字闹钟.doc_第4页
合肥工业大学微机原理课程设计数字闹钟.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

合肥工业大学计算机与信息学院课程设计课 程:微机原理与接口技术设计专业班级:计算机科学与技术13-1班学 号:2013211601姓 名: 康安一、 设计题目及要求:1通过8253 定时器产生1秒脉冲定时中断。在中断服务程序中实现秒、分、小时的进位( 24小时制)。2在七段数码管上显示当前的时分秒(例如, 12点10分40秒显示为121040)。3按“ C”键可设置时钟的时间当前值(对准时间)。4按“ D”键设置闹铃时间。5. 按“E”键表示时钟开始运行。6. 程序运行时,首先按“D”键设置闹铃时间,然后按“ C”键设置时钟的时间,再按“E”让时钟开始运行。当前时间运行到闹铃时间时,6 个数码管全部闪烁显示“8”。二、 设计思想:总体思想:1、功能概述:实验箱连线:本实验建立在Dais实验箱基础上完成的基本连线及程序如下:138译码器:A,B,C,D,分别连接A2,A3,A4,GS;y0连接8253的CS片选信号;y1连接8259的CS片选信号;8253连线:分频信号T2接8253的 CLK0;8253的OUT0接8259的IR7;8253的gate信号接+5V;8259连线:8259的数据线接入数据总线;本程序包括显示模块,键盘扫描模块,时间计数模块,设置模块等几个模块,(1)程序运行后,LED显示000000初始值,并且开始计数(2)按C键设置初始时间,LED清零,显示待输入状态“-”,之后用户输入数字,更改LED显示内容。考虑到第一个数只能是0,1,2,当第一个数显示2时第二个数只能显示04,同理下面各位应满足时钟数值的合理的取值;(3)按D键设置闹钟时间,清除LED显示内容,显示待输入状态“-”,之后用户输入数字,更改LED显示内容。数字的取值情况和按C键设置初始时间相同。(4)按E键运行时钟,LED显示内容恢复为按C键设置的时间,并开始计时。(5)当LED显示的数字和预先设置好的闹钟相同时,更改LED显示状态,改为“888888”,闪烁显示10秒后恢复原来的时间,继续计数。2、主程序设计(他人完成)主程序中完成通过调用子程序完成对8253及8259的初始化,对8259进行中断设置。主要在显示子程序和键盘子处理程序之间不断循环,8253每一秒给8259一个刺激,当8259接受到刺激后会给CPU一个中断请求,CPU会转去执行中断子程序,而中断子程序设置成时间计数加,即完成电子表的整体设计。当LED显示的时间达到预先设置的时间,关闭中断,更改显示内容,在显示一段时间后恢复显示,打开中断,使电子表恢复运行。3、LED显示子程序设计(他人完成)本程序显示部分用了6个共阳极LED作为显示管,显示程序要做到每送一次段码就送一次位码,每送一次位码后,将位码中的0右移1位作为下次的位码,从而可以实现从左到右使6个LED依次显示出相应的数字。虽然CPU每隔一定时间便执行显示程序,但只要这个时间段不太长,由于人眼的视觉作用,就可以在6个LED上同时见到数字显示。4、键盘扫描子程序设计(他人完成)本程序主要实现对键盘的按键进行扫描,判断用户是否按下的键值,并将按下的键值作为参数返回。5、时钟功能设置(独立负责)本程序段负责实现判断用户按下的键值,根据按下的键值转入不同的程序段执行相应的功能设置。判断键值的方法为设置三个标志位,三个标志位分别对应3个按键,当按键被按下时,将对应的标志位置为1,在程序段中对三个标志位进行判断,从而实现不同的功能设置。首先调用键盘扫描子程序GetKey获取用户输入的键值,之后将键值分别与0ch, 0dh, 0eh比较:若键值为C,则跳入下一个程序段SETC,将对应的标志位ButtonC置为1,其余两个标志ButtonD和ButtonE为0;若键值为D,则跳入下一个程序段SETD,将对应的标志位ButtonD置为1,其余两个标志ButtonC和ButtonE为0;若键值为E,则跳入下一个程序段SETE,将对应的标志位ButtonE置为1,同时由于要更改显示的时间状态,将使用到的一个临时缓冲区buff的取出标志位flag也置为1,表示E键被按下后,要将buff缓冲区内存的时间转移到LedBuff上来显示用户设置的时间。其余两个标志ButtonD和ButtonE为0;若键值为数字,则跳入下一个程序段NEXT。NEXT程序段负责完成三个功能:设置时间、置闹钟以及时钟运行。此程序段通过判断三个标志是否为1,来实现不同的功能。若ButtonC为1,意味着当前是设置时钟模式,用户在按下C键之后输入的6位数字键为设置的时间;若ButtonD为1,意味着当前是设置闹钟模式,用户在按下C键之后输入的6位数字键为设置好的闹钟时间;若ButtonE为1,意味着时钟开始运行。详情见图6、闹钟显示功能(他人完成)本程序段负责实现时间达到闹钟设置时间的操作,对LED显示的内容进行判断,当6个二极管显示的数字完全相同时,即满足闹钟响的条件,此时关闭中断,并将LED显示内容更改为“888888”,显示10S后将LED恢复为响之前的状态,打开中断,继续运行时钟7、8259初始化及中断设置(独立负责)8259芯片:在该系统中,8259主要担负着处理8253的一秒时间的脉冲信号,通过8253的每秒的刺激下向CPU发送中断请求,进而CPU处理担负时间计算的中断子程序,即可完成每秒钟时间自加1秒的功能,因此8259的初始化设置应为:MOV AL,13HMOV DX,Port0OUT DX,AL ;icw1MOV AL,08HMOV DX,Port1OUT DX,AL ;icw2MOV AL,0BHOUT DX,ALMOV AL,7FH ;IRQ7OUT DX,AL在接收到8253的脉冲后,需要执行的中断程序功能为对LED显示的数字进行判断,显示合理的数值,即要满足显示秒的LED管显示的最大值为59,显示分钟的最大值为59,显示时钟的最大值为23,最大时间不能超过23:59:59。具体判断方法见“时间值合理的判断”8、8253定时器设置(他人完成)8253芯片:在系统中定时/计数芯片8253主要与CPU及中断扩展芯片8259之间存在着连接关系。8253主要担负着时间计时的功能,通过对分频单元提供的频率信号进行方法产生一秒时间为周期的脉冲信号。 三、功能流程图:1、主程序流程图(他人完成) 2、LED显示子程序流程图(他人完成) 3、 按键处理子程序流程图(独立负责)4、中断子程序-时间计数子程序流程图(合作完成) 4、 结果讨论:1、 实验结果:程序运行,数码管开始从000000走表,按C键后显示开始对时钟进行初始值设置,设置完成后按D键后,LED显示进入闹钟设置状态,在设置完闹钟后按E键开始运行,LED管显示为设置好的时间并接收8253的中断,实现不断走表。当显示时间达到闹钟时间时,LED管显示888888,在闪烁10S结束闹钟状态,再次显示时间,并开始走表。2、 问题解决:自己遇到的问题:在测试C、D、E三个功能键时常常出现误输入的情况,为便于查看用户输入的值,在用户按下相应的功能键时,将LED显示为此时显示,用户依次输入6个数字,相应地,在LED上由左向右依次显示用户输入的数字,方便查看用户是否输入了自己想测试的时间。 组员遇到的问题:调试程序时发现时钟初始值可以设置,但是初始值设置完后时钟并没有走表,于是将8253的输出端的线接入至手动的单脉冲的发生器,进行手动给8259刺激,结果时钟开始随手按动开始走表,可以断定该8253芯片可能已经损坏,换了个试验箱后遇到了同样的情况,直至换了功能正常的实验箱后实验现象才正确展现。附录:实验代码:(完整的源程序)CODE SEGMENTASSUME CS:CODE,DS:CODE,ES:CODE; org 5000hPort0 EQU 0FFE0HPort1 EQU 0FFE1Hport00 equ 0FFF0Hport33 equ 0FFF3HOUTSEG equ 0ffdch ;段控制口OUTBIT equ 0ffddh ;位控制口/键扫口IN_KEY equ 0ffdeh ;键盘读入口org 3400hLedBuf db 6 dup(?) ;显示缓冲CBuf db 6 dup(0fh)buf db 6 dup(?) ;临时存放时刻buttonC DB 02H ;若C键被按则置1buttonD DB 03H ;若D键被按则置1buttonE DB 00H ;若E键被按则置1flag DB 00h ;时间从BUF取出到LEDBUF标志cflag DB 00hStart:;mov cflag,00mov LedBuf+0,00h ;开启时显示000000mov LedBuf+1,00hmov LedBuf+2,00hmov LedBuf+3,00hmov LedBuf+4,00hmov LedBuf+5,00hmov si,0;初始化;push axpush dxMOV DX,port33MOV AL,36HOUT DX,ALMOV DX,port00MOV AL,00HOUT DX,ALMOV AL,4BHOUT DX,ALpop dxpop axCLIMOV AX,OFFSET INT8259MOV BX,003CHMOV BX,AXMOV BX,003EHMOV AX,0000HMOV BX,AXCALL FOR8259STI;con8:CALL DIScall GetKey;扫描键盘并读取键值cmp al,20h;检测是否按下按键jz con8and al,0fh ;显示键码cmp al,0dh ;d:设置闹钟jz setDcmp al,0ch ;c:设置时钟 先时后分jz setCcmp al,0eh;e:时钟运行jnz zhong ;CDE均不是,则跳转到NEXTjmp setEsetD: mov buttonD,01hMOV buttonC,00hMOV buttonE,00hhui:mov cx,6mov si,6push axmov al,LedBufsi ;之前代码声明过,si为0,所以此处si将依次为0,1,2,3,4,5mov bufsi,al ;依次把LEDBUF里的时分秒存到BUFpop axinc siloop huimov si,00hmov LedBuf+0,11h ;开启时显示-mov LedBuf+1,11hmov LedBuf+2,11hmov LedBuf+3,11hmov LedBuf+4,11hmov LedBuf+5,11hcall disCLI ;关中断,进入设置闹钟模式jmp con8zhong:jmp nextsetC: MOV buttonC,01hMOV buttonD,00hMOV buttonE,00hmov si,00hmov LedBuf+0,11h ;开启时显示-mov LedBuf+1,11hmov LedBuf+2,11hmov LedBuf+3,11hmov LedBuf+4,11hmov LedBuf+5,11hcall disCLI ;关中断,进入设置当前时间模式jmp con8setE:MOV buttonE,01hMOV buttonD,00hMOV buttonC,00hcmp flag,01hjz nextSTI ;开中断,即确认C、D的输入值next:mov bl,buttonD ;通过判断三种标志,跳转到响应设置上cmp bl,01hjz writeDEmov bl,buttonCcmp bl,01hjz writeCmov bl,buttonEcmp bl,01hjz writeDEjmp con8;writeC:mov LedBuf+si,alinc siPUSH CXMOV CX,100DELAYc: call disLOOP DELAYCPOP CXcmp si,06hjnz overCmov buttonC,00hoverC: jmp con8;writeDE:cmp flag, 01h ;若取出BUF内时间标志与E键标志均为1,则把BUF的内容取回LEDBUFjnz goDcmp buttonE,01hjz recoverLEDgoD:cmp si,06hjnb overDmov LedBuf+si,al ;显示当前按下的键值mov Cbuf+si,al ;存入闹钟缓冲区inc siPUSH CX ;键盘防抖MOV CX,100DELAYd: call disLOOP DELAYDPOP CXcmp si,06hjnz overd ;若SI不等06h即小于6,则跳到con8处,继续获取键值,直至6位闹钟设置完毕MOV BUTTOND,00H ;闹钟设置完毕,使D键标志失效,使其不会继续设置闹钟,并将取出BUF内时间标志置1mov flag,01hoverD: JMP con8recoverLED: cli ;实现从BUF知LEDbuf功能的具体代码区push sipush cxPUSH BXmov cx,0006hloopD: mov bx,offset LedBufpush cxdec cxmov si,cxpop cxmov bl,Bufsimov LedBufsi,blloop loopDPUSH CX ;键盘防抖MOV CX,100DELAYdd: call disLOOP DELAYDdPOP CXMOV BUTTONE,00H ;任务完成,是E键标志失效,取出标志失效,闹钟响标志生效mov flag,00hMOV Cflag,01hstiPOP BXpop cxpop sistijmp con8;StartRing:clipush sipush cxcall LEDtoBUF ;启动闹钟显示前,存储LEDbufmov cx,08hloopring1:mov LedBuf+0,08h ;开启时显示888888mov LedBuf+1,08hmov LedBuf+2,08hmov LedBuf+3,08hmov LedBuf+4,08hmov LedBuf+5,08hpush cx ;延时MOV CX,100DELAYring1: call disLOOP DELAYring1pop cxmov LedBuf+0,010hmov LedBuf+1,010hmov LedBuf+2,010hmov LedBuf+3,010hmov LedBuf+4,010hmov LedBuf+5,010hpush cx ;延时MOV CX,100DELAYring2: call disLOOP DELAYring2pop cxloop loopring1call BUFtoLED ;闹钟显示结束,恢复LEDbuf;mov juRing,00hpop cxpop sistiretjudgeclock: cmp Cflag,01h ;判断是否到达闹钟具体代码区jnz Noringmov al,LedBufcmp al, CBufjnz Noringmov al,LedBuf+1cmp al,CBuf+1jnz Noringmov al,LedBuf+2cmp al,CBuf+2jnz Noringmov al,LedBuf+3cmp al,CBuf+3jnz Noringmov al,LedBuf+4cmp al,CBuf+4jnz Noringmov al,LedBuf+5cmp al,CBuf+5jnz Noringjmp YesringNoring:jmp returnYesring:call startringreturn:retLEDtoBUF:PUSH sipush axmov si,00hLBloop: mov al,LEDbufsiMOV bufsi,alinc sicmp si,06hjnz LBloopPOP AXPOP SIRETBUFtoLED:push sipush axmov si,00hBLloop: MOV AL,BUFsimov LedBufsi,ALINC SICMP SI,06HJNZ BLlooppop axpop siret;FOR8259:MOV AL,13HMOV DX,Port0OUT DX,AL ;icw1MOV AL,08HMOV DX,Port1OUT DX,AL ;icw2MOV AL,0BHOUT DX,ALMOV AL,7FH ;IRQ7OUT DX,ALRET;中断子程序;INT8259:clipush axpush bxpush cxpush si; call judgeclock; cmp juRing,01h; jnz noRing1; call StartRingnoRing1: mov al,LedBuf+5 ;此处往下的代码区均无问题,无需更改mov ah,0call judgemov LedBuf+5,almov si,4hcall judge6dec sicall judge9dec sicall judge6dec sicall judge24cmp cflag,01hjnz noringggcall judgeclocknoringgg:pop sipop cxpop bxpop axCALL DISSTIIRET;judge: cmp al,09hjnz LL1mov al,0mov ah,1hjmp judge0LL1: inc aljudge0: retjudge6: mov al,LedBuf+siadd al,ahmov ah,0hcmp al,06hjnz LL2mov al,0mov ah,1hLL2: mov LedBuf+si,alretjudge9: mov al,LedBuf+siadd al,ahmov ah,0hcmp al,0ahjnz LL3mov al,0mov ah,1hLL3: mov LedBuf+si,alretjudge24: mov al,LedBuf+0cmp al,2jz LL4call judge9mov al,LedBuf+0add al,ahmov ah,0hmov LedBuf+0,aljmp L24LL4:mov al,LedBuf+1add al,ahmov ah,0hcmp al,4hjnz LL5mov al,0mov LedBuf+0,almov LedBuf+1,alJMP L24LL5: mov LedBuf+1,alL24: ret;GetKey: ;键扫子程序mov al,0ffh ;关显示口mov dx,OUTSEGout dx,almov bl,0mov ah,0fehmov cx,8key1: mov al,ahmov dx,OUTBITout dx,alshl al,1mov ah,alnopn

温馨提示

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

评论

0/150

提交评论