⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 t8.asm

📁 一些单片机的51实例
💻 ASM
字号:
NAME t8                 ;8255键盘实验
PA   EQU  0CFA0H
PB   EQU  PA+1
PC0  EQU  PB+1
PCTL EQU  PC0+1
CSEG AT  4000H
         LJMP START
CSEG AT  4100H
START:   MOV   42H,#0FFH    ;42H中放显示的字符码,初值为0FFH
STA1:    MOV   DPTR,#PCTL   ;设置控制字,ABC口工作于方式0
                            ;AC口输出而B口用于输入
         MOV   A,#82H
         MOVX  @DPTR,A
LINE:    MOV   DPTR,#PC0    ;将字符码从C口输出显示
         MOV   A,42H
         CPL   A
         MOVX  @DPTR,A
         CLR   A
         MOV   DPTR,#PA     ;从A口输出全零到键盘的列线
         MOVX  @DPTR,A
         MOV   DPTR,#PB     ;从B口读入键盘行线值
         MOVX  A,@DPTR
         MOV   40H,A        ;行线值存于40H中
         CPL   A            ;取反后如为全零
                            ;表示没有键闭合,继续扫描
         JZ    LINE
         MOV   R7,#10H      ;有键按下,延时10MS去抖动
DL0:     MOV   R6,#0FFH
DL1:     DJNZ  R6,DL1
         DJNZ  R7,DL0
         MOV   DPTR,#PCTL   ;重置控制字,让A为输入,BC为输出
         MOV   A,#90H
         MOVX  @DPTR,A
         MOV   A,40H
         MOV   DPTR,#PB     ;刚才读入的行线值取出从B口送出
         MOVX  @DPTR,A
         MOV   DPTR,#PA     ;从A口读入列线值
         MOVX  A,@DPTR
         MOV   41H,A        ;列线值存于41H中
         CPL   A 			;取反后如为全零
         JZ    STA1           ;表示没有键按下
         MOV   DPTR,#TABLE  ;TABLE表首地址送DPTR
         MOV   R7,#18H      ;R7中置计数值16
         MOV   R6,#00H      ;R6中放偏移量初值
TT:      MOVX  A,@DPTR      ;从表中取键码前半段字节,行线值与实
         CJNE  A,40H,NN1    ;际输入的行线值相等吗?不等转NN1
         INC   DPTR         ;相等,指针指向后半字节,即列线值
         MOVX  A,@DPTR      ;列线值与实际输入的列线值
         CJNE  A,41H,NN2    ;相等吗?不等转NN2
         MOV   DPTR,#CHAR   ;相等,CHAR表基址和R6中的偏移量
         MOV   A,R6         ;取出相应的字符码
         MOVC  A,@A+DPTR
         MOV   42H,A        ;字符码存于42H
BBB:     MOV   DPTR,#PCTL   ;重置控制字,让AC为输出,B为输入
         MOV   A,#82H
         MOVX  @DPTR,A
AAA:     MOV   A,42H        ;将字符码从C口送到二极管显示
         MOV   DPTR,#PC0
         CPL   A
         MOVX  @DPTR,A
         JMP   STA1         ;转START
NN1:     INC   DPTR         ;指针指向后半字节即列线值
NN2:     INC   DPTR         ;指针指向下一键码前半字节即行线值
         INC   R6           ;CHAR表偏移量加一
         DJNZ  R7,TT        ;计数值减一,不为零则转TT继续查找
         JMP   BBB
TABLE:   DW    0FE06H,0FD06H,0FB06H,0F706H,0EF06H,0DF06H,0BF06H,07F06H ;TABLE为键值表,每个键位占
         DW    0FE05H,0FD05H,0FB05H,0F705H,0EF05H,0DF05H,0BF05H,07F05H ;两个字节,第一个字节为行
         DW    0FE03H,0FD03H,0FB03H,0F703H,0EF03H,0DF03H,0BF03H,07F03H ;线值,第二个为列线值
         
CHAR:    DB    00H,01H,02H,03H,04H,05H,06H,07H,08H,09H     ;字符码表
         DB    0AH,0BH,0CH,0DH,0EH,0FH,10H,11H,12H,13H
         DB	   14H,15H,16H,17H
END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -