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

📄 scankey11.lst

📁 单片机和键盘、LED的接口程序。键盘采用4x4非编码形式
💻 LST
字号:
A51 MACRO ASSEMBLER  SCANKEY11                                                            04/27/2007 10:36:29 PAGE     1


MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN ScanKey11.OBJ
ASSEMBLER INVOKED BY: D:\Program Files\C51\C51\BIN\A51.EXE ScanKey11.asm SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

0000                   1               ORG   000H
0000 021008            2               LJMP KEY
1000                   3               ORG    1000H
                       4     ;------------检测是否有键按下------------------
1000 75A00F            5     IsKeyDown: MOV P2, #0FH  ;P2.4~P2.7输出全为0
1003 E5A0              6                MOV A, P2
1005 540F              7                ANL A, #0FH   ;读取P2.0~P2.3状态
1007 22                8                RET
                       9     ;---------------程序开始----------
1008                  10          KEY: ;MOV SP, #50H
1008 1100             11               ACALL IsKeyDown  ;
100A B40F04           12               CJNE A, #0FH, LK  ;P2.0~P2.3不是全"1"时,有键闭合,转LK
100D 115B             13           N1: ACALL DELAY ;延时6ms
100F 0108             14               AJMP KEY    ;
1011 115B             15           LK: ACALL DELAY
1013 115B             16               ACALL DELAY ;延时12ms去抖动
1015 1100             17               ACALL IsKeyDown  ; 再次检查键是否闭合
1017 B40F04           18               CJNE A, #0FH, SCAN  ; 键再闭合,转SCAN扫描键盘
101A 115B             19               ACALL DELAY
101C 0108             20               AJMP KEY  ;无键闭合时 转KEY
                      21     ;--------------扫描键盘-----------------
101E 7800             22        SCAN: MOV R0, #00H   ;扫描行号送R0
1020 79EF             23              MOV R1, #0EFH  ;扫描初值送R1(第一行)
1022 7B04             24              MOV R3, #4H   ; 行扫描计数
1024 E9               25        ROW:  MOV A, R1   ;
1025 F5A0             26              MOV P2, A
1027 E5A0             27              MOV A, P2
1029 20E004           28              JB ACC.0, LINE2  ;P2.0=1时第一列无键闭合,转第二列
102C 7A00             29              MOV R2, #00H  ;列号送R2
102E 0145             30              AJMP CALKEY   ;转CALKEY, 计算键号
1030 20E104           31      LINE2:  JB ACC.1, LINE3  ;
1033 7A01             32              MOV R2, #1H  ;列号送R2
1035 0145             33              AJMP CALKEY
1037 20E204           34      LINE3:  JB ACC.2, LINE4  ;
103A 7A02             35              MOV R2, #2H  ;列号送R2
103C 0145             36              AJMP CALKEY
103E 20E30E           37      LINE4:  JB ACC.3, NEXTROW  ;
1041 7A03             38              MOV R2, #3H  ;列号送R2
1043 0145             39              AJMP CALKEY
1045 88F0             40     CALKEY:  MOV B, R0    ;键号=4*行号+列号
1047 7404             41              MOV A, #04H
1049 A4               42              MUL AB
104A 2A               43              ADD A, R2
                      44              ;PUSH ACC   ;保存键号
104B 1167             45              ACALL KEYPROC  ;只考虑最先按下的键,调用处理程序
104D 0108             46              AJMP KEY
104F                  47     NEXTROW: ;DEC R3  ;扫描完一行后,计数减一
104F DB02             48              DJNZ R3, NEXT  ;没有扫描完,转NEXT继续扫描
1051 0108             49              AJMP KEY      ; 扫描完4行后,转KEY
1053 08               50       NEXT:  INC R0  ;扫描行号加1
1054 E9               51              MOV A, R1  ;将上一次的扫描初值送A
1055 F4               52              CPL A  ;A取反
1056 23               53              RL A   ;
1057 F4               54              CPL A  ;
1058 F9               55              MOV R1, A  ;新一行的扫描初值送R1
1059 0124             56              AJMP ROW  ;
                      57     ;----------------延时子程序--------------
105B 7E06             58      DELAY:  MOV R6, #6H
A51 MACRO ASSEMBLER  SCANKEY11                                                            04/27/2007 10:36:29 PAGE     2

105D 7FC8             59      LOOP1:  MOV R7, #0C8H   ;200次
105F 00               60      LOOP2:  NOP
1060 00               61              NOP
1061 00               62              NOP
1062 DFFB             63              DJNZ R7, LOOP2  ; 内循环200*5=1ms
1064 DEF7             64              DJNZ R6, LOOP1  ; 共延时6ms
1066 22               65              RET
                      66     
                      67     ;----------------键盘处理程序,用于LED的显示-------------
1067 901079           68     KEYPROC: MOV DPTR, #TABLE   ;指向表首地址
                      69              ;POP ACC  ;取出键号
106A 93               70              MOVC A, @A+DPTR    ;取出LED段选码
106B 754008           71              MOV  40H, #8H   ;计数
106E 33               72      RLOOP:  RLC A   ;带进位循环左移
106F C280             73              CLR P0.0  ;
1071 9281             74              MOV P0.1, C  ;将进位输进P0.1
1073 B280             75              CPL P0.0  ;完成一位读取数据
1075 D540F6           76              DJNZ 40H, RLOOP  ;8位数据是否读完,
1078 22               77              RET
                      78     
1079 3F               79      TABLE:  DB   3FH
107A 06               80              DB   06H
107B 5B               81              DB   5BH
107C 4F               82              DB   4FH
107D 66               83              DB   66H
107E 6D               84              DB   6DH
107F 7D               85              DB   7DH
1080 07               86              DB   07H
1081 7F               87              DB   7FH
1082 6F               88              DB   6FH
1083 77               89              DB   77H
1084 7C               90              DB   7CH
1085 39               91              DB   39H
1086 5E               92              DB   5EH
1087 79               93              DB   79H
1088 71               94              DB   71H
                      95     
                      96              END
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
A51 MACRO ASSEMBLER  SCANKEY11                                                            04/27/2007 10:36:29 PAGE     3

SYMBOL TABLE LISTING
------ ----- -------


N A M E             T Y P E  V A L U E   ATTRIBUTES

ACC. . . . . . . .  D ADDR   00E0H   A   
B. . . . . . . . .  D ADDR   00F0H   A   
CALKEY . . . . . .  C ADDR   1045H   A   
DELAY. . . . . . .  C ADDR   105BH   A   
ISKEYDOWN. . . . .  C ADDR   1000H   A   
KEY. . . . . . . .  C ADDR   1008H   A   
KEYPROC. . . . . .  C ADDR   1067H   A   
LINE2. . . . . . .  C ADDR   1030H   A   
LINE3. . . . . . .  C ADDR   1037H   A   
LINE4. . . . . . .  C ADDR   103EH   A   
LK . . . . . . . .  C ADDR   1011H   A   
LOOP1. . . . . . .  C ADDR   105DH   A   
LOOP2. . . . . . .  C ADDR   105FH   A   
N1 . . . . . . . .  C ADDR   100DH   A   
NEXT . . . . . . .  C ADDR   1053H   A   
NEXTROW. . . . . .  C ADDR   104FH   A   
P0 . . . . . . . .  D ADDR   0080H   A   
P2 . . . . . . . .  D ADDR   00A0H   A   
RLOOP. . . . . . .  C ADDR   106EH   A   
ROW. . . . . . . .  C ADDR   1024H   A   
SCAN . . . . . . .  C ADDR   101EH   A   
TABLE. . . . . . .  C ADDR   1079H   A   


REGISTER BANK(S) USED: 0 

ASSEMBLY COMPLETE.  0 WARNING(S), 0 ERROR(S)

⌨️ 快捷键说明

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