设计题目LED七段数码管数字钟.docx

上传人:b****5 文档编号:28870072 上传时间:2023-07-20 格式:DOCX 页数:41 大小:188.76KB
下载 相关 举报
设计题目LED七段数码管数字钟.docx_第1页
第1页 / 共41页
设计题目LED七段数码管数字钟.docx_第2页
第2页 / 共41页
设计题目LED七段数码管数字钟.docx_第3页
第3页 / 共41页
设计题目LED七段数码管数字钟.docx_第4页
第4页 / 共41页
设计题目LED七段数码管数字钟.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

设计题目LED七段数码管数字钟.docx

《设计题目LED七段数码管数字钟.docx》由会员分享,可在线阅读,更多相关《设计题目LED七段数码管数字钟.docx(41页珍藏版)》请在冰豆网上搜索。

设计题目LED七段数码管数字钟.docx

设计题目LED七段数码管数字钟

 

设计题目:

LED七段数码管数字钟

学院名称:

计算机科学与工程学院

专业:

计算机科学与技术

班级:

05计1

*****

指导教师姓名:

白凤娥

指导教师职称:

教授

设计成绩:

评阅教师:

评阅日期:

 

2008年12月日

 

一、设计任务书

《微机原理及接口技术》是一门应用性、综合性、实践性较强的课程,没有实际的有针对性的设计环节,我们就不能很好的理解和掌握所学的技术知识,更缺乏解决实际问题的能力。

所以通过有针对性的课程设计,会使我们学会系统地综合运用所学的理论知识,提高我们在微机应用方面的开发与设计本领,系统的掌握微机硬软件设计方法。

通过课程设计实践,不仅要培养我们的实际动手能力,检验我们对本门课学习的情况,更要培养我们在实际的工程设计中查阅专业资料、工具书或参考书,掌握工程设计手段和软件工具,并能用设计报告表达设计思想和结果的能力。

培养我们实事求是和严肃认真的工作态度。

通过设计过程,要求我们熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,使我们得到微机开发应用方面的初步训练。

集体讨论设计题目的总体设计方案、编程、软件硬件调试、编写设计报告等问题,真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。

通过本次课程设计,我们要熟练掌握微机系统与接口扩展电路的设计方法,熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。

二、设计题目

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

3fh

1

0

0

0

0

1

1

0

06h

2

1

0

1

1

0

1

1

5bh

3

1

0

0

1

1

1

1

4fh

4

1

1

0

0

1

1

0

66h

5

1

1

0

1

1

0

1

6dh

6

1

1

1

1

1

0

1

7dh

7

0

0

0

0

1

1

1

07h

8

1

1

1

1

1

1

1

7fh

9

1

1

0

1

1

1

1

6fh

A

1

1

1

0

1

1

1

77h

B

1

1

1

1

1

0

0

7ch

C

0

1

1

1

0

0

1

39h

D

1

0

1

1

1

1

0

5eh

E

1

1

1

1

0

0

1

79h

F

1

1

1

0

0

0

1

71h

表1.段数码管的字型代码表

图2.八段数码LED显示电路

实验箱提供了6位八段数码LED显示电路,只要按地址输出相应数据,就可以实现对显示器的控制。

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

2.键盘扫描显示

图3.键盘扫描电路

实验箱提供了一个6×4的小键盘,将KEY/LEDCS信号接到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/LEDCS接CS0,地址为08000H。

五、程序流程图及程序清单

通过调查研究,查阅资料,我初步确定系统结构的总体方案,并依此画出了主程序框图:

图6.主程序框图

根据主程序框图,要实现电子时钟,必须先实现七段数码管显示、键盘扫描显示、定时器以及将输入的键值转换为显示数据。

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

1.七段数码管显示

图7.七段数码管显示子程序框图

七段数码管显示子程序清单:

DisplayLEDprocnear

movbx,offsetLEDBuf

movcl,6;共6个八段管

movah,00100000b;从左边开始显示

DLoop:

movdx,OUTBIT

moval,0

outdx,al;关所有八段管

moval,[bx]

movdx,OUTSEG

outdx,al

movdx,OUTBIT

moval,ah

outdx,al;显示一位八段管

pushax

movah,1

callDelay

popax

shrah,1

incbx

deccl

jnzDLoop

movdx,OUTBIT

moval,0

outdx,al;关所有八段管

ret

DisplayLEDendp

2.键盘扫描显示

图8.读键输入子程序框图

键盘扫描子程序清单:

TestKeyprocnear;判断有无键入

movdx,OUTBIT

moval,0

outdx,al;输出线置为0

movdx,IN_KEY

inal,dx;读入键状态

notal

andal,0fh;高四位不用

ret

TestKeyendp

GetKeyprocnear;读入键码

movch,00100000b

movcl,6

KLoop:

movdx,OUTBIT

moval,ch;找出键所在列

notal

outdx,al

shrch,1

movdx,IN_KEY

inal,dx

notal

andal,0fh

jneGoon_;该列有键入

deccl

jnzKLoop

movcl,0ffh;没有键按下,返回0ffh

jmpExit1

Goon_:

deccl

shlcl,2;键值=列X4+行

movch,4

LoopC:

testal,1

jnzExit1

shral,1

inccl

decch

jnzLoopC

Exit1:

movdx,OUTBIT

moval,0

outdx,al

movch,0

movbx,offsetKeyTable

addbx,cx

moval,[bx];取出键码

movbl,al

WaitRelease:

movdx,OUTBIT

moval,0

outdx,al;等键释放

movah,10

callDelay

callTestKey

jneWaitRelease

moval,bl

ret

GetKeyendp

3.定时器设计

图9.定时中断服务子程序框图

定时器设计的程序清单:

IEnterprocnear

pushax

pushdx

incSecond

moval,Second

cmpal,60

jneExit

movSecond,0

incMinute

moval,Minute

cmpal,60

jneExit

movMinute,0

incHour

moval,Hour

cmpal,24

jneExit

movHour,0

Exit:

movdx,CS8259A

moval,20h;中断服务程序结束指令

outdx,al

popdx

popax

iret

IEnterendp

IInitproc

movdx,CS8259A

moval,ICW1

outdx,al

movdx,CS8259B

moval,ICW2

outdx,al

moval,ICW4

outdx,al

moval,OCW1

outdx,al

ret

IInitendp

startprocnear

movax,data

movds,ax

movHour,0

movMinute,0

movSecond,0

cli

movax,0

movds,ax

moval,76h;01110110B;计数器1,16位,方式3,二进制

movdx,CONTROL

outdx,al

movax,62500

movdx,COUNT1

outdx,al;计数器低字节

moval,ah

outdx,al;计数器高字节

moval,MD8255

movdx,CTL8255

outdx,al

movbx,4*ICW2;中断号

movax,code

shlax,4;x16

addax,offsetIEnter;中断入口地址(段地址为0)

mov[bx],ax

movax,0

incbx

incbx

mov[bx],ax;代码段地址为0

callIInit

movax,data

movds,ax

movCNT,0;计数值初始为0

moval,CNT

movdx,PA8255

outdx,al

sti

LP:

;等待中断,并计数。

moval,Hour

movah,0

movcl,10

divcl

movch,ah

movah,0

movbx,offsetLEDMAP

addbx,ax

moval,[bx]

movLEDBuf,al

movbx,offsetLEDMAP

moval,ch

movah,0

addbx,ax

moval,[bx]

oral,80h

movLEDBuf+1,al

moval,Minute

movah,0

movcl,10

divcl

movch,ah

movah,0

movbx,offsetLEDMAP

addbx,ax

moval,[bx]

movLEDBuf+2,al

movbx,offsetLEDMAP

moval,ch

movah,0

addbx,ax

moval,[bx]

oral,80h

movLEDBuf+3,al

moval,Second

movah,0

movcl,10

divcl

movch,ah

movah,0

movbx,offsetLEDMAP

addbx,ax

moval,[bx]

movLEDBuf+4,al

movbx,offsetLEDMAP

moval,ch

movah,0

addbx,ax

moval,[bx]

oral,80h

movLEDBuf+5,al

callDisplayLED

jmpLP

startendp

4.总程序设计

将上述三个子模块的功能结合起来,把键盘输入的数据转换成十进制,分别赋给Hour、Minute、Second,电子时钟就实现了。

总程序清单:

TurboAssemblerVersion3.008/12/2511:

21:

36Page1

F:

\05141101\DD.ASM

 

1=C003CONTROLequ0c003h

2=C000COUNT0equ0c000h

3=C001COUNT1equ0c001h

4=C002COUNT2equ0c002h

5

6=0082md8255equ82h;8255工作方式

7=8000PA8255equ8000h;8255PA口输出地址

8=8003CTL8255equ8003h;8255控制口地址

9=8001IN_KEYequ08001h;键盘读入口

10

11=8002OUTBITequ08002h;位控制口

12=8004OUTSEGequ08004h;段控制口

13

14=0013ICW1equ00010011b;单片8259,上升沿中断,要写ICW4

15=0020ICW2equ00100000b;中断号为20H

16=0001ICW4equ00000001b;工作在8086/88方式

17=00FEOCW1equ11111110b;只响应INT0中断

18=D000CS8259Aequ0d000h;8259地址

19=D001CS8259Bequ0d001h

20

210000datasegment

22000000CNTdb0

23000100Hourdb0

24000200Minutedb0

25000300Seconddb0

26000406*(?

?

)LEDBufdb6dup(?

);显示缓冲

27000A01*(?

?

)Numdb1dup(?

);显示的数据

28000B01*(?

?

)DelayTdb1dup(?

29000C06*(?

?

)dinglindb6dup(?

300012LEDMAP:

;八段管显示码

3100123F065B4F666D7D+db3fh,06h,5bh,4fh,66h,6dh,7dh,07h

3207

33001A7F6F777C395E79+db7fh,6fh,77h,7ch,39h,5eh,79h,71h

3471

350022KeyTable:

;键码定义

360022161514FFdb16h,15h,14h,0ffh

37002613121110db13h,12h,11h,10h

38002A0D0C0B0Adb0dh,0ch,0bh,0ah

39002E0E030609db0eh,03h,06h,09h

4000320F020508db0fh,02h,05h,08h

41003600010407db00h,01h,04h,07h

42003Adataends

43

440000codesegment

45assumecs:

code,ds:

data

46

470000Delayprocnear

48000050pushax;延时子程序

49000151pushcx

50

510002B000moval,0

5200048BC8movcx,ax

530006E2FEloop$

54

55000859popcx

56000958popax

57000AC3ret

TurboAssemblerVersion3.008/12/2511:

21:

36Page2

F:

\05141101\DD.ASM

 

58000BDelayendp

59

60000BDisplayLEDprocnear

61000BBB0004rmovbx,offsetLEDBuf

62000EB106movcl,6;共6个八段管

630010B420movah,00100000b;从左边开始显示

640012DLoop:

650012BA8002movdx,OUTBIT

660015B000moval,0

670017EEoutdx,al;关所有八段管

6800188A07moval,[bx]

69001ABA8004movdx,OUTSEG

70001DEEoutdx,al

71

72001EBA8002movdx,OUTBIT

7300218AC4moval,ah

740023EEoutdx,al;显示一位八段管

75

76002450pushax

770025B401movah,1

780027E8FFD6callDelay

79002A58popax

80

81002BD0ECshrah,1

82002D43incbx

83002EFEC9deccl

84003075E0jnzDLoop

85

860032BA8002movdx,OUTBIT

870035B000moval,0

880037EEoutdx,al;关所有八段管

890038C3ret

900039DisplayLEDendp

91

92

930039TestKeyprocnear

940039BA8002movdx,OUTBIT

95003CB000moval,0

96003EEEoutdx,al;输出线置为0

97003FBA8001movdx,IN_KEY

980042ECinal,dx;读入键状态

99

1000043F6D0notal

1010045240Fandal,0fh;高四位不用

1020047C3ret

1030048TestKeyendp

104

1050048GetKeyprocnear

1060048B520movch,00100000b

107004AB106movcl,6

108004CKLoop:

109004CBA8002movdx,OUTBIT

110004F8AC5moval,ch;找出键所在列

1110051F6D0notal

1120053EEoutdx,al

1130054D0EDshrch,1

114

TurboAssemblerVersion3.008/12/2511:

21:

36Page3

F:

\05141101\DD.ASM

 

1150056BA8001movdx,IN_KEY

1160059ECinal,dx

117005AF6D0notal

118005C240Fandal,0fh

119005E7509jneGoon_;该列有键入

1200060FEC9deccl

121006275E8jnzKLoop

122

1230064B1FFmovcl,0ffh;没有键按下,返回0ffh

1240066EB1590jmpExit1

1250069Goon_:

1260069FEC9deccl

127006BD0E1D0E1shlcl,2;键值=列X4+行

128

129006FB504movch,4

1300071LoopC:

1310071A801testal,1

13200737508jnzExit1

1330075D0E8shral,1

1340077FEC1inccl

1350079FECDdecch

136007B75F4jnzLoopC

137007DExit1:

138007DBA8002movdx,OUTBIT

1390080B000moval,0

1400082EEoutdx,al

141

1420083B500movch,0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 中职中专

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

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