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

📄 ex05.lst

📁 单片机键盘扫描程序
💻 LST
字号:
A51 MACRO ASSEMBLER  EX05                                                                 05/22/2005 12:45:23 PAGE     1


MACRO ASSEMBLER A51 V7.03
OBJECT MODULE PLACED IN ex05.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE ex05.ASM SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1     ;*******************************************************************************
                       2     ;  Title:  演示程序1 - 按键检测                                                 *
                       3     ;  Name:   ex05.asm                                                             *
                       4     ;  Date:   2005-5-5                                                             *
                       5     ;  Ver:    1.0                                                                  *          
                                                                   *
                       6     ;  web:   http://www.mcustudy.com                                              *
                       7     ;********************************************************************************
                       8     ;*  描述:                                                                       *
                       9     ;*         按键扫描程序                                                         *
                      10     ;*         按下K1,单灯右移                                                      *
                      11     ;*         按下K2,单灯左移                                                      *
                      12     ;*                                                                              *
                      13     ;*                                                                              *
                      14     ;********************************************************************************
                      15     CODE_SEG        SEGMENT CODE
                      16     DATA_SEG        SEGMENT DATA
                      17     STACK_SEG       SEGMENT IDATA
                      18     
----                  19             RSEG    DATA_SEG
0000                  20     KEY_S:  DS      1
0001                  21     KEY_V:  DS      1
                      22     
----                  23             RSEG    STACK_SEG
0000                  24     STACK:  DS      20
                      25     
  00B2                26     K1      BIT     P3.2            ; 
  00B3                27     K2      BIT     P3.3            ; 
                      28     
                      29     
----                  30             CSEG    AT      0000H
0000 020000   F       31             JMP     MAIN
                      32     
                      33     ;===============================================================================        
----                  34             RSEG    CODE_SEG
0000                  35     MAIN:
0000 758100   F       36             MOV     SP,#(STACK-1)           ; 设置栈指针
0003 7580FE           37             MOV     P0,#0FEH                ; 初始LED状态
0006 750003   F       38             MOV     KEY_V,#03H              ; 初始键值
                      39     
0009                  40     KEY_CHKSW:                              ; 循环检测按键是否按下                             
                                  
0009 1100     F       41             ACALL   SCAN_KEY                ; 输入按键状态
000B F500     F       42             MOV     KEY_S,A
000D 6500     F       43             XRL     A,KEY_V                 ; 检查按键值是否改变
000F 60F8             44             JZ      KEY_CHKSW               ; 若无键被按,则跳回KEY_CHKSW
                      45             
0011 7F0A             46             MOV     R7,#10                  ; 延时10ms
0013 1100     F       47             ACALL   DELAYMS                 ; 延时去抖
0015 1100     F       48             ACALL   SCAN_KEY                ; 再次检查按键值
0017 F500     F       49             MOV     KEY_S,A
0019 6500     F       50             XRL     A,KEY_V
001B 60EC             51             JZ      KEY_CHKSW
                      52             
001D 850000   F       53             MOV     KEY_V,KEY_S             ; 保存按键状态
0020 1100     F       54             ACALL   PROC_KEY                ;
0022 80E5             55             SJMP    KEY_CHKSW
                      56     ;===============================================================================
A51 MACRO ASSEMBLER  EX05                                                                 05/22/2005 12:45:23 PAGE     2

                      57     ; 扫描按键
                      58     ; 传入参数:无
                      59     ; 返回值:A --- 按键状态
0024                  60     SCAN_KEY:                               
0024 E4               61             CLR     A
0025 A2B2             62             MOV     C,K1
0027 92E0             63             MOV     ACC.0,C
0029 A2B3             64             MOV     C,K2
002B 92E1             65             MOV     ACC.1,C
002D 22               66             RET
                      67     
                      68     ;===============================================================================        
                      69     ; 按键处理子程序
                      70     ; 传入参数: KEY_V --- 按键值
                      71     ; 返回值: 无
                      72     ;===============================================================================
002E                  73     PROC_KEY:
                      74     
002E E500     F       75             MOV     A,KEY_V
0030 30E004           76             JNB     ACC.0,PROC_K1
0033 30E107           77             JNB     ACC.1,PROC_K2
0036 22               78             RET
                      79             
0037                  80     PROC_K1:                                ; 按键K1处理程序
0037 E580             81             MOV     A,P0                    ; 右移
0039 03               82             RR      A
003A F580             83             MOV     P0,A
003C 22               84             RET
                      85             
003D                  86     PROC_K2:                                ; 按键K2处理程序
003D E580             87             MOV     A,P0                    ; 左移
003F 23               88             RL      A
0040 F580             89             MOV     P0,A     
0042 22               90             RET
                      91     
                      92     ;===============================================================================        
                      93     ; 延时子程序
                      94     ; 入口参数:R7 --- 延时值(MS) 
                      95     ; 返回值:无
                      96     
0043                  97     DELAYMS:
0043 EF               98             MOV     A,R7
0044 6009             99             JZ      END_DLYMS       
0046                 100     DLY_LP1:
0046 7EB9            101             MOV     R6,#185
0048                 102     DLY_LP2:
0048 00              103             NOP
0049 00              104             NOP
004A 00              105             NOP
004B DEFB            106             DJNZ    R6,DLY_LP2
004D DFF7            107             DJNZ    R7,DLY_LP1
                     108     
004F                 109     END_DLYMS:
004F 22              110             RET 
                     111             
                     112             END
A51 MACRO ASSEMBLER  EX05                                                                 05/22/2005 12:45:23 PAGE     3

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


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

ACC. . . . . . . .  D ADDR   00E0H   A   
CODE_SEG . . . . .  C SEG    0050H       REL=UNIT
DATA_SEG . . . . .  D SEG    0002H       REL=UNIT
DELAYMS. . . . . .  C ADDR   0043H   R   SEG=CODE_SEG
DLY_LP1. . . . . .  C ADDR   0046H   R   SEG=CODE_SEG
DLY_LP2. . . . . .  C ADDR   0048H   R   SEG=CODE_SEG
END_DLYMS. . . . .  C ADDR   004FH   R   SEG=CODE_SEG
K1 . . . . . . . .  B ADDR   00B0H.2 A   
K2 . . . . . . . .  B ADDR   00B0H.3 A   
KEY_CHKSW. . . . .  C ADDR   0009H   R   SEG=CODE_SEG
KEY_S. . . . . . .  D ADDR   0000H   R   SEG=DATA_SEG
KEY_V. . . . . . .  D ADDR   0001H   R   SEG=DATA_SEG
MAIN . . . . . . .  C ADDR   0000H   R   SEG=CODE_SEG
P0 . . . . . . . .  D ADDR   0080H   A   
P3 . . . . . . . .  D ADDR   00B0H   A   
PROC_K1. . . . . .  C ADDR   0037H   R   SEG=CODE_SEG
PROC_K2. . . . . .  C ADDR   003DH   R   SEG=CODE_SEG
PROC_KEY . . . . .  C ADDR   002EH   R   SEG=CODE_SEG
SCAN_KEY . . . . .  C ADDR   0024H   R   SEG=CODE_SEG
SP . . . . . . . .  D ADDR   0081H   A   
STACK. . . . . . .  I ADDR   0000H   R   SEG=STACK_SEG
STACK_SEG. . . . .  I SEG    0014H       REL=UNIT


REGISTER BANK(S) USED: 0 

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

⌨️ 快捷键说明

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