led七段数码管数字钟_第1页
led七段数码管数字钟_第2页
led七段数码管数字钟_第3页
led七段数码管数字钟_第4页
led七段数码管数字钟_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、jiangsu teachers univercity of technology微机原理与接口技术课程设计报告 设 计 题 目: led七段数码管数字钟 学 院 名 称: 计算机科学与工程学院 专 业: 计算机科学与技术 班 级: 05计1 姓 名: 丁 琳 指导教师姓名: 白凤娥 指导教师职称: 教 授 设 计 成 绩: 评 阅 教 师: 评 阅 日 期: 2008年 12月 日目 录一、设计任务书3二、设计题目3三、设计方案3四、硬件原理41.七段数码管显示42.键盘扫描显示53.8253计数器和8259中断64.硬件连接6五、程序流程图及程序清单71.七段数码管显示82. 键盘扫描显示

2、93.定时器设计124.总程序设计15六、调试过程及结果29七、设计总结和体会30八、参考文献30ii一、设计任务书微机原理及接口技术是一门应用性、综合性、实践性较强的课程,没有实际的有针对性的设计环节,我们就不能很好的理解和掌握所学的技术知识,更缺乏解决实际问题的能力。所以通过有针对性的课程设计,会使我们学会系统地综合运用所学的理论知识,提高我们在微机应用方面的开发与设计本领,系统的掌握微机硬软件设计方法。通过课程设计实践,不仅要培养我们的实际动手能力,检验我们对本门课学习的情况,更要培养我们在实际的工程设计中查阅专业资料、工具书或参考书,掌握工程设计手段和软件工具,并能用设计报告表达设计思

3、想和结果的能力。培养我们实事求是和严肃认真的工作态度。通过设计过程,要求我们熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,使我们得到微机开发应用方面的初步训练。集体讨论设计题目的总体设计方案、编程、软件硬件调试、编写设计报告等问题,真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。通过本次课程设计,我们要熟练掌握微机系统与接口扩展电路的设计方法,熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。二、设计题目led七段数码管数字钟:1设计并完成led七段数码管数字钟电路。2数字钟显

4、示格式为:hh:mm:ss。 3具有通过键盘能够调整时、分、秒的功能。三、设计方案本设计采用lab6000伟福仿真实验箱,利用4mhz脉冲信号源和多级分频电路产生脉冲信号,4mhz脉冲信号经过f/64分频后得到62.5khz脉冲信号,将脉冲信号传递给8253定时器,定时器每0.000016秒中断一次,在中断服务程序中对中断次数进行计数,0.000016秒计数62500次就是1秒,然后在对秒计数得到分和小时值,并送入显示缓冲区,用总线方式控制数码管显示。同时,利用实验箱提供的键盘扫描电路和显示电路来调整时、分、秒。四、硬件原理1.七段数码管显示图1. 七段数码管七段数码管的字型代码表如下表:显示

5、字形gfedcba段码001111113fh1000011006h210110115bh310011114fh4110011066h511011016dh611111017dh7000011107h811111117fh911011116fha111011177hb11111007chc011100139hd10111105ehe111100179hf111000171h表1. 段数码管的字型代码表图2. 八段数码led显示电路实验箱提供了6位八段数码led显示电路,只要按地址输出相应数据,就可以实现对显示器的控制。将key/led cs接到cs0上,则实验箱中八位段码输出地址为08004h,

6、位码输出地址为08002h。2.键盘扫描显示图3. 键盘扫描电路实验箱提供了一个64的小键盘,将key/led cs信号接到cs0上,则列扫描地址为08002h,行码地址为08001h。向列扫描码地址逐列输入低电平,然后从行码地址读回。如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高。这样就可以通过输出的列码和读取的行码来判断按下的是什么键。在判断有键按下后,要有一定的时延,防止键盘抖动。3.8253计数器和8259中断图4. 8253计数器扩展电路图5. 8259中断扩展电路4.硬件连接8253用定时器/计数器1,8253片选接cs4,地址为0c000h,8253时钟

7、源clk1接分频电路的f/64输出,频器的fin接4mhz时钟,8253的gate1接vcc;8259中断int0接8253的out1,片选接cs5,地址为0d000h。显示电路的key/led cs 接cs0,地址为08000h。五、程序流程图及程序清单通过调查研究,查阅资料,我初步确定系统结构的总体方案,并依此画出了主程序框图:图6. 主程序框图根据主程序框图,要实现电子时钟,必须先实现七段数码管显示、键盘扫描显示、定时器以及将输入的键值转换为显示数据。为了实现上述四个功能,我又设计了三个子模块的流程图,并完成了相应的程序设计。1.七段数码管显示图7. 七段数码管显示子程序框图七段数码管显

8、示子程序清单:displayled proc near mov bx, offset ledbuf mov cl, 6 ; 共6个八段管 mov ah, 00100000b ; 从左边开始显示dloop: mov dx, outbit mov al, 0 out dx,al ; 关所有八段管 mov al, bx mov dx, outseg out dx,al mov dx, outbit mov al, ah out dx, al ; 显示一位八段管 push ax mov ah, 1 call delay pop ax shr ah, 1 inc bx dec cl jnz dloop

9、mov dx, outbit mov al, 0 out dx,al ; 关所有八段管 retdisplayled endp 2. 键盘扫描显示图8. 读键输入子程序框图键盘扫描子程序清单:testkey proc near ; 判断有无键入 mov dx, outbit mov al, 0 out dx, al ; 输出线置为0 mov dx, in_key in al, dx ; 读入键状态 not al and al, 0fh ; 高四位不用 rettestkey endp getkey proc near ; 读入键码 mov ch, 00100000b mov cl, 6kloop:

10、 mov dx, outbit mov al, ch ; 找出键所在列 not al out dx, al shr ch, 1 mov dx, in_key in al, dx not al and al, 0fh jne goon_ ; 该列有键入 dec cl jnz kloop mov cl, 0ffh ; 没有键按下, 返回 0ffh jmp exit1goon_: dec cl shl cl, 2 ; 键值 = 列 x 4 + 行 mov ch, 4loopc: test al, 1 jnz exit1 shr al, 1 inc cl dec ch jnz loopcexit1:

11、mov dx, outbit mov al, 0 out dx, al mov ch, 0 mov bx, offset keytable add bx, cx mov al, bx ; 取出键码 mov bl, alwaitrelease: mov dx, outbit mov al, 0 out dx, al ; 等键释放 mov ah, 10 call delay call testkey jne waitrelease mov al, bl retgetkey endp3.定时器设计 图9. 定时中断服务子程序框图定时器设计的程序清单:ienter proc near push ax

12、push dx inc second mov al, second cmp al, 60 jne exit mov second, 0 inc minute mov al, minute cmp al, 60 jne exit mov minute, 0 inc hour mov al, hour cmp al, 24 jne exit mov hour, 0exit: mov dx, cs8259a mov al, 20h ; 中断服务程序结束指令 out dx, al pop dx pop ax iretienter endpiinit proc mov dx, cs8259a mov a

13、l, icw1 out dx, al mov dx, cs8259b mov al, icw2 out dx, al mov al, icw4 out dx, al mov al, ocw1 out dx, al retiinit endpstart proc near mov ax, data mov ds, ax mov hour, 0 mov minute, 0 mov second, 0 cli mov ax, 0 mov ds, ax mov al, 76h; 01110110b ; 计数器1,16位,方式3,二进制 mov dx, control out dx, al mov ax

14、, 62500 mov dx, count1 out dx, al ; 计数器低字节 mov al, ah out dx, al ; 计数器高字节 mov al, md8255 mov dx, ctl8255 out dx, al mov bx, 4*icw2 ; 中断号 mov ax, code shl ax, 4 ; x 16 add ax, offset ienter ; 中断入口地址(段地址为0) mov bx, ax mov ax, 0 inc bx inc bx mov bx, ax ; 代码段地址为0 call iinit mov ax, data mov ds, ax mov

15、cnt, 0 ; 计数值初始为0 mov al, cnt mov dx, pa8255 out dx, al stilp: ; 等待中断,并计数。 mov al, hour mov ah, 0 mov cl, 10 div cl mov ch, ah mov ah, 0 mov bx, offset ledmap add bx, ax mov al, bx mov ledbuf, al mov bx, offset ledmap mov al, ch mov ah, 0 add bx, ax mov al, bx or al, 80h mov ledbuf+1, al mov al, minu

16、te mov ah, 0 mov cl, 10 div cl mov ch, ah mov ah, 0 mov bx, offset ledmap add bx, ax mov al, bx mov ledbuf+2, al mov bx, offset ledmap mov al, ch mov ah, 0 add bx, ax mov al, bx or al, 80h mov ledbuf+3, al mov al, second mov ah, 0 mov cl, 10 div cl mov ch, ah mov ah, 0 mov bx, offset ledmap add bx,

17、ax mov al, bx mov ledbuf+4, al mov bx, offset ledmap mov al, ch mov ah, 0 add bx, ax mov al, bx or al, 80h mov ledbuf+5, al call displayled jmp lpstart endp4.总程序设计将上述三个子模块的功能结合起来,把键盘输入的数据转换成十进制,分别赋给hour、minute、second,电子时钟就实现了。总程序清单:turbo assembler version 3.0 08/12/25 11:21:36 page 1f:05141101dd.asm

18、 1 =c003 control equ 0c003h 2 =c000 count0 equ 0c000h 3 =c001 count1 equ 0c001h 4 =c002 count2 equ 0c002h 5 6 =0082 md8255 equ 82h ; 8255 工作方式 7 =8000 pa8255 equ 8000h ; 8255 pa口输出地址 8 =8003 ctl8255 equ 8003h ; 8255 控制口地址 9 =8001 in_key equ 08001h ; 键盘读入口 10 11 =8002 outbit equ 08002h ; 位控制口 12 =800

19、4 outseg equ 08004h ; 段控制口 13 14 =0013 icw1 equ 00010011b ; 单片8259, 上升沿中断, 要写icw4 15 =0020 icw2 equ 00100000b ; 中断号为20h 16 =0001 icw4 equ 00000001b ; 工作在8086/88 方式 17 =00fe ocw1 equ 11111110b ; 只响应int0 中断 18 =d000 cs8259a equ 0d000h ; 8259地址 19 =d001 cs8259b equ 0d001h 20 210000 data segment 220000

20、00 cnt db0 230001 00 hour db0 240002 00 minute db0 250003 00 second db0 260004 06*(?) ledbuf db6 dup(?) ; 显示缓冲 27000a 01*(?) num db1 dup(?) ; 显示的数据 28000b 01*(?) delayt db1 dup(?) 29000c 06*(?) dinglin db 6 dup(?) 300012 ledmap: ; 八段管显示码 310012 3f 06 5b 4f 66 6d7d+ db 3fh, 06h, 5bh, 4fh, 66h, 6dh,7d

21、h, 07h 32 07 33001a 7f 6f 77 7c 39 5e79+ db 7fh, 6fh, 77h, 7ch, 39h, 5eh,79h, 71h 34 71 350022 keytable: ; 键码定义 360022 16 15 14 ff db 16h, 15h, 14h, 0ffh 370026 13 12 11 10 db 13h, 12h, 11h, 10h 38002a 0d 0c 0b 0a db 0dh, 0ch, 0bh, 0ah 39002e 0e 03 06 09 db 0eh, 03h, 06h, 09h 400032 0f 02 05 08 db 0

22、fh, 02h, 05h, 08h 410036 00 01 04 07 db 00h, 01h, 04h, 07h 42003a data ends 43 440000 code segment 45 assume cs:code, ds:data 46 470000 delay proc near 480000 50 push ax; 延时子程序 490001 51 push cx 50 510002 b0 00 mov al, 0 520004 8b c8 mov cx,ax 530006 e2 fe loop $ 54 550008 59 pop cx 560009 58 pop ax

23、 57000a c3 retturbo assembler version 3.0 08/12/25 11:21:36 page 2f:05141101dd.asm 58000b delay endp 59 60000b displayledproc near 61000b bb 0004r mov bx, offset ledbuf 62000e b1 06 mov cl, 6; 共6个八段管 630010 b4 20 mov ah, 00100000b; 从左边开始显示 640012 dloop: 650012 ba 8002 mov dx, outbit 660015 b0 00 mov

24、 al, 0 670017 ee out dx,al; 关所有八段管 680018 8a 07 mov al, bx 69001a ba 8004 mov dx, outseg 70001d ee out dx,al 71 72001e ba 8002 mov dx, outbit 730021 8a c4 mov al, ah 740023 ee out dx, al ; 显示一位八段管 75 760024 50 push ax 770025 b4 01 mov ah, 1 780027 e8 ffd6 call delay 79002a 58 pop ax 80 81002b d0 ec

25、shr ah, 1 82002d 43 inc bx 83002e fe c9 dec cl 840030 75 e0 jnz dloop 85 860032 ba 8002 mov dx, outbit 870035 b0 00 mov al, 0 880037 ee out dx,al ; 关所有八段管 890038 c3 ret 900039 displayledendp 91 92 930039 testkey proc near 940039 ba 8002 mov dx, outbit 95003c b0 00 mov al, 0 96003e ee out dx, al ; 输出

26、线置为0 97003f ba 8001 mov dx, in_key 980042 ec in al, dx ; 读入键状态 99 1000043 f6 d0 not al 1010045 24 0f and al, 0fh ; 高四位不用 1020047 c3 ret 1030048 testkey endp 104 1050048 getkey proc near 1060048 b5 20 mov ch, 00100000b 107004a b1 06 mov cl, 6 108004c kloop: 109004c ba 8002 mov dx, outbit 110004f 8a c

27、5 mov al, ch ; 找出键所在列 1110051 f6 d0 not al 1120053 ee out dx, al 1130054 d0 ed shr ch, 1 114turbo assembler version 3.0 08/12/25 11:21:36 page 3f:05141101dd.asm 1150056 ba 8001 mov dx, in_key 1160059 ec in al, dx 117005a f6 d0 not al 118005c 24 0f and al, 0fh 119005e 75 09 jne goon_ ; 该列有键入 1200060

28、fe c9 dec cl 1210062 75 e8 jnz kloop 122 1230064 b1 ff mov cl, 0ffh ;没有键按下, 返回 0ffh 1240066 eb 15 90 jmp exit1 1250069 goon_: 1260069 fe c9 dec cl 127006b d0 e1 d0 e1 shl cl, 2 ;键值 = 列 x 4 +行 128 129006f b5 04 mov ch, 4 1300071 loopc: 1310071 a8 01 test al, 1 1320073 75 08 jnz exit1 1330075 d0 e8 sh

29、r al, 1 1340077 fe c1 inc cl 1350079 fe cd dec ch 136007b 75 f4 jnz loopc 137007d exit1: 138007d ba 8002 mov dx, outbit 1390080 b0 00 mov al, 0 1400082 ee out dx, al 141 1420083 b5 00 mov ch, 0 1430085 bb 0022r mov bx, offset keytable 1440088 03 d9 add bx, cx 145008a 8a 07 mov al, bx ; 取出键码 146008c

30、8a d8 mov bl, al 147 148008e waitrelease: 149008e ba 8002 mov dx, outbit 1500091 b0 00 mov al, 0 1510093 ee out dx, al ; 等键释放 152 1530094 b4 0a mov ah, 10 1540096 e8 ff67 call delay 1550099 e8 ff9d call testkey 156009c 75 f0 jne waitrelease 157009e 8a c3 mov al, bl 15800a0 c3 ret 15900a1 getkey endp

31、 160 16100a1 ienter proc near 16200a1 50 push ax 16300a2 52 push dx 164 16500a3 fe 06 0003r inc second 16600a7 a0 0003r mov al, second 16700aa 3c 3c cmp al, 60 16800ac 75 25 jne exit 169 17000ae c6 06 0003r 00 mov second, 0 17100b3 fe 06 0002r inc minuteturbo assembler version 3.0 08/12/25 11:21:36

32、page 4f:05141101dd.asm 17200b7 a0 0002r mov al, minute 17300ba 3c 3c cmp al, 60 17400bc 75 15 jne exit 175 17600be c6 06 0002r 00 mov minute, 0 17700c3 fe 06 0001r inc hour 17800c7 a0 0001r mov al, hour 17900ca 3c 18 cmp al, 24 18000cc 75 05 jne exit 181 18200ce c6 06 0001r 00 mov hour,0 18300d3 exi

33、t: 18400d3 ba d000 mov dx, cs8259a 18500d6 b0 20 mov al, 20h ; 中断服务程序结束指令 18600d8 ee out dx, al 187 18800d9 5a pop dx 18900da 58 pop ax 19000db cf iret 19100dc ienter endp 192 19300dc iinit proc 19400dc ba d000 mov dx, cs8259a 19500df b0 13 mov al, icw1 19600e1 ee out dx, al 197 19800e2 ba d001 mov

34、dx, cs8259b 19900e5 b0 20 mov al, icw2 20000e7 ee out dx, al 201 20200e8 b0 01 mov al, icw4 20300ea ee out dx, al 204 20500eb b0 fe mov al, ocw1 20600ed ee out dx, al 20700ee c3 ret 20800ef iinit endp 209 21000ef start proc near 21100ef b8 0000s mov ax, data 21200f2 8e d8 mov ds, ax 213 21400f4 c6 0

35、6 0004r 3f mov ledbuf, 03fh ; 显示 00.00.00 21500f9 c6 06 0005r bf mov ledbuf+1, 0bfh 21600fe c6 06 0006r 3f mov ledbuf+2, 03fh 2170103 c6 06 0007r bf mov ledbuf+3, 0bfh 2180108 c6 06 0008r 3f mov ledbuf+4, 03fh 219010d c6 06 0009r 3f mov ledbuf+5, 03fh 220 221 2220112 c6 06 0001r 00 mov hour, 0 22301

36、17 c6 06 0002r 00 mov minute, 0 224011c c6 06 0003r 00 mov second, 0 225 2260121 fa cli 2270122 b8 0000 mov ax, 0 2280125 8e d8 mov ds, axturbo assembler version 3.0 08/12/25 11:21:36 page 5f:05141101dd.asm 229 2300127 b0 76 mov al, 76h; 01110110b ;计数器1,16位,方式3,二进制 2310129 ba c003 mov dx, control 23

37、2012c ee out dx, al 233 234012d b8 f424 mov ax, 62500 2350130 ba c001 mov dx, count1 2360133 ee out dx, al ;计数器低字节 2370134 8a c4 mov al, ah 2380136 ee out dx, al ;计数器高字节 239 2400137 b0 82 mov al, md8255 2410139 ba 8003 mov dx, ctl8255 242013c ee out dx, al 243 244013d bb 0080 mov bx, 4*icw2 ;中断号 245 2460140 b8 0000s mov ax, code 2470143 d1 e0 d1 e0 d1 e0d1+ shl ax, 4 ;x 16 248 e0 249014b 05 00a1r add ax, offset ienter ;中断入口地址(段地址为0) 250014e 89 07 mov bx,ax 251 2520150 b8 0000 mov ax, 0 2

温馨提示

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

评论

0/150

提交评论