📄 ledkey.lst
字号:
A51 MACRO ASSEMBLER LEDKEY 02/09/2006 13:05:42 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN ledkey.OBJ
ASSEMBLER INVOKED BY: D:\Keil\C51\BIN\A51.EXE ledkey.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
0000 1 UpDown BIT 00H ;上下行标志
0001 2 StartEnd BIT 01H ;起动及停止标志
0021 3 LAMPCODE EQU 21H ;存放流动的数据代码
0000 4 ORG 0000H
0000 0130 5 AJMP MAIN
0030 6 ORG 0030H
0030 7 MAIN:
0030 75815F 8 MOV SP,#5FH
0033 7590FF 9 MOV P1,#0FFH
0036 C200 10 CLR UpDown ;启动时处于向上的状态
0038 C201 11 CLR StartEnd ;启动时处于停止状态
003A 752101 12 MOV LAMPCODE,#01H ;单灯流动的代码
003D 1170 13 LOOP: ACALL KEY ;调用键盘程序
003F 30D502 14 JNB F0,LNEXT ;如果无键按下,则继续
0042 1151 15 ACALL KEYPROC ;否则调用键盘处理程序
0044 1196 16 LNEXT: ACALL LAMP ;调用灯显示程序
0046 013D 17 AJMP LOOP ;反复循环,主程序到此结束
18 ;延时程序,键盘处理中调用
0048 7F64 19 DELAY: MOV R7,#100
004A 7E64 20 D1: MOV R6,#100
004C DEFE 21 DJNZ R6,$
004E DFFA 22 DJNZ R7,D1
0050 22 23 RET
0051 24 KEYPROC:
0051 E5F0 25 MOV A,B ;从B 寄存器中获取键值
0053 20E20B 26 JB ACC.2,KeyStart ;分析键的代码,某位被按下,则该位为1
0056 20E30C 27 JB ACC.3,KeyOver
0059 20E40D 28 JB ACC.4,KeyUp
005C 20E50E 29 JB ACC.5,KeyDown
005F 016F 30 AJMP KEY_RET
0061 31 KeyStart:
0061 D201 32 SETB StartEnd ;第一个键按下后的处理
0063 016F 33 AJMP KEY_RET
0065 34 KeyOver:
0065 C201 35 CLR StartEnd ;第二个键按下后的处理
0067 016F 36 AJMP KEY_RET
0069 37 KeyUp:
0069 D200 38 SETB UpDown ;第三个键按下后的处理
006B 016F 39 AJMP KEY_RET
006D 40 KeyDown:
006D C200 41 CLR UpDown ;第四个键按下后的处理
006F 42 KEY_RET:
006F 22 43 RET
0070 44 KEY:
0070 C2D5 45 CLR F0 ;清F0,表示无键按下。
0072 43B03C 46 ORL P3,#00111100B ;将P3 口的接有键的四位置1
0075 E5B0 47 MOV A,P3 ;取P3 的值
0077 44C3 48 ORL A,#11000011B ;将其余4 位置1
0079 F4 49 CPL A ;取反
007A 60F3 50 JZ KEY_RET ;如果为0 则一定无键按下
007C 1148 51 CALL DELAY ;否则延时去键抖
007E 43B03C 52 ORL P3,#00111100B
0081 E5B0 53 MOV A,P3
0083 44C3 54 ORL A,#11000011B
0085 F4 55 CPL A
0086 60E7 56 JZ KEY_RET
0088 F5F0 57 MOV B,A ;确实有键按下,将键值存入B 中
008A D2D5 58 SETB F0 ;设置有键按下的标志
A51 MACRO ASSEMBLER LEDKEY 02/09/2006 13:05:42 PAGE 2
59 ;以下的代码是可以被注释掉的,如果去掉注释,就具有判断键是否释放的功能,否则
60 ;没有
61 ;K_RET: ;ORL P3,#00111100B ;此处循环等待键的释放
62 ;MOV A,P3
63 ;ORL A,#11000011B
64 ;CPL A
65 ;JZ K_RET1 ;读取的数据取反后为0 说明键释放了
66 ;AJMP K_RET
67 ;K_RET1:CALL DELAY ;消除后沿抖动
008C 22 68 RET
008D 69 D500MS: ;流水灯的延迟时间
008D 7FFF 70 MOV R7,#255
008F 7EFF 71 D51: MOV R6,#255
0091 DEFE 72 DJNZ R6,$
0093 DFFA 73 DJNZ R7,D51
0095 22 74 RET
0096 75 LAMP:
0096 200105 76 JB StartEnd,LampStart ;如果StartEnd=1,则启动
0099 7590FF 77 MOV P1,#0FFH
009C 01C3 78 AJMP LAMPRET ;否则关闭所有显示,返回
009E 79 LampStart:
009E 200012 80 JB UpDown,LAMPUP ;如果UpDown=1,则向上流动
00A1 E521 81 MOV A,LAMPCODE
00A3 23 82 RL A ;实际就是左移位而已
00A4 F521 83 MOV LAMPCODE,A
00A6 F590 84 MOV P1,A
00A8 12008D 85 LCALL D500MS
00AB 12008D 86 LCALL D500MS
00AE 12008D 87 LCALL D500MS
00B1 01C3 88 AJMP LAMPRET
00B3 89 LAMPUP:
00B3 E521 90 MOV A,LAMPCODE
00B5 03 91 RR A ;向下流动实际就是右移
00B6 F521 92 MOV LAMPCODE,A
00B8 F590 93 MOV P1,A
00BA 12008D 94 LCALL D500MS
00BD 12008D 95 LCALL D500MS
00C0 12008D 96 LCALL D500MS
00C3 97 LAMPRET:
00C3 22 98 RET
99 END
A51 MACRO ASSEMBLER LEDKEY 02/09/2006 13:05:42 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
D1 . . . . . . . . C ADDR 004AH A
D500MS . . . . . . C ADDR 008DH A
D51. . . . . . . . C ADDR 008FH A
DELAY. . . . . . . C ADDR 0048H A
F0 . . . . . . . . B ADDR 00D0H.5 A
KEY. . . . . . . . C ADDR 0070H A
KEYDOWN. . . . . . C ADDR 006DH A
KEYOVER. . . . . . C ADDR 0065H A
KEYPROC. . . . . . C ADDR 0051H A
KEYSTART . . . . . C ADDR 0061H A
KEYUP. . . . . . . C ADDR 0069H A
KEY_RET. . . . . . C ADDR 006FH A
LAMP . . . . . . . C ADDR 0096H A
LAMPCODE . . . . . N NUMB 0021H A
LAMPRET. . . . . . C ADDR 00C3H A
LAMPSTART. . . . . C ADDR 009EH A
LAMPUP . . . . . . C ADDR 00B3H A
LNEXT. . . . . . . C ADDR 0044H A
LOOP . . . . . . . C ADDR 003DH A
MAIN . . . . . . . C ADDR 0030H A
P1 . . . . . . . . D ADDR 0090H A
P3 . . . . . . . . D ADDR 00B0H A
SP . . . . . . . . D ADDR 0081H A
STARTEND . . . . . B ADDR 0020H.1 A
UPDOWN . . . . . . B ADDR 0020H.0 A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -