📄 12.lst
字号:
A51 MACRO ASSEMBLER 12 12/14/2007 18:39:53 PAGE 1
MACRO ASSEMBLER A51 V7.10
OBJECT MODULE PLACED IN 12.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE 12.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1
2
3
0000 4 org 0000h
0000 0130 5 ajmp main
0023 6 ORG 0023H
0023 0200AC 7 lJMP COMINT
0030 8 org 0030h
0030 9 main:
0030 758000 10 MOV P0, #00H ;
0033 75A0FF 11 MOV P2, #0FFH ;
12 ;MOV R2,#5
13 ;MOV R0,#53H
0036 752000 14 MOV 20H,#00H ;设置串口工作方式
0039 758920 15 MOV TMOD,#20H
003C 759850 16 MOV SCON,#50H
003F 758DF3 17 MOV TH1,#0F3H ;设置速率4800,(12M晶体)
0042 758780 18 MOV PCON,#80H
0045 D2AF 19 SETB EA
0047 D2AC 20 SETB ES
0049 D28E 21 SETB TR1
004B 22 loop:
23
004B 9000F2 24 mov dptr,#tab ;将表头放入DPTR
004E 12005B 25 lcall KEY ;调用键盘扫描程序
0051 93 26 movc a,@a+dptr ;查表后将键值送入ACC
0052 F580 27 mov p0,a ;将Acc值送入P0口
0054 F599 28 mov sbuf,a
0056 C2A7 29 CLR P2.7 ;开显示
0058 02004B 30 ljmp loop ;返回反复循环显示
31 ;-------------键盘扫描------------------------------------
005B 1200A4 32 KEY: LCALL KS ;调用检测按键子程序
005E 7005 33 JNZ K1 ;有键按下K1
0060 1200E9 34 LCALL DELAY2 ;无键按调用延时去抖
0063 015B 35 AJMP KEY ;返回继续检测按键
0065 1200E9 36 K1: LCALL DELAY2
0068 1200E9 37 LCALL DELAY2 ;有键按下延时去抖动
006B 1200A4 38 LCALL KS ;再调用检测按键程序
006E 7002 39 JNZ K2 ;确认有按下进行下一步
0070 015B 40 AJMP KEY ;无键按下返回继续检测
0072 7ADF 41 K2: MOV R2,#0DFH ;将扫描值送入 R2暂存
0074 7C00 42 MOV R4,#00H ;将第一列值送入R4暂存
0076 8AB0 43 K3: MOV P3,R2 ;将R2的值送入P1口
0078 20B404 44 L6: JB P3.4,L1 ;P3.4等于1跳转到L1
007B 7407 45 MOV A,#07H ;将第一行值送入ACC
007D 018D 46 AJMP LK ;跳转到键值处理程序
007F 20B304 47 L1: JB P3.3,L2 ;P3.3等于1跳转到L2
0082 7404 48 MOV A,#04H ;将第二行的行值送入ACC
0084 018D 49 AJMP LK ;跳转到键值理程序进行键值处理
0086 20B212 50 L2: JB P3.2,NEXT ;P3.2等于1跳转到NEXT
0089 7401 51 MOV A,#01H ;将第刃械男兄邓腿階CC
008B 018D 52 AJMP LK ;跳转到键值处理程序
008D 2C 53 LK: ADD A,R4;行值与列值相加再加1后的键值送入A
54 ;ADD A,#01H
008E C0E0 55 PUSH ACC ;将A中的值送入堆栈暂存
0090 1200E9 56 K4: LCALL DELAY2 ;调用延时去抖动程序
0093 1200A4 57 LCALL KS ;调用按键检测程序
0096 70F8 58 JNZ K4 ;按键没有松开继续返回检测
A51 MACRO ASSEMBLER 12 12/14/2007 18:39:53 PAGE 2
0098 D0E0 59 POP ACC ;将堆栈的值送入ACC
009A 22 60 RET
009B 0C 61 NEXT:INC R4 ;将列值加一
009C EA 62 MOV A,R2 ;将R2的值送入A
009D 30E7BB 63 JNB ACC.7,KEY ;扫描完至KEY处进行下一扫描
00A0 23 64 RL A ;扫描未完将A中的值右移一位进行下一列的扫描
00A1 FA 65 MOV R2,A ;将ACC的值送入R2暂存
00A2 0176 66 AJMP K3 ;跳转到K3继续
00A4 75B01F 67 KS: MOV P3,#1FH ;将P3口P3.7-P3.5位置0,P3.4-P3.2位置1
00A7 E5B0 68 MOV A,P3 ;读P3口
00A9 641F 69 XRL A,#1FH ;将A中的值与A中的值相异或
00AB 22 70 RET ;子程序返回
71
72 ;-------------------串口中断--------------------------
00AC 73 COMINT:
00AC C0E0 74 push acc
00AE C2AC 75 CLR ES
00B0 C298 76 CLR RI
00B2 E599 77 MOV A,SBUF
00B4 B40103 78 CJNE A,#1,IN_1
00B7 7590FE 79 MOV P1,#0FEH
00BA 80 IN_1:
00BA B40203 81 CJNE A,#2,IN_2
00BD 7590FD 82 MOV P1,#0FDH
00C0 83 IN_2:
00C0 B40303 84 CJNE A,#3,IN_3
00C3 7590FB 85 MOV P1,#0FBH
00C6 86 IN_3:
00C6 B40403 87 CJNE A,#4,IN_4
00C9 7590F7 88 MOV P1,#0F7H
00CC 89 IN_4:
00CC B40503 90 CJNE A,#5,IN_5
00CF 7590EF 91 MOV P1,#0EFH
00D2 92 IN_5:
00D2 B40603 93 CJNE A,#6,IN_6
00D5 7590DF 94 MOV P1,#0DFH
00D8 95 IN_6:
00D8 B40703 96 CJNE A,#7,IN_7
00DB 7590BF 97 MOV P1,#0BFH
00DE 98 IN_7:
00DE B40803 99 CJNE A,#8,IN_8
00E1 75907F 100 MOV P1,#07FH
00E4 101 IN_8:
00E4 D2AC 102 SETB ES
00E6 D0E0 103 pop acc
00E8 32 104 RETI
105
106
107
108 ;----------延时程序---------------------------
00E9 109 DELAY2: ;40ms延时去抖动子程序
00E9 7D08 110 MOV R5,#08H
00EB 7EFA 111 L7: MOV R6,#0FAH
00ED DEFE 112 L8: DJNZ R6,L8
00EF DDFA 113 DJNZ R5,L7
00F1 22 114 RET
00F2 115 tab:
00F2 3F065B4F 116 db 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71
00F6 666D7D07
00FA 7F6F777C
00FE 395E7971
117 end
A51 MACRO ASSEMBLER 12 12/14/2007 18:39:53 PAGE 3
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
COMINT . . . . . . C ADDR 00ACH A
DELAY2 . . . . . . C ADDR 00E9H A
EA . . . . . . . . B ADDR 00A8H.7 A
ES . . . . . . . . B ADDR 00A8H.4 A
IN_1 . . . . . . . C ADDR 00BAH A
IN_2 . . . . . . . C ADDR 00C0H A
IN_3 . . . . . . . C ADDR 00C6H A
IN_4 . . . . . . . C ADDR 00CCH A
IN_5 . . . . . . . C ADDR 00D2H A
IN_6 . . . . . . . C ADDR 00D8H A
IN_7 . . . . . . . C ADDR 00DEH A
IN_8 . . . . . . . C ADDR 00E4H A
K1 . . . . . . . . C ADDR 0065H A
K2 . . . . . . . . C ADDR 0072H A
K3 . . . . . . . . C ADDR 0076H A
K4 . . . . . . . . C ADDR 0090H A
KEY. . . . . . . . C ADDR 005BH A
KS . . . . . . . . C ADDR 00A4H A
L1 . . . . . . . . C ADDR 007FH A
L2 . . . . . . . . C ADDR 0086H A
L6 . . . . . . . . C ADDR 0078H A
L7 . . . . . . . . C ADDR 00EBH A
L8 . . . . . . . . C ADDR 00EDH A
LK . . . . . . . . C ADDR 008DH A
LOOP . . . . . . . C ADDR 004BH A
MAIN . . . . . . . C ADDR 0030H A
NEXT . . . . . . . C ADDR 009BH A
P0 . . . . . . . . D ADDR 0080H A
P1 . . . . . . . . D ADDR 0090H A
P2 . . . . . . . . D ADDR 00A0H A
P3 . . . . . . . . D ADDR 00B0H A
PCON . . . . . . . D ADDR 0087H A
RI . . . . . . . . B ADDR 0098H.0 A
SBUF . . . . . . . D ADDR 0099H A
SCON . . . . . . . D ADDR 0098H A
TAB. . . . . . . . C ADDR 00F2H A
TH1. . . . . . . . D ADDR 008DH A
TMOD . . . . . . . D ADDR 0089H A
TR1. . . . . . . . B ADDR 0088H.6 A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -