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

📄 ex3-3.lst

📁 《PIC单片机应用开发典型模块》源代码及图片
💻 LST
字号:
A51 MACRO ASSEMBLER  EX3_3                                                                06/23/2007 17:01:14 PAGE     1


MACRO ASSEMBLER A51 V7.09
OBJECT MODULE PLACED IN ex3-3.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE ex3-3.asm SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1     ;--------------程序信息-----------------
                       2     ;文件名   : ex3-3.asm
                       3     ;版本     : 1.0
                       4     ;作者     :
                       5     ;修改时间 :
                       6     
                       7     ;--------------程序说明------------------
                       8     ;CHAP 3.3 扫描方式键盘输入实例
                       9     
                      10     ;-----------常量和变量声明---------------
  0090                11                     KEYIN EQU P1;
                      12     
                      13     ;--------------预定义--------------------
                      14     
0000                  15                    ORG 0000H
0000 020003           16                    LJMP START
                      17     
                      18     ;------------中断入口地址分配------------
                      19                    ;ORG 0003H
                      20                    ;LJMP INT0PRG
                      21                    ;ORG 000BH
                      22                    ;LJMP INT1PRG
                      23                    ;ORG 0013H;
                      24                    ;LJMP
                      25                    ;ORG 0030H
                      26     
0003                  27     START:
                      28     ;--------------初始化子程序--------------
0003 856081           29          MOV SP,60H;
                      30     ;--------------主程序--------------------
0006                  31     MAIN:
0006 12000C           32             LCALL KEYBOARD;
0009 020006           33     LJMP MAIN
                      34     
                      35     
                      36     ;----------------子程序------------------
                      37     
                      38     ;---------------------------------
                      39     ;    行列式键盘扫描方式子程序部分
                      40     ;---------------------------------
000C                  41     KEYBOARD:
000C 7800             42             MOV R0,#00H;         r0寄存器保存键值,初始化清零
000E 75900F           43             MOV KEYIN,#0FH;     所有列置高电平
0011 E590             44             MOV A,KEYIN;         读取行值
0013 F8               45             MOV R0,A;             保存这次的行值
0014 120075           46             LCALL DEYLAY10MS;   延时去抖
0017 75900F           47             MOV KEYIN,#0FH;      再读行值
001A E590             48             MOV A,KEYIN;
                      49     ;CJNE A,R0,KEYBOARD;          比较去抖前后,相同则认为有键按下,否则重新读键值
001C B40F03           50     CJNE A,#0FH,HAVEKEY;
001F 02000C           51             LJMP KEYBOARD;      
0022                  52     HAVEKEY:
0022 759008           53             MOV KEYIN,#08H;      第一列置高电平扫描
0025 E590             54             MOV A,KEYIN;         读出扫描的行值
0027 B40803           55             CJNE A,#08H,COL1;    判断按键是否在第一列
002A 020031           56             LJMP COL2;           否,则跳转扫描下一列
002D 7900             57     COL1:  MOV R1,#00H;          是,则记下列数
002F 801E             58     JMP KEYBOARDEND;             跳转到键值处理部分
A51 MACRO ASSEMBLER  EX3_3                                                                06/23/2007 17:01:14 PAGE     2

0031 B40403           59     COL2:   CJNE A,#04H,COL22;   同上,判断按键是否在第二列
0034 02003B           60             LJMP COL3;
0037 7901             61     COL22:  MOV R1,#01H;         是,记下列数,第二列
0039 8014             62     JMP KEYBOARDEND;
003B B40203           63     COL3:   CJNE A,#02H,COL33;
003E 020045           64             LJMP COL4;
0041 7902             65     COL33:  MOV R1,#02H;         记下列数,第三列
0043 800A             66     JMP KEYBOARDEND;
0045 B40103           67     COL4:   CJNE A,#01H,COL44;
0048 02000C           68             LJMP KEYBOARD;
004B 7901             69     COL44:  MOV R1,#01H         ;第四列
004D 8000             70             JMP KEYBOARDEND;
004F                  71     KEYBOARDEND:               ;键值处理程序块
004F E8               72             MOV A,R0;             
0050 120057           73             LCALL COLSCAN;      判断按键在第几行,R0返回行基数
0053 F8               74             MOV R0,A;             R1保存列数,R0保存行基数
0054 29               75             ADD A,R1;             则 键值=R1+R0
0055 F8               76             MOV R0,A;
0056 22               77             RET;
                      78     ;---------------------------------
                      79     ;    行扫描方式识别子程序部分
                      80     ;    R0返回行增加的键值基数     
                      81     ;    具体是第一行R0<=0第三行R0<=8 第二行R0<=4第四行R0<=12
                      82     ;---------------------------------
0057 E8               83     COLSCAN: MOV A,R0;           
0058 30E404           84             JNB ACC.4,ROW2;       判断是否是第一行
005B 7800             85             MOV R0,#00H;          是,则R0=0保存行基数
005D 8015             86             JMP COLSCANEND;     否,则跳转判断下一行
005F 30E504           87     ROW2:  JNB ACC.5,ROW3;
0062 7804             88             MOV R0,#04H;
0064 800E             89             JMP COLSCANEND;
0066 30E604           90     ROW3:  JNB ACC.6,ROW4;
0069 7808             91             MOV R0,#08H;
006B 8007             92             JMP COLSCANEND;
006D 30E704           93     ROW4:  JNB ACC.7,COLSCANEND;
0070 780C             94             MOV R0,#0CH;
0072 8000             95             JMP COLSCANEND;
0074                  96     COLSCANEND: 
0074 22               97             RET;
                      98     
                      99     ;--------------中断子程序----------------
                     100     
                     101     ;---------------延时子程序---------------
0075 7E40            102     DEYLAY10MS:  MOV R6,#40H;
0077 7F48            103     DELAY0:     MOV R7,#248H;
*** _____________________________________________^
*** WARNING #A52 IN 103 (ex3-3.asm, LINE 103): VALUE HAS BEEN TRUNCATED TO 8 BITS
0079 DFFE            104                 DJNZ R7,$;
007B DEFA            105                 DJNZ R6,DELAY0;
007D 22              106                 RET;
                     107     
                     108     
                     109     END
                             
                             ;---------------注意事项-----------------
                             
A51 MACRO ASSEMBLER  EX3_3                                                                06/23/2007 17:01:14 PAGE     3

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


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

ACC. . . . . . . .  D ADDR   00E0H   A   
COL1 . . . . . . .  C ADDR   002DH   A   
COL2 . . . . . . .  C ADDR   0031H   A   
COL22. . . . . . .  C ADDR   0037H   A   
COL3 . . . . . . .  C ADDR   003BH   A   
COL33. . . . . . .  C ADDR   0041H   A   
COL4 . . . . . . .  C ADDR   0045H   A   
COL44. . . . . . .  C ADDR   004BH   A   
COLSCAN. . . . . .  C ADDR   0057H   A   
COLSCANEND . . . .  C ADDR   0074H   A   
DELAY0 . . . . . .  C ADDR   0077H   A   
DEYLAY10MS . . . .  C ADDR   0075H   A   
HAVEKEY. . . . . .  C ADDR   0022H   A   
KEYBOARD . . . . .  C ADDR   000CH   A   
KEYBOARDEND. . . .  C ADDR   004FH   A   
KEYIN. . . . . . .  D ADDR   0090H   A   
MAIN . . . . . . .  C ADDR   0006H   A   
P1 . . . . . . . .  D ADDR   0090H   A   
ROW2 . . . . . . .  C ADDR   005FH   A   
ROW3 . . . . . . .  C ADDR   0066H   A   
ROW4 . . . . . . .  C ADDR   006DH   A   
SP . . . . . . . .  D ADDR   0081H   A   
START. . . . . . .  C ADDR   0003H   A   


REGISTER BANK(S) USED: 0 

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

⌨️ 快捷键说明

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