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

📄 key.lst

📁 基于msc单片机仿真机的仿真程序
💻 LST
字号:
A51 MACRO ASSEMBLER  KEY                                                                  09/16/2006 15:20:16 PAGE     1


MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN key.OBJ
ASSEMBLER INVOKED BY: D:\Keil\C51\BIN\A51.EXE key.ASM SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1      ;*****************************************************************                        
                                          
                       2      ;*                                                              
                       3      ;*  程序功能 :  4×4矩阵式键盘识别技术
                       4      ;*                                         
                       5      ;*  应用软件 : KEIL C                                               
                       6      ;*                                                                      
                       7      ;*  版    本 : KEIL 7.06   
                       8      ;*              
                       9      ;******************************************************************
                      10      ;*  注:为了有更多实用的实验程序供大家学习,部分程序参考网上的资源,
                      11      ;*      在此谢谢这些无私奉献的朋友!!!   
                      12      ;******************************************************************
                      13      ;  0   1   2   3  ---P20
                      14      ;  4   5   6   7  ---P21
                      15      ;  8   9   10  11 ---P22
                      16      ;  12  13  14  15 ---P23
                      17      ;  |   |   |   |
                      18      ; P24 P25 P26 P27
                      19      ;******************************************************************
                      20     
0000                  21             ORG 0000h
0000 0130             22             AJMP MAIN
0030                  23             ORG 0030h
0030                  24     MAIN:
0030 90009D           25             MOV DPTR,#TAB  ;将表头放入DPTR
0033 12003E           26             LCALL KEY   ;调用键盘扫描程序
0036 93               27             MOVC A,@A+DPTR               ;查表后将键值送入ACC
0037 F580             28             MOV P0,A                    ;将Acc值送入P0口
0039 C293             29             CLR P1.3                        ;开显示
003B 020030           30             LJMP MAIN                    ;返回调用子程序反复循环显示
                      31     
                      32     ;----------------------------------------------------------------------
003E                  33     KEY: 
003E 12008C           34             LCALL KS                           ;调用检测按键子程序
0041 7005             35             JNZ K1                             ;有键按下继续
0043 120094           36             LCALL DELAY2                       ;无键按下调用延时去抖动程序
0046 013E             37             AJMP KEY                           ;返回继续检测有无按键按下
0048                  38     K1:  
0048 120094           39             LCALL DELAY2
004B 120094           40             LCALL DELAY2                       ;有键按下继续延时去抖动
004E 12008C           41             LCALL KS                           ;再一次调用检测按键程序
0051 7002             42             JNZ K2                             ;确认有按下进行下一步
0053 013E             43             AJMP KEY                           ;无键按下返回继续检测
0055                  44     K2: 
0055 7AEF             45             MOV R2,#0EFH                    ;将扫描值送入 R2暂存
0057 7C00             46             MOV R4,#00H                        ;将第一列的列值00H送入R4暂存,R4用于存放列值。
0059                  47     K3: 
0059 8AA0             48             MOV P2,R2                       ;将R2的值送入P1口
005B                  49     L6: 
005B 20A004           50             JB P2.0,L1                      ;P1.0等于1跳转到L1
005E 7400             51             MOV A,#00H                         ;将第一行的行值00H送入ACC
0060 0175             52             AJMP LK                            ;跳转到键值处理程序
0062                  53     L1: 
0062 20A104           54             JB P2.1,L2                      ;P1.1等于1跳转到L2
0065 7404             55             MOV A,#04H                         ;将第二行的行值送入ACC
0067 0175             56             AJMP LK                            ;跳转到键值理程序进行键值处理
0069                  57     L2: 
A51 MACRO ASSEMBLER  KEY                                                                  09/16/2006 15:20:16 PAGE     2

0069 20A204           58             JB P2.2,L3                          ;P1.2等于1跳转到L3
006C 7408             59             MOV A,#08H                         ;将第三行的行值送入ACC
006E 0175             60             AJMP LK                            ;跳转到键值处理程序
0070                  61     L3: 
0070 20A310           62             JB P2.3,NEXT                    ;P1.3等于1跳转到NEXT处
0073 740C             63             MOV A,#0cH                         ;将第四行的行值送入ACC
0075                  64     LK:
0075 2C               65             ADD A,R4                        ;行值与列值相加后的键值送入A
0076 C0E0             66             PUSH ACC                           ;将A中的值送入堆栈暂存
0078                  67     K4:  
0078 120094           68             LCALL DELAY2                       ;调用延时去抖动程序
007B 12008C           69             LCALL KS                           ;调用按键检测程序
007E 70F8             70             JNZ K4                             ;按键没有松开继续返回检测
0080 D0E0             71             POP ACC                            ;将堆栈的值送入ACC
0082 22               72             RET
                      73     
0083                  74     NEXT:
0083 0C               75             INC  R4                             ;将列值加一
0084 EA               76             MOV A,R2                            ;将R2的值送入A
0085 30E7B6           77             JNB ACC.7,KEY                       ;扫描完成跳至KEY处进行下一回合的扫描
0088 23               78             RL A                                ;扫描未完成将A中的值右移一位进行下一列的扫描
0089 FA               79             MOV R2,A                            ;将ACC的值送入R2暂存
008A 0159             80             AJMP K3                             ;跳转到K3继续
008C                  81     KS: 
008C 75A00F           82             MOV P2,#0FH                     ;将P1口高四位置0低四位值1
008F E5A0             83             MOV A,P2                           ;读P1口
0091 640F             84             XRL A,#0FH                         ;将A中的值与A中的值相异或
0093 22               85             RET                                ;子程序返回
0094                  86     DELAY2:                                 ;40ms延时去抖动子程序8*FA*2=40ms
0094 7D08             87             MOV R5,#08H
0096                  88     L7: 
0096 7EFA             89             MOV R6,#0FAH
0098                  90     L8: 
0098 DEFE             91             DJNZ R6,L8
009A DDFA             92             DJNZ R5,L7
009C 22               93             RET
                      94     
009D                  95     tab:
009D C0               96             DB        0C0H;0
009E F9               97             DB        0F9H;1
009F A4               98             DB        0A4H;2
00A0 B0               99             DB        0B0H;3
00A1 99              100             DB        099H;4
00A2 92              101             DB        092H;5
00A3 82              102             DB        082H;6
00A4 F8              103             DB        0F8H;7
00A5 80              104             DB        080H;8
00A6 90              105             DB        090H;9
00A7 88              106             DB        088H;A
00A8 83              107             DB        083H;b
00A9 C6              108             DB        0C6H;C
00AA A1              109             DB        0A1H;d
00AB 86              110             DB        086H;E
00AC 8E              111             DB        08EH;F
                     112     
                     113             END
                             
                             
                             
                             
A51 MACRO ASSEMBLER  KEY                                                                  09/16/2006 15:20:16 PAGE     3

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


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

ACC. . . . . . . .  D ADDR   00E0H   A   
DELAY2 . . . . . .  C ADDR   0094H   A   
K1 . . . . . . . .  C ADDR   0048H   A   
K2 . . . . . . . .  C ADDR   0055H   A   
K3 . . . . . . . .  C ADDR   0059H   A   
K4 . . . . . . . .  C ADDR   0078H   A   
KEY. . . . . . . .  C ADDR   003EH   A   
KS . . . . . . . .  C ADDR   008CH   A   
L1 . . . . . . . .  C ADDR   0062H   A   
L2 . . . . . . . .  C ADDR   0069H   A   
L3 . . . . . . . .  C ADDR   0070H   A   
L6 . . . . . . . .  C ADDR   005BH   A   
L7 . . . . . . . .  C ADDR   0096H   A   
L8 . . . . . . . .  C ADDR   0098H   A   
LK . . . . . . . .  C ADDR   0075H   A   
MAIN . . . . . . .  C ADDR   0030H   A   
NEXT . . . . . . .  C ADDR   0083H   A   
P0 . . . . . . . .  D ADDR   0080H   A   
P1 . . . . . . . .  D ADDR   0090H   A   
P2 . . . . . . . .  D ADDR   00A0H   A   
TAB. . . . . . . .  C ADDR   009DH   A   


REGISTER BANK(S) USED: 0 

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

⌨️ 快捷键说明

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