当前位置:文档之家› LED七段数码管数字钟1

LED七段数码管数字钟1

《微机原理综合实验》课程设计学院:机电学院班级: 12机械师姓名:周汉斌学号: 2012095644010 指导老师:覃孟扬目录一、设计任务书.................................. 错误!未定义书签。

二、设计题目 (3)三、设计方案 (3)四、硬件原理 (3)1.七段数码管显示 (3)2.键盘扫描显示 (5)3.8253计数器和8259中断 (5)4.硬件连接 (6)五、程序流程图及程序清单 (6)1.七段数码管显示 (8)2. 键盘扫描显示 (9)3.定时器设计 (12)4.总程序设计 (15)六、调试过程及结果 (29)七、设计总结和体会 (30)八、参考文献 (31)一、设计题目LED七段数码管数字钟:1.设计并完成LED七段数码管数字钟电路。

2.数字钟显示格式为:HH:MM:SS。

3.具有通过键盘能够调整时、分、秒的功能。

二、设计方案本设计采用LAB6000伟福仿真实验箱,利用4MHz脉冲信号源和多级分频电路产生脉冲信号,4MHz脉冲信号经过F/64分频后得到62.5KHz脉冲信号,将脉冲信号传递给8253定时器,定时器每0.000016秒中断一次,在中断服务程序中对中断次数进行计数,0.000016秒计数62500次就是1秒,然后在对秒计数得到分和小时值,并送入显示缓冲区,用总线方式控制数码管显示。

同时,利用实验箱提供的键盘扫描电路和显示电路来调整时、分、秒。

三、硬件原理1.七段数码管显示图1. 七段数码管七段数码管的字型代码表如下表:显示字形g f e d c b a 段码0 0 1 1 1 1 1 1 3fh1 0 0 0 0 1 1 0 06h2 1 0 1 1 0 1 1 5bh3 1 0 0 1 1 1 1 4fh4 1 1 0 0 1 1 0 66h5 1 1 0 1 1 0 1 6dh6 1 1 1 1 1 0 1 7dh7 0 0 0 0 1 1 1 07h8 1 1 1 1 1 1 1 7fh9 1 1 0 1 1 1 1 6fhA 1 1 1 0 1 1 1 77hB 1 1 1 1 1 0 0 7chC 0 1 1 1 0 0 1 39hD 1 0 1 1 1 1 0 5ehE 1 1 1 1 0 0 1 79hF 1 1 1 0 0 0 1 71h表1. 段数码管的字型代码表图2. 八段数码LED显示电路实验箱提供了6位八段数码LED显示电路,只要按地址输出相应数据,就可以实现对显示器的控制。

将KEY/LED CS接到CS0上,则实验箱中八位段码输出地址为08004H,位码输出地址为08002H。

2.键盘扫描显示图3. 键盘扫描电路实验箱提供了一个6×4的小键盘,将KEY/LED CS信号接到CS0上,则列扫描地址为08002H,行码地址为08001H。

向列扫描码地址逐列输入低电平,然后从行码地址读回。

如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高。

这样就可以通过输出的列码和读取的行码来判断按下的是什么键。

在判断有键按下后,要有一定的时延,防止键盘抖动。

3.8253计数器和8259中断图4. 8253计数器扩展电路图5. 8259中断扩展电路4.硬件连接8253用定时器/计数器1,8253片选接CS4,地址为0C000H,8253时钟源CLK1接分频电路的F/64输出,频器的Fin接4MHz时钟,8253的GATE1接VCC;8259中断INT0接8253的OUT1,片选接CS5,地址为0D000H。

显示电路的KEY/LED CS 接CS0,地址为08000H。

四、程序流程图及程序清单通过调查研究,查阅资料,我初步确定系统结构的总体方案,并依此画出了主程序框图:图6. 主程序框图根据主程序框图,要实现电子时钟,必须先实现七段数码管显示、键盘扫描显示、定时器以及将输入的键值转换为显示数据。

为了实现上述四个功能,我又设计了三个子模块的流程图,并完成了相应的程序设计。

1.七段数码管显示图7. 七段数码管显示子程序框图七段数码管显示子程序清单:DisplayLED proc nearmov bx, offset LEDBufmov cl, 6 ; 共6个八段管mov ah, 00100000b ; 从左边开始显示DLoop:mov dx, OUTBITmov al, 0out dx,al ; 关所有八段管mov al, [bx]mov dx, OUTSEGout dx,almov dx, OUTBITmov al, ahout dx, al ; 显示一位八段管push axmov ah, 1call Delaypop axshr ah, 1inc bxdec cljnz DLoopmov dx, OUTBITmov al, 0out dx,al ; 关所有八段管retDisplayLED endp2. 键盘扫描显示图8. 读键输入子程序框图键盘扫描子程序清单:TestKey proc near ; 判断有无键入mov dx, OUTBITmov al, 0out dx, al ; 输出线置为0mov dx, IN_KEYin al, dx ; 读入键状态not aland al, 0fh ; 高四位不用retTestKey endpGetKey proc near ; 读入键码mov ch, 00100000bmov cl, 6KLoop:mov dx, OUTBITmov al, ch ; 找出键所在列not alout dx, alshr ch, 1mov dx, IN_KEYin al, dxnot aland al, 0fhjne Goon_ ; 该列有键入dec cljnz KLoopmov cl, 0ffh ; 没有键按下, 返回 0ffh jmp Exit1Goon_:dec clshl cl, 2 ; 键值 = 列 X 4 + 行mov ch, 4LoopC:test al, 1jnz Exit1shr al, 1inc cldec chjnz LoopCExit1:mov dx, OUTBITmov al, 0out dx, almov ch, 0mov bx, offset KeyTableadd bx, cxmov al, [bx] ; 取出键码mov bl, alWaitRelease:mov dx, OUTBITmov al, 0out dx, al ; 等键释放 mov ah, 10call Delaycall TestKeyjne WaitReleasemov al, blretGetKey endp3.定时器设计图9. 定时中断服务子程序框图定时器设计的程序清单:IEnter proc nearpush axpush dxinc Secondmov al, Secondcmp al, 60jne Exitmov Second, 0inc Minutemov al, Minutecmp al, 60jne Exitmov Minute, 0inc Hourmov al, Hourcmp al, 24jne Exitmov Hour, 0Exit:mov dx, CS8259Amov al, 20h ; 中断服务程序结束指令out dx, alpop dxpop axiretIEnter endpIInit procmov dx, CS8259Amov al, ICW1out dx, almov dx, CS8259Bmov al, ICW2out dx, almov al, ICW4out dx, almov al, OCW1out dx, alretIInit endpstart proc nearmov ax, datamov ds, axmov Hour, 0mov Minute, 0mov Second, 0climov ax, 0mov ds, axmov al, 76h; 01110110B ; 计数器1,16位,方式3,二进制mov dx, CONTROLout dx, almov ax, 62500mov dx, COUNT1out dx, al ; 计数器低字节mov al, ahout dx, al ; 计数器高字节mov al, MD8255mov dx, CTL8255out dx, almov bx, 4*ICW2 ; 中断号mov ax, codeshl ax, 4 ; x 16add ax, offset IEnter ; 中断入口地址(段地址为0) mov [bx], axmov ax, 0inc bxinc bxmov [bx], ax ; 代码段地址为0call IInitmov ax, datamov ds, axmov CNT, 0 ; 计数值初始为0mov al, CNTmov dx, PA8255out dx, alstiLP: ; 等待中断,并计数。

mov al, Hourmov ah, 0mov cl, 10div clmov ch, ahmov ah, 0mov bx, offset LEDMAPadd bx, axmov al, [bx]mov LEDBuf, almov bx, offset LEDMAPmov al, chmov ah, 0add bx, axmov al, [bx]or al, 80hmov LEDBuf+1, almov al, Minutemov ah, 0mov cl, 10div clmov ch, ahmov ah, 0mov bx, offset LEDMAPadd bx, axmov al, [bx]mov LEDBuf+2, almov bx, offset LEDMAPmov al, chmov ah, 0add bx, axmov al, [bx]or al, 80hmov LEDBuf+3, almov al, Secondmov ah, 0mov cl, 10div clmov ch, ahmov ah, 0mov bx, offset LEDMAPadd bx, axmov al, [bx]mov LEDBuf+4, almov bx, offset LEDMAPmov al, chmov ah, 0add bx, axmov al, [bx]or al, 80hmov LEDBuf+5, alcall DisplayLEDjmp LPstart endp4.总程序设计将上述三个子模块的功能结合起来,把键盘输入的数据转换成十进制,分别赋给Hour、Minute、Second,电子时钟就实现了。

相关主题