微机原理与接口技术课程设计题目:实现特定功能的键盘及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.1 电路原理图3.2 系统功能框图3.3 程序流程图3.4 各功能实现方案3.4.1 功能一按1键显示年当可编程的键盘、显示接口芯片8279扫描寄存器AL=02H时,说明按键为1号键。
关于显示年份,首先定义一个显示缓冲区,用于存储表示年份的数字。
然后依次读取其值,经过换码,再通过8279以左端入口方式显示与数码管上。
程序段如下:MOV DX,D8279 ;键值输入IN AL,DXCMP AL,02HJZ YEARYEAR: MOV CX,04HAA: MOV DX,D8279 ;其余四位,显示0 MOV AL,3FHOUT DX,ALLOOP AAMOV BX,OFFSET TABMOV SI,OFFSET DISPBUFF1+3 ;设置要显示的初始位MOV CX,4DISP1: MOV AL,[SI]XLAT ;通过换码,再显示MOV DX,D8279OUT DX,ALDEC SILOOP DISP1 ;依次读取数值9,0,0,2。
TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH DISPBUFF1 DB 2,0,0,9 ;定义显示缓冲区3.4.2 功能二按2键显示月日方法同功能一,当8279扫描寄存器AL=0AH时,说明按键为2号键。
显示月日方法和显示年份一样,首先定义一个显示缓冲区,用于存储表示月日的数字。
然后依次读取其值,经过换码,再通过8279以左端入口方式显示与数码管上。
程序段如下:CMP AL,0AH ;键值输入JZ MONTHMONTH: M OV CX,04HBB: MOV DX,D8279 ;其余四位,显示0MOV AL,3FHOUT DX,ALLOOP BBMOV BX,OFFSET TABMOV SI,OFFSET DISPBUFF2+3 ;设置要显示的初始位MOV CX,4DISP2: MOV AL,[SI]XLAT ;通过换码,再显示MOV DX,D8279OUT DX,ALDEC SI ;依次读取数值1,3,8,0LOOP DISP2。
TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDISPBUFF2 DB 0,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: MOV BL,0AH ;闪烁次数10次GOD: MOV CX,08H ;清空LED数码管的显示CLEAR:MOV DX,D8279MOV AL,00HOUT DX,ALLOOP CLEARCALL DELAY ;延时MOV CX,04HCC: MOV DX,D8279 其余位显示0MOV AL,3FHOUT DX,ALLOOP CCMOV DX,D8279 ;显示DMOV AL,5EHOUT DX,ALMOV DX,D8279 ;显示OMOV AL,3FHOUT DX,ALMOV DX,D8279 ;显示OMOV AL,3FHOUT DX,ALMOV DX,D8279 ;显示GMOV AL,6FHOUT DX,ALCALL DELAYDEC BLCMP BL,00H ;若已闪烁10次,则不再闪烁JNZ GOD3.4.4 功能四按4键数码管由左到右字符“0”循环显示当8279扫描寄存器AL=01H时,说明按键为4号键。
ZERO PROC NEARMOV DX,C8279 ;修改8279配置(右边输入,八位显示,外部译码)MOV AL,010HOUT DX,ALMOV CX,08H ;清空LED数码管的显示CLEAR1:MOV DX,D8279MOV AL,00HOUT DX,ALLOOP CLEAR1MOV CX,08H ;大循环计数MOV BL,01HC_DZERO:PUSH CXMOV BH,01HMOV CX,08H ;小循环计数DZERO:MOV AL,00HCMP BL,BH ;相等则显示0,否则不显示JNE NOAL_ZEROMOV AL,3FHNOAL_ZERO:MOV DX,D8279OUT DX,ALCALL DELAY ;延时ROL BH,1LOOP DZEROPOP CXROL BL,1LOOP C_DZEROMOV DX,C8279 ;改回8279配置(左边输入,八位显示,外部译码)MOV AL,0HOUT DX,ALRETZERO ENDP3.4.5 功能五自行设计特效显示功能此功能的实现引入了中断技术,通过边沿触发中断,执行中断服务子程序,进而达到效果。
(1)中断向量表的设置计8259的设置:CLI ;设置中断向量MOV AX,0 ;设置中断向量IR0用于键盘中断MOV ES,AXLEA AX,DATE ;设置中断类型号08HMOV ES:[4*08],AXMOV AX,CSMOV ES:[4*08+2],AXMOV DX,INT00 ;8259配置MOV AL,13H ;设置ICW1,边沿触发,单片8259A,需ICW4OUT DX,ALNOPMOV DX,INT01MOV AL,08H ;设置ICW2,中断类型号的高5位为00001OUT DX,ALMOV AL,01H ;设置ICW4,非AEOI方式,完全嵌套方式OUT DX,ALMOV DX,INT01IN AL,DXAND AL,0H ;设置OCW1,开放IR0OUT DX,ALSTI(2)中断服务子程序:DATE PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXMOV CX,08HCLEAR2: MOV DX,D8279 ;清空LED数码管的显示MOV AL,00HOUT DX,ALLOOP CLEAR2MOV AH,00HDIS: MOV CX,08HDISP3: MOV AL,AHlea bx,TAB ;依次显示断码表中数字xlatmov dx,D8279out dx,alCALL DELAYLOOP DISP3INC AHTEST AH,01H ;根据AH的奇偶性选择输入方式JZ X1MOV AL,010HMOV DX,C8279 ;修改8279配置(右边输入,八位显示,外部译码)OUT DX,ALCMP AH,09HJBE DISX1: MOV AL,00HMOV DX,C8279 ;修改8279配置(右边输入,八位显示,外部译码)OUT DX,ALCMP AH,09HJBE DISMOV DX,INT00 ;中断结束命令MOV AL,20HOUT DX,ALPOP DXPOP CXPOP BXPOP AXIRETDATE endp4、汇编程序源代码C8279 EQU 222HD8279 EQU 220HINT00 EQU 200H ;8259地址INT01 EQU 201HMODE EQU 00H ;左边输入,八位显示,外部译码FEQ EQU 38H ;扫描频率CODE SEGMENTASSUME CS:CODE,DS:CODESTART:PUSH CSPOP DSMOV DX,C8279 ;初始化8279MOV AL,MODEOUT DX,ALMOV AL,FEQOUT DX,ALCLI ;设置中断向量MOV AX,0 ;设置中断向量IR0用于键盘中断MOV ES,AXLEA AX,DATE ;设置中断类型号08HMOV ES:[4*08],AXMOV AX,CSMOV ES:[4*08+2],AXMOV DX,INT00 ;8259配置MOV AL,13H ;设置ICW1,边沿触发,单片8259A,需ICW4 OUT DX,ALNOPMOV DX,INT01MOV AL,08H ;设置ICW2,中断类型号的高5位为00001OUT DX,ALMOV AL,01H ;设置ICW4,非AEOI方式,完全嵌套方式OUT DX,ALMOV DX,INT01IN AL,DXAND AL,0H ;设置OCW1,开放IR0OUT DX,ALSTI;清FIFO RAMBEGIN: MOV DX,C8279MOV AL,0C2HOUT DX,ALWAIT1: IN AL,DXMOV BL,ALAND AL,80HCMP AL,80HJE WAIT1MOV AL,BLAND AL,0FHCMP AL,00HJE WAIT1MOV AL,40H ;读FIFO/传感器RAM命令OUT DX,ALMOV DX,D8279 ;键值输入IN AL,DXCMP AL,02HJZ YEARCMP AL,0ahJZ MONTHCMP AL,22hJZ GOODCMP AL,01hJZCALL ZEROJMP BEGIN;=================================YEAR: MOV CX,04HAA: MOV DX,D8279 ;其余四位,显示0OUT DX,ALLOOP AAMOV BX,OFFSET TABMOV SI,OFFSET DISPBUFF1+3 ;设置要显示的初始位MOV CX,4DISP1: MOV AL,[SI]XLAT ;通过换码,再显示MOV DX,D8279OUT DX,ALDEC SILOOP DISP1 ;依次读取数值9,0,0,2JMP BEGIN;=================================MONTH: M OV CX,04HBB: MOV DX,D8279 ;其余四位,显示0MOV AL,3FHOUT DX,ALLOOP BBMOV BX,OFFSET TABMOV SI,OFFSET DISPBUFF2+3 ;设置要显示的初始位MOV CX,4DISP2: MOV AL,[SI]XLAT ;通过换码,再显示MOV DX,D8279OUT DX,ALDEC SI ;依次读取数值1,3,8,0LOOP DISP2JMP BEGINGOOD: MOV BL,0AH ;闪烁次数10次GOD: MOV CX,08H ;清空LED数码管的显示CLEAR:MOV DX,D8279OUT DX,ALLOOP CLEARCALL DELAY ;延时MOV CX,04HCC: MOV DX,D8279 其余位显示0MOV AL,3FHOUT DX,ALLOOP CCMOV DX,D8279 ;显示DMOV AL,5EHOUT DX,ALMOV DX,D8279 ;显示OMOV AL,3FHOUT DX,ALMOV DX,D8279 ;显示OMOV AL,3FHOUT DX,ALMOV DX,D8279 ;显示GMOV AL,6FHOUT DX,ALCALL DELAYDEC BLCMP BL,00H ;若已闪烁10次,则不再闪烁JNZ GODJMP BEGINZERO PROC NEARMOV DX,C8279 ;修改8279配置(右边输入,八位显示,外部译码)MOV AL,010HOUT DX,ALMOV CX,08H ;清空LED数码管的显示CLEAR1:MOV DX,D8279MOV AL,00HOUT DX,ALLOOP CLEAR1MOV CX,08H ;大循环计数MOV BL,01HC_DZERO:PUSH CXMOV BH,01HMOV CX,08H ;小循环计数DZERO:MOV AL,00HCMP BL,BH ;相等则显示0,否则不显示JNE NOAL_ZEROMOV AL,3FHNOAL_ZERO:MOV DX,D8279OUT DX,ALCALL DELAY ;延时ROL BH,1LOOP DZEROPOP CXROL BL,1LOOP C_DZEROMOV DX,C8279 ;改回8279配置(左边输入,八位显示,外部译码)MOV AL,0HOUT DX,ALRETZERO ENDPJMP BEGIN ;重复执行DATE PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXMOV CX,08H;清空LED数码管的显示CLEAR2: MOV DX,D8279MOV AL,00HOUT DX,ALLOOP CLEAR2MOV AH,00HDIS: MOV CX,08HDISP3: MOV AL,AHlea bx,TABxlatmov dx,D8279out dx,alCALL DELAYLOOP DISP3INC AHTEST AH,01HJZ X1MOV AL,010HMOV DX,C8279 ;修改8279配置(右边输入,八位显示,外部译码)OUT DX,ALCMP AH,09HJBE DISX1: MOV AL,00HMOV DX,C8279 ;修改8279配置(右边输入,八位显示,外部译码)OUT DX,ALCMP AH,09HJBE DISMOV DX,INT00MOV AL,20H ;OUT DX,ALPOP DXPOP CXPOP BXPOP AXIRETDATE endpdelay proc nearpush cxmov cx,0ffffhloop $pop cxretdelay endpTAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDISPBUFF1 DB 2,0,0,9DISPBUFF2 DB 0,8,3,1CODE ENDSEND START5、实验效果(见截图)6、实验心得与体会本次课程设计,我看到了自己许多不足之处。