实现特定功能键盘及LED显示接口课程设计.docx
《实现特定功能键盘及LED显示接口课程设计.docx》由会员分享,可在线阅读,更多相关《实现特定功能键盘及LED显示接口课程设计.docx(14页珍藏版)》请在冰豆网上搜索。
![实现特定功能键盘及LED显示接口课程设计.docx](https://file1.bdocx.com/fileroot1/2023-6/12/8ddfeb3e-f97d-4be9-bbbb-b824b6b8155d/8ddfeb3e-f97d-4be9-bbbb-b824b6b8155d1.gif)
实现特定功能键盘及LED显示接口课程设计
河北科技大学
《接口技术》课程设计报告
学生姓名:
学号:
专业班级:
课程名称:
学年学期:
20—20学年第学期
指导教师:
20年月
课程设计成绩评定表
学生姓名
学号
成绩
专业班级
起止时间
设计题目
验
收
内
容
课程设计小组验收结果:
硬件设计:
优秀□良好□中等□及格□需努力□
程序设计:
优秀□良好□中等□及格□需努力□
实验结果:
优秀□良好□中等□及格□需努力□
课程设计个人验收结果:
操作能力:
优秀□良好□中等□及格□需努力□
软件理解:
优秀□良好□中等□及格□需努力□
硬件理解:
优秀□良好□中等□及格□需努力□
指导教师:
年月日
一、设计题目:
实现特定功能的键盘及LED显示。
二、设计目的:
1、掌握键盘和显示器的接口方法和编程方法。
2、掌握键盘扫描和LED八段码显示器的工作原理。
三、设计原理及方案:
1、实验电路图
说明:
使用PC机与伟福lab8000实验箱连接起来,安装好相应驱动,做好接线分析,由于lab8000实验箱已经将部分电路接线内置,所以接线仅需要将KEY/LED_CS选通端口与CS0相连即可。
2、实验框图
(接上页)
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、实验程序
OUTBITequ08002h;位控制口
OUTSEGequ08004h;段控制口
IN_KEYequ08001h;键盘读入口
datasegment
LEDBufdb6dup(?
);显示缓冲
Numdb1dup(?
);显示的数据
DelayTdb1dup(?
)
LEDMAP:
;八段管显示码
db3fh,06h,5bh,4fh,66h,6dh,7dh,07h
db7fh,6fh,77h,7ch,39h,5eh,79h,71h
KeyTable:
;键码定义
db16h,15h,14h,0ffh
db13h,12h,11h,10h
db0dh,0ch,0bh,0ah
db0eh,03h,06h,09h
db0fh,02h,05h,08h
db00h,01h,04h,07h
dataends
codesegment
assumecs:
code,ds:
data
Delayprocnear
pushax;延时子程序
pushcx
moval,0
movcx,ax
loop$
popcx
popax
ret
Delayendp
Delay1procnear
pushax;延时子程序
pushcx
moval,0
movcx,38000
loop$
popcx
popax
ret
Delay1endp
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
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
Startprocnear
movax,data
movds,ax
movdi,offsetLEDBuf
p1:
movdi,offsetLEDBuf
mov[di],05bh;显示2015.
mov[di+1],03fh
mov[di+2],03fh
mov[di+3],0ffh
mov[di+4],0
mov[di+5],06h
jmpMLoop
p2:
movdi,offsetLEDBuf
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
jmpMLoop
p3:
movdi,offsetLEDBuf
mov[di],6fh;显示good
mov[di+1],5ch
mov[di+2],5ch
mov[di+3],0deh
mov[di+4],0
mov[di+5],4fh
jmpMLoop
p4:
pushcx
movcx,08h
movbx,offsetLEDBuf
p4l:
mov[bx],00
incbx
loopp4l
popcx
mov[di],7fh;显示8
incdi
cmpdi,offsetLEDBuf+06h
jnznext
movdi,offsetLEDBuf
next:
calldelay1
callDisplayLED;显示
callTestKey
jneMLoop
jmpp4
MLoop:
callDisplayLED;显示
callTestKey;有键入?
jeMLoop;无键入,继续显示
callGetKey;读入键码
andal,0fh;显示键码
cmpal,01h
jzmmpp1
cmpal,02h
jzmmpp2
cmpal,03h
jzp3
cmpal,04h
jzp4
movah,0
movbx,offsetLEDMAP
addbx,ax
moval,[bx]
movLEDBuf+5,al
jmpMLoop
mmpp1:
jmpp1
mmpp2:
jmpp2
Startendp
codeends
endstart
四、实验方法
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次后不再闪烁。
这项功能的实现需要加入中断技术,通过边沿触发中断,执行中断服务子程序,进而达到效果。
七、设计体会
本次课程设计,我看到了自己许多不足之处。
这次课程设计完全改变了我以前的错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完成的任务,画程序方框图是很有必要的。
因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到了各种各样的问题,在这些问题中也认识到了自己的种种不足,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
其实这也给了我一个警告,在今后的学习中,我力争扎实学习。