资源描述
河北科技大学
《接口技术》课程设计报告
学生姓名: 学 号:
专业班级:
课程名称:
学年学期: 2 0 —2 0 学年第 学期
指导教师:
2 0 年 月
课程设计成绩评定表
学生姓名
学 号
成绩
专业班级
起止时间
设计题目
验
收
内
容
课程设计小组验收结果:
硬件设计:优秀□ 良好□ 中等□ 及格□ 需努力□
程序设计:优秀□ 良好□ 中等□ 及格□ 需努力□
实验结果:优秀□ 良好□ 中等□ 及格□ 需努力□
课程设计个人验收结果:
操作能力:优秀□ 良好□ 中等□ 及格□ 需努力□
软件理解:优秀□ 良好□ 中等□ 及格□ 需努力□
硬件理解:优秀□ 良好□ 中等□ 及格□ 需努力□
指导教师:
年 月 日
目 录
一、设计题目: 2
二、设计目的: 2
三、设计原理及方案: 2
1、实验电路图 2
2、实验框图 3
3、各功能实现方案 4
4、实验程序 4
四、实验方法 9
1、实验电路测试 9
2、软件测试 9
五、实验结果 9
六、改进意见及建议 9
七、设计体会 9
1
一、设计题目:
实现特定功能的键盘及LED显示。
二、设计目的:
1、掌握键盘和显示器的接口方法和编程方法。
2、掌握键盘扫描和LED八段码显示器的工作原理。
三、设计原理及方案:
1、实验电路图
2
说明:使用PC机与伟福lab8000实验箱连接起来,安装好相应驱动,做好接线分析,由于lab8000实验箱已经将部分电路接线内置,所以接线仅需要将KEY/LED_CS选通端口与CS0相连即可。
2、实验框图
是
是
否
开始
输出列扫描信号
列扫描信号移位
该列有键输入?
读入行信号
返回
6列扫描完?
初始化地址参数
读键输入子程序框图(接下页)
开始
显示缓冲区初始化
LED显示
读取键值
键值转换为显示数据
有键输入?
是
否
主程序框图
(接上页)
按照行列计算键值
查表得键码
等待按键释放
返回
3、各功能实现方案
(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键数码管由左到右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: ; 八段管显示码
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, 08h
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
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 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
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 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 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 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
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
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 [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
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: mov [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 MLoop
jmp p4
MLoop:
call DisplayLED ; 显示
call TestKey ; 有键入?
je MLoop ; 无键入, 继续显示
call GetKey ; 读入键码
and al, 0fh ; 显示键码
cmp al,01h
jz mmpp1
cmp al,02h
jz mmpp2
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
四、实验方法
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次后不再闪烁。这项功能的实现需要加入中断技术,通过边沿触发中断,执行中断服务子程序,进而达到效果。
七、设计体会
本次课程设计,我看到了自己许多不足之处。这次课程设计完全改变了我以前的错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完成的任务,画程序方框图是很有必要的。因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。 通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到了各种各样的问题,在这些问题中也认识到了自己的种种不足,对以前所学过的知识理解得不够深刻,掌握得不够牢固。其实这也给了我一个警告,在今后的学习中,我力争扎实学习。
10
展开阅读全文