课程设计实现特定功能的键盘及LED显示实验报告及程序.docx
《课程设计实现特定功能的键盘及LED显示实验报告及程序.docx》由会员分享,可在线阅读,更多相关《课程设计实现特定功能的键盘及LED显示实验报告及程序.docx(27页珍藏版)》请在冰豆网上搜索。
课程设计实现特定功能的键盘及LED显示实验报告及程序
微机原理与接口技术
课程设计
题目:
实现特定功能的键盘及LED显示
1、课程设计目的
课程设计是培育和锻炼学生在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力的重要教学环节。
它具有动手、动脑和理论联系实际的特点,是培育在校工科大学生理论联系实际、勇于动手、擅长动手和独立自主解决设计实践中碰到的各类问题能力的一个重要教学环节。
2、实验设计内容:
本次实验的主要内容是在了解键盘及LED显示接口原理的基础上,设计出相应的实验电路,以实现特定功能的键盘及LED显示。
需要完成以下功能:
1.按1键显示年;
2.按2键显示月日;
3.按3键显示GOOD;
4.按4键数码管由左到右字符“0”循环显示。
5.自行设计特效显示功能。
实验主要涉及可编程的键盘、显示接口芯片8279和可编程中断控制器8259A。
功能1至4是在可编程的键盘、显示接口芯片8279的基础上通进程序实现的。
在功能5中,加入了中断,通过边沿触发产生中断,执行中断服务子程序,以此来时现功能5的特效(在数码管上从左、从右依次显示0—9的数字)。
3、实验设计原理及方案:
(含电路原理图、硬件连接示用意、系统功能框图、程序流程图等)
电路原理图
系统功能框图
程序流程图
各功能实现方案
3.4.1功能一按1键显示年
当可编程的键盘、显示接口芯片8279扫描寄放器AL=02H时,说明按键为1号键。
关于显示年份,第一概念一个显示缓冲区,用于存储表示年份的数字。
然后依次读取其值,通过换码,再通过8279以左端入口方式显示与数码管上。
程序段如下:
MOVDX,D8279;键值输入
INAL,DX
CMPAL,02H
JZYEAR
YEAR:
MOVCX,04H
AA:
MOVDX,D8279;其余四位,显示0
MOVAL,3FH
OUTDX,AL
LOOPAA
MOVBX,OFFSETTAB
MOVSI,OFFSETDISPBUFF1+3;设置要显示的初始位
MOVCX,4
DISP1:
MOVAL,[SI]
XLAT;通过换码,再显示
MOVDX,D8279
OUTDX,AL
DECSI
LOOPDISP1;依次读取数值9,0,0,2
。
。
。
TABDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DISPBUFF1DB2,0,0,9;概念显示缓冲区
3.4.2功能二按2键显示月日
方式同功能一,当8279扫描寄放器AL=0AH时,说明按键为2号键。
显示月日方式和显示年份一样,第一概念一个显示缓冲区,用于存储表示月日的数字。
然后依次读取其值,通过换码,再通过8279以左端入口方式显示与数码管上。
程序段如下:
CMPAL,0AH;键值输入
JZMONTH
MONTH:
MOVCX,04H
BB:
MOVDX,D8279;其余四位,显示0
MOVAL,3FH
OUTDX,AL
LOOPBB
MOVBX,OFFSETTAB
MOVSI,OFFSETDISPBUFF2+3;设置要显示的初始位
MOVCX,4
DISP2:
MOVAL,[SI]
XLAT;通过换码,再显示
MOVDX,D8279
OUTDX,AL
DECSI;依次读取数值1,3,8,0
LOOPDISP2
。
。
。
。
。
TABDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DISPBUFF2DB0,8,3,1;概念显示缓冲区
3.4.3功能三按3键显示GOOD
将G,O,O,D别离以七段代码6FH,3FH,3FH,5EH代替,由于8279为左端入口方式,所以应依次将5EH,3FH,3FH,6FH送与8279数据端,以显示GOOD字样。
然后清空LED数码管的显示,再将以上代码送与8279,并通过延时,让GOOD字样以闪烁方式显示与数码管。
程序如下:
GOOD:
MOVBL,0AH;闪烁次数10次
GOD:
MOVCX,08H;清空LED数码管的显示
CLEAR:
MOVDX,D8279
MOVAL,00H
OUTDX,AL
LOOPCLEAR
CALLDELAY;延时
MOVCX,04H
CC:
MOVDX,D8279其余位显示0
MOVAL,3FH
OUTDX,AL
LOOPCC
MOVDX,D8279;显示D
MOVAL,5EH
OUTDX,AL
MOVDX,D8279;显示O
MOVAL,3FH
OUTDX,AL
MOVDX,D8279;显示O
MOVAL,3FH
OUTDX,AL
MOVDX,D8279;显示G
MOVAL,6FH
OUTDX,AL
CALLDELAY
DECBL
CMPBL,00H;若已闪烁10次,则再也不闪烁
JNZGOD
3.4.4功能四按4键数码管由左到右字符“0”循环显示
当8279扫描寄放器AL=01H时,说明按键为4号键。
ZEROPROCNEAR
MOVDX,C8279;修改8279配置(右边输入,八位显示,外部译码)
MOVAL,010H
OUTDX,AL
MOVCX,08H;清空LED数码管的显示
CLEAR1:
MOVDX,D8279
MOVAL,00H
OUTDX,AL
LOOPCLEAR1
MOVCX,08H;大循环计数
MOVBL,01H
C_DZERO:
PUSHCX
MOVBH,01H
MOVCX,08H;小循环计数
DZERO:
MOVAL,00H
CMPBL,BH;相等则显示0,不然不显示
JNENOAL_ZERO
MOVAL,3FH
NOAL_ZERO:
MOVDX,D8279
OUTDX,AL
CALLDELAY;延时
ROLBH,1
LOOPDZERO
POPCX
ROLBL,1
LOOPC_DZERO
MOVDX,C8279;改回8279配置(左侧输入,八位显示,外部译码)
MOVAL,0H
OUTDX,AL
RET
ZEROENDP
3.4.5功能五自行设计特效显示功能
此功能的实现引入了中断技术,通过边沿触发中断,执行中断服务子程序,进而达到效果。
(1)中断向量表的设置计8259的设置:
CLI;设置中断向量
MOVAX,0;设置中断向量IR0用于键盘中断
MOVES,AX
LEAAX,DATE;设置中断类型号08H
MOVES:
[4*08],AX
MOVAX,CS
MOVES:
[4*08+2],AX
MOVDX,INT00;8259配置
MOVAL,13H;设置ICW1,边沿触发,单片8259A,需ICW4
OUTDX,AL
NOP
MOVDX,INT01
MOVAL,08H;设置ICW2,中断类型号的高5位为00001
OUTDX,AL
MOVAL,01H;设置ICW4,非AEOI方式,完全嵌套方式
OUTDX,AL
MOVDX,INT01
INAL,DX
ANDAL,0H;设置OCW1,开放IR0
OUTDX,AL
STI
(2)中断服务子程序:
DATEPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVCX,08H
CLEAR2:
MOVDX,D8279;清空LED数码管的显示
MOVAL,00H
OUTDX,AL
LOOPCLEAR2
MOVAH,00H
DIS:
MOVCX,08H
DISP3:
MOVAL,AH
leabx,TAB;依次显示断码表中数字
xlat
movdx,D8279
outdx,al
CALLDELAY
LOOPDISP3
INCAH
TESTAH,01H;按照AH的奇偶性选择输入方式
JZX1
MOVAL,010H
MOVDX,C8279;修改8279配置(右边输入,八位显示,外部译码)
OUTDX,AL
CMPAH,09H
JBEDIS
X1:
MOVAL,00H
MOVDX,C8279;修改8279配置(右边输入,八位显示,外部译码)
OUTDX,AL
CMPAH,09H
JBEDIS
MOVDX,INT00;中断结束命令
MOVAL,20H
OUTDX,AL
POPDX
POPCX
POPBX
POPAX
IRET
DATEendp
4、汇编程序源代码
C8279EQU222H
D8279EQU220H
INT00EQU200H;8259地址
INT01EQU201H
MODEEQU00H;左边输入,八位显示,外部译码
FEQEQU38H;扫描频率
CODESEGMENT
ASSUMECS:
CODE,DS:
CODE
START:
PUSHCS
POPDS
MOVDX,C8279;初始化8279
MOVAL,MODE
OUTDX,AL
MOVAL,FEQ
OUTDX,AL
CLI;设置中断向量
MOVAX,0;设置中断向量IR0用于键盘中断
MOVES,AX
LEAAX,DATE;设置中断类型号08H
MOVES:
[4*08],AX
MOVAX,CS
MOVES:
[4*08+2],AX
MOVDX,INT00;8259配置
MOVAL,13H;设置ICW1,边沿触发,单片8259A,需ICW4
OUTDX,AL
NOP
MOVDX,INT01
MOVAL,08H;设置ICW2,中断类型号的高5位为00001
OUTDX,AL
MOVAL,01H;设置ICW4,非AEOI方式,完全嵌套方式
OUTDX,AL
MOVDX,INT01
INAL,DX
ANDAL,0H;设置OCW1,开放IR0
OUTDX,AL
STI
;清FIFORAM
BEGIN:
MOVDX,C8279
MOVAL,0C2H
OUTDX,AL
WAIT1:
INAL,DX
MOVBL,AL
ANDAL,80H
CMPAL,80H
JEWAIT1
MOVAL,BL
ANDAL,0FH
CMPAL,00H
JEWAIT1
MOVAL,40H;读FIFO/传感器RAM命令
OUTDX,AL
MOVDX,D8279;键值输入
INAL,DX
CMPAL,02H
JZYEAR
CMPAL,0ah
JZMONTH
CMPAL,22h
JZGOOD
CMPAL,01h
JZ
CALLZERO
JMPBEGIN
;=================================
YEAR:
MOVCX,04H
AA:
MOVDX,D8279;其余四位,显示0
MOVAL,3FH
OUTDX,AL
LOOPAA
MOVBX,OFFSETTAB
MOVSI,OFFSETDISPBUFF1+3;设置要显示的初始位
MOVCX,4
DISP1:
MOVAL,[SI]
XLAT;通过换码,再显示
MOVDX,D8279
OUTDX,AL
DECSI
LOOPDISP1;依次读取数值9,0,0,2
JMPBEGIN
;=================================
MONTH:
MOVCX,04H
BB:
MOVDX,D8279;其余四位,显示0
MOVAL,3FH
OUTDX,AL
LOOPBB
MOVBX,OFFSETTAB
MOVSI,OFFSETDISPBUFF2+3;设置要显示的初始位
MOVCX,4
DISP2:
MOVAL,[SI]
XLAT;通过换码,再显示
MOVDX,D8279
OUTDX,AL
DECSI;依次读取数值1,3,8,0
LOOPDISP2
JMPBEGIN
GOOD:
MOVBL,0AH;闪烁次数10次
GOD:
MOVCX,08H;清空LED数码管的显示
CLEAR:
MOVDX,D8279
MOVAL,00H
OUTDX,AL
LOOPCLEAR
CALLDELAY;延时
MOVCX,04H
CC:
MOVDX,D8279其余位显示0
MOVAL,3FH
OUTDX,AL
LOOPCC
MOVDX,D8279;显示D
MOVAL,5EH
OUTDX,AL
MOVDX,D8279;显示O
MOVAL,3FH
OUTDX,AL
MOVDX,D8279;显示O
MOVAL,3FH
OUTDX,AL
MOVDX,D8279;显示G
MOVAL,6FH
OUTDX,AL
CALLDELAY
DECBL
CMPBL,00H;若已闪烁10次,则再也不闪烁
JNZGOD
JMPBEGIN
ZEROPROCNEAR
MOVDX,C8279;修改8279配置(右边输入,八位显示,外部译码)
MOVAL,010H
OUTDX,AL
MOVCX,08H;清空LED数码管的显示
CLEAR1:
MOVDX,D8279
MOVAL,00H
OUTDX,AL
LOOPCLEAR1
MOVCX,08H;大循环计数
MOVBL,01H
C_DZERO:
PUSHCX
MOVBH,01H
MOVCX,08H;小循环计数
DZERO:
MOVAL,00H
CMPBL,BH;相等则显示0,不然不显示
JNENOAL_ZERO
MOVAL,3FH
NOAL_ZERO:
MOVDX,D8279
OUTDX,AL
CALLDELAY;延时
ROLBH,1
LOOPDZERO
POPCX
ROLBL,1
LOOPC_DZERO
MOVDX,C8279;改回8279配置(左侧输入,八位显示,外部译码)
MOVAL,0H
OUTDX,AL
RET
ZEROENDP
JMPBEGIN;重复执行
DATEPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVCX,08H
;清空LED数码管的显示
CLEAR2:
MOVDX,D8279
MOVAL,00H
OUTDX,AL
LOOPCLEAR2
MOVAH,00H
DIS:
MOVCX,08H
DISP3:
MOVAL,AH
leabx,TAB
xlat
movdx,D8279
outdx,al
CALLDELAY
LOOPDISP3
INCAH
TESTAH,01H
JZX1
MOVAL,010H
MOVDX,C8279;修改8279配置(右边输入,八位显示,外部译码)
OUTDX,AL
CMPAH,09H
JBEDIS
X1:
MOVAL,00H
MOVDX,C8279;修改8279配置(右边输入,八位显示,外部译码)
OUTDX,AL
CMPAH,09H
JBEDIS
MOVDX,INT00
MOVAL,20H;
OUTDX,AL
POPDX
POPCX
POPBX
POPAX
IRET
DATEendp
delayprocnear
pushcx
movcx,0ffffh
loop$
popcx
ret
delayendp
TABDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DISPBUFF1DB2,0,0,9
DISPBUFF2DB0,8,3,1
CODEENDS
ENDSTART
五、实验效果(见截图)
六、实验心得与体会
本次课程设计,我看到了自己许多不足的地方。
以前在上课的时候,老师常常强调在写一个程序的时候,必然要事前把程序原理方框图化出来,可是我开始总感觉如此做没必要,很浪费时刻。
可是,这次课程设计完全改变了我以前的那种错误的熟悉,以前我接触的那些程序都是很短、很基础的,可是在课程设计中碰着的那些需要很多代码才能完成的任务,画程序方框图是很有必要的。
因为通进程序方框图,在做设计的进程中,咱们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的进程中也有利于查错。
通过这次课程设计使我知道了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能提高自己的实际动手能力和独立试探的能力。
在设计的进程中碰到了各类各样的问题,在这些问题中也熟悉到了自己的各种不足,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
其实这也给了我一个警告,在此后的学习中,我力争扎实学习。
C8279EQU222H
D8279EQU220H
INT00EQU200H;8259地址
INT01EQU201H
MODEEQU00H;左边输入,八位显示,外部译码
FEQEQU38H;扫描频率
CODESEGMENT
ASSUMECS:
CODE,DS:
CODE
START:
PUSHCS
POPDS
MOVDX,C8279;初始化8279
MOVAL,MODE
OUTDX,AL
MOVAL,FEQ
OUTDX,AL
CLI;设置中断向量
MOVAX,0;设置中断向量IR0用于键盘中断
MOVES,AX
LEAAX,DATE;设置中断类型号08H
MOVES:
[4*08],AX
MOVAX,CS
MOVES:
[4*08+2],AX
MOVDX,INT00;8259配置
MOVAL,13H;设置ICW1,边沿触发,单片8259A,需ICW4
OUTDX,AL
NOP
MOVDX,INT01
MOVAL,08H;设置ICW2,中断类型号的高5位为00001
OUTDX,AL
MOVAL,01H;设置ICW4,非AEOI方式,完全嵌套方式
OUTDX,AL
MOVDX,INT01
INAL,DX
ANDAL,0H;设置OCW1,开放IR0
OUTDX,AL
STI
;清FIFORAM
BEGIN:
MOVDX,C8279
MOVAL,0C2H
OUTDX,AL
WAIT1:
INAL,DX
MOVBL,AL
ANDAL,80H
CMPAL,80H
JEWAIT1
MOVAL,BL
ANDAL,0FH
CMPAL,00H
JEWAIT1
MOVAL,40H;读FIFO/传感器RAM命令
OUTDX,AL
MOVDX,D8279;键值输入
INAL,DX
CMPAL,02H
JZYEAR
CMPAL,0ah
JZMONTH
CMPAL,22h
JZGOOD
CMPAL,01h
JZ
CALLZERO
JMPBEGIN
;=================================
YEAR:
MOVCX,04H
AA:
MOVDX,D8279
MOVAL,3FH
OUTDX,AL
LOOPAA
MOVBX,OFFSETTAB
MOVSI,OFFSETDISPBUFF1+3
MOVCX,4
DISP1:
MOVAL,[SI]
XLAT
MOVDX,D8279
OUTDX,AL
DECSI
LOOPDISP1
JMPBEGIN
;=================================
MONTH:
MOVCX,04H
BB:
MOVDX,D8279
MOVAL,3FH
OUTDX,AL
LOOPBB
MOVBX,OFFSETTAB
MOVSI,OFFSETDISPBUFF2+3
MOVCX,4
DISP2:
MOVAL,[SI]
XLAT
MOVDX,D8279
OUTDX,AL
DECSI
LOOPDISP2
JMPBEGIN
GOOD:
MOVBL,0AH
GOD:
MOVCX,08H;清空LED数码管的显示
CLEAR:
MOVDX,D8279
MOVAL,00H
OUTDX,AL
LOOPCLEAR
CALLDELAY
MOVC