实验五 键盘按键与数码管显示(汇编与微机原理)

您所在的位置:网站首页 8255连接矩阵键盘电路图 实验五 键盘按键与数码管显示(汇编与微机原理)

实验五 键盘按键与数码管显示(汇编与微机原理)

2024-07-16 15:33| 来源: 网络整理| 查看: 265

  键盘按键与数码管显示 实验目的:

熟悉星研集成开发环境,掌握微机接口程序编写调试的基本方法。

掌握矩阵式键盘的工作原理及识别键盘按键的方法。

掌握8段数码管显示数字或字符的工作原理和它的使用方法。

掌握用8255扫描键盘及用8255刷新数码管显示的方法。

实验:

      在(2行*8列)小键盘上任意按下某个按键,该键的键值将同时显示在8个数码管上。按键松开时显示上一次的按键值。

(2行*8列)小键盘:

     实验箱上2行*8列小键盘上当某个按键被按下时,该键所在行的行线值为0、所在列的列线值也为0。根据这个特点结合上述原理图采用“列扫描法”可以识别出当前被按下的按键。

8个数码管:

     实验箱上8个8段数码管。每个数码管有8个笔段,按逆时针方向依次称为a段、b段、c段、d段、e段、f段、g段、dp段,8个段接收来自外部的一个8位二进制数(D7—D0),并且笔段a 对应数据位D0……..笔段dp 对应数据位D7 ,由于数码管是共阳的,当段码端接收低电平时相应的笔段就会点亮,段码端接收的数据决定了数码管显示的具体内容。(例:要显示数字0,则笔段a、b、c、d、e、f  都必须点亮,笔段g、h不应该点亮,8个段接收的值应该是11000000,数据D0--D7就应该是11000000(0C0H),让段码端接收11000000它就会显示0)。

     数码管的位码控制GND端,当它接收低电平时该数码管会被选中有效工作:即这时只要段码端有有效的数据数码管就会显示数据,当它接收高电平时数码管不工作,这时即使段码端有有效数据数码管也不会显示任何数据。

8255各端口的分工:

      8255的A口工作在方式0输出状态控制数码管的段码;B端口工作在方式0输出状态控制数码管的位码,并且同时控制键盘列线的扫描;C端口工作在方式0输入状态,其中的PC0、PC1控制键盘的第一、第二行行值的读入。

实验代码: .MODEL TINY PA_8255 EQU 0270H PB_8255 EQU 0271H PC_8255 EQU 0272H CTRL_8255 EQU 0273H .STACK 100 .DATA buffer DB ? SEG_TAB DB 0C0H, 0F9H,0A4H,0B0H, 99H, 92H, 82H,0F8H DB 080H, 90H, 88H, 83H, 0C6H,0A1H,86H,8EH,0FFH .CODE START: MOV AX,@DATA MOV DS,AX MOV ES,AX NOP MOV DX,CTRL_8255 ;8255初始化 MOV AL,89H OUT DX,AL LEA SI,buffer MOV AL,10H ;默认数码管不显示 MOV [SI],AL CALL DIR ;调用显示子程序 MAIN2: LEA DI,buffer CALL Getkey ;得到按键在SEG_TAB中的值放入AL STOSB ;将AL赋值给DI指向的地址 CALL DIR JMP MAIN2 DIR PROC NEAR PUSH AX PUSH BX PUSH DX LEA SI,buffer ;置显示缓冲器初值 MOV AL,[SI] LEA BX,SEG_TAB XLAT ;查表取显示数据->AL MOV DX,PA_8255 OUT DX,AL ;AL段数据->8255 PA口 MOV DX,PB_8255 MOV AL,0 ;位码控制GND端低电平有效, 显示8位数据管 OUT DX,AL CALL DL1ms POP DX POP BX POP AX RET DIR ENDP DL1ms PROC NEAR PUSH CX MOV CX,500 LOOP $ POP CX RET DL1ms ENDP GETKEY PROC NEAR PUSH BX PUSH DX LK: CALL AllKey ;调用判有无闭合键子程序 JNE LK1 CALL DIR ;调用显示子程序 JMP LK ;补充程序完成列扫描,得到按键在SEG_TAB中的值放入AL LK1: MOV BL, 0FEH ;0FEH-->BL 第0列开始扫描,用BL保存列线扫描口数值,从PB0开始 MOV BH, 0 ;0-->BH 用BH保存列线值,从第0列开始 LK2: MOV DX, PB_8255 ;写B口位码控制端 MOV AL, BL ; OUT DX, AL ;将BL写入B口列线控制端 MOV DX, PC_8255 ;读C口 IN AL, DX ; TEST AL, 1 ;PC0不等于0转向LONE继续判断PC1 JNZ LONE ; MOV AL, 0 ;0行有键闭合,0-〉AL PC0等于0表示0行有键闭合,用BH存放按键值 JMP LKP LONE: TEST AL, 2 JNZ NEXT ;PC1不等于0则转向NEXT列计算器+1 MOV AL, 08 ;1行有键闭合,08H-->AL LKP: ADD BH, AL ;用BH保存键值 LK3: CALL AllKey JNE LK3 ;判断释放否 MOV AL, BH ;BH键号->AL JMP EXIT NEXT: INC BH ;列计数器加1 TEST BL, 80H ; JZ EXIT ;判是否已扫到最后一列则转向KEND ROL BL, 1 ;将BL循环左移一位 JMP LK2 EXIT: POP DX POP BX RET GETKEY ENDP AllKey PROC NEAR ;判断键盘是否有按键闭合 MOV DX,PB_8255 XOR AL,AL OUT DX,AL ;全"0"->扫描口,列线控制端低电平有效 MOV DX,PC_8255 ;读C口数据 IN AL,DX ;读键状态 AND AL,03H ;取低二位 CMP AL,3 ;取C口低二位和00000011b比较 RET AllKey ENDP END START



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3