1、 河北科技大学 《接口技术》课程设计报告 学生姓名: 学 号: 专业班级: 课程名称: 学年学期: 2 0 —2 0 学年第 学期 指导教师: 2 0 年 月 课程设计成绩评定表 学生姓名 学 号 成绩 专业班级 起止时间
2、 设计题目 验 收 内 容 课程设计小组验收结果: 硬件设计:优秀□ 良好□ 中等□ 及格□ 需努力□ 程序设计:优秀□ 良好□ 中等□ 及格□ 需努力□ 实验结果:优秀□ 良好□ 中等□ 及格□ 需努力□ 课程设计个人验收结果: 操作能力:优秀□ 良好□ 中等□ 及格□ 需努力□ 软件理解:优秀□ 良好□ 中等□ 及格□ 需努力□ 硬件理解:优秀□ 良好□ 中等□ 及格□ 需努力□ 指导教师:
3、 年 月 日 目 录 一、设计题目: 2 二、设计目的: 2 三、设计原理及方案: 2 1、实验电路图 2 2、实验框图 3 3、各功能实现方案 4 4、实验程序 4 四、实验方法 9 1、实验电路测试 9 2、软件测试 9 五、实验结果 9 六、改进意见及建议 9 七、设计体会 9 1 一、设计题目: 实现特定功能的键盘及LED显示。 二、设计目的: 1、掌握键盘和显示
4、器的接口方法和编程方法。 2、掌握键盘扫描和LED八段码显示器的工作原理。 三、设计原理及方案: 1、实验电路图 2 说明:使用PC机与伟福lab8000实验箱连接起来,安装好相应驱动,做好接线分析,由于lab8000实验箱已经将部分电路接线内置,所以接线仅需要将KEY/LED_CS选通端口与CS0相连即可。 2、实验框图 是 是 否 开始 输出列扫描信号 列扫描信号移位 该列有键输入? 读入行信号 返回 6列扫描完? 初始化地址参数 读键输入子程序框图
5、接下页) 开始 显示缓冲区初始化 LED显示 读取键值 键值转换为显示数据 有键输入? 是 否 主程序框图 (接上页) 按照行列计算键值 查表得键码 等待按键释放 返回 3、各功
6、能实现方案 (1)功能1:按1键显示年 当读取到寄存器AL=02H时,说明按键为1号键。关于显示年份,首先定义一个显示缓冲区,用于存储表示年份的数字。然后依次读取其值,再显示到数码管上。 (2)功能2:按2显示月日 当读取到寄存器AL=0AH时,说明按键为2号键。显示月日方法和显示年份一样,首先定义一个显示缓冲区,用于存储表示月日的数字。然后依次读取其值,再显示与数码管上。 (3)功能3:按3显示GOOD 将G,O,O,D分别以七段代码6FH,3FH,3FH,5EH代替,以显示GOOD字样。然后清空LED数码管的显示,通过延时,让GOOD字样显示与数码管。 (4)功能4:按4键数
7、码管由左到右8字循环显示 当8279扫描寄存器AL=01H时,说明按键为4号键。通过设置循环及延迟及上述相似的方法显示出指定效果。 4、实验程序 OUTBIT equ 08002h ; 位控制口 OUTSEG equ 08004h ; 段控制口 IN_KEY equ 08001h ; 键盘读入口 data segment LEDBuf db 6 dup(?) ; 显示缓冲 Num db 1 dup(?) ; 显示的数据 DelayT db 1 dup(?) LEDMAP: ; 八段管显示码
8、 db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h KeyTable: ; 键码定义 db 16h, 15h, 14h, 0ffh db 13h, 12h, 11h, 10h db 0dh, 0ch, 0bh, 0ah db 0eh, 03h, 06h, 09h db 0fh, 02h, 05h, 0
9、8h db 00h, 01h, 04h, 07h data ends 4 code segment assume cs:code, ds:data Delay proc near push ax ; 延时子程序 push cx mov al, 0 mov cx,ax loop $ pop cx pop ax ret Delay endp
10、Delay1 proc near push ax ; 延时子程序 push cx mov al, 0 mov cx,38000 loop $ pop cx pop ax ret Delay1 endp DisplayLED proc near mov bx, offset LEDBuf mov cl, 6 ; 共6个八段管 mov
11、 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 5
12、 mov ah, 1 call Delay pop ax shr ah, 1 inc bx dec cl jnz DLoop mov dx, OUTBIT mov al, 0 out dx,al ; 关所有八段管 ret DisplayLED endp TestKey proc near mov dx, OUTBIT mov
13、 al, 0 out dx, al ; 输出线置为0 mov dx, IN_KEY in al, dx ; 读入键状态 not al and al, 0fh ; 高四位不用 ret TestKey endp GetKey proc near mov ch, 00100000b mov cl, 6 KLoop: mov dx, OUTBIT mov a
14、l, 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
15、 Exit1 Goon_: dec cl shl cl, 2 ; 键值 = 列 X 4 + 行 mov ch, 4 LoopC: test al, 1 jnz Exit1 shr al, 1 inc cl dec ch jnz LoopC Exit1: mov dx, OUTBIT mov al, 0 out dx, al
16、 mov ch, 0 mov bx, offset KeyTable add bx, cx mov al, [bx] ; 取出键码 mov bl, al WaitRelease: mov dx, OUTBIT mov al, 0 out dx, al ; 等键释放 mov ah, 10 call Delay call TestKey
17、 jne WaitRelease mov al, bl ret GetKey endp Start proc near mov ax, data mov ds, ax mov di,offset LEDBuf p1: mov di,offset LEDBuf mov [di], 05bh ; 显示 2015. mov [di+1], 03fh mov [di+2], 03fh mov
18、[di+3], 0ffh mov [di+4], 0 mov [di+5], 06h jmp MLoop p2: mov di,offset LEDBuf mov [di], 03fh ; 显示 08.08. mov [di+1], 0ffh mov [di+2], 03fh mov [di+3], 0ffh mov [di+4], 0 mov [di+5], 5bh jmp MLoop
19、 p3: mov di,offset LEDBuf mov [di],6fh ;显示good mov [di+1],5ch mov [di+2],5ch mov [di+3],0deh mov [di+4],0 mov [di+5],4fh jmp MLoop p4: push cx mov cx,08h mov bx,offset LEDBuf p4l: m
20、ov [bx],00 inc bx loop p4l pop cx mov [di], 7fh ; 显示 8 inc di cmp di,offset LEDBuf + 06h jnz next mov di,offset LEDBuf next: call delay1 call DisplayLED ; 显示 call TestKey jne MLo
21、op jmp p4 MLoop: call DisplayLED ; 显示 call TestKey ; 有键入? je MLoop ; 无键入, 继续显示 call GetKey ; 读入键码 and al, 0fh ; 显示键码 cmp al,01h jz mmpp1 cmp al,02h jz mmpp2
22、 cmp al,03h jz p3 cmp al,04h jz p4 mov ah, 0 mov bx, offset LEDMAP add bx, ax mov al, [bx] mov LEDBuf+5, al jmp MLoop mmpp1: jmp p1 mmpp2: jmp p2 Start endp code ends end start
23、四、实验方法 1、实验电路测试 (1) 将KEY/LED_CS选通端口与CS0相连。 (2) 接通电源,检查LED数码管是否正常工作。 2、软件测试 (1) 将实验箱连接电脑,调试运行试验程序。 (2) 按实验要求一次按下1至4号按键进行测试,观察LED数码管反应。 五、实验结果 1、 按下1键:LED显示“2015.”。 2、 按下2键:LED显示“06.13”。 3、 按下3键:LED显示“GOOD”。 4、 按下4键:LED从左至右循环显示“8”。 六、改进意见及建议 可以在实现基本效果的基础上在添加一些特效显示。例如,将特定数字或字母进行闪烁显示,闪烁10次后
24、不再闪烁。这项功能的实现需要加入中断技术,通过边沿触发中断,执行中断服务子程序,进而达到效果。 七、设计体会 本次课程设计,我看到了自己许多不足之处。这次课程设计完全改变了我以前的错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完成的任务,画程序方框图是很有必要的。因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。 通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到了各种各样的问题,在这些问题中也认识到了自己的种种不足,对以前所学过的知识理解得不够深刻,掌握得不够牢固。其实这也给了我一个警告,在今后的学习中,我力争扎实学习。 10






