📄 key_led.lst
字号:
A51 MACRO ASSEMBLER KEY_LED 12/17/2007 17:27:03 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN KEY_LED.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE KEY_LED.ASM SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;********************** 程序说明 **************************
2 ;按键K1,K2为独立式键盘,K1对应P3.2,K2对应P3.3
3 ;K1模式选择键,其对应的模式有:
4 ;LED_DISPLAY1: LED逐个左移点亮
5 ;LED_DISPLAY2: LED逐个右移点亮
6 ;LED_DISPLAY3: LED流水灯左移
7 ;LED_DISPLAY4: LED流水灯右移
8 ;K2显示时间选择键,其对应的时间间隔有:
9 ;0.5S
10 ;1.0S
11 ;1.5S
12 ;2.0S
13 ;***********************************************************
0008 14 S2 EQU 08H
0004 15 S1 EQU 04H
16 ;===========================================================
0023 17 KEY_TIM EQU 35 ;按键次数
0030 18 DISP_REG0 EQU 30H ;
0031 19 DISP_REG1 EQU 31H ;
0032 20 DISP_REG2 EQU 32H ;
0033 21 DISP_REG3 EQU 33H ;
22
0034 23 LED_STATE EQU 34H ;LED显示状态变量
24
0035 25 LED_TIME_SEL EQU 35H ;LED显示状态变化时间选择变量
26 ;LED_TIME_SEL=1 LED的刷新时间为0.5S
27 ;LED_TIME_SEL=2 LED的刷新时间为1S
28 ;LED_TIME_SEL=3 LED的刷新时间为1.5S
29 ;LED_TIME_SEL=4 LED的刷新时间为2.0S
30
0036 31 LED_MODE_SEL EQU 36H ;LED显示模式选择变量
32 ;LED_MODE_SEL=1 LED的显示方式为拉屏显示,即LED_DISPLAY1
33 ;LED_MODE_SEL=2 LED的显示方式为正向流水灯,即LED_DISPLAY2
34 ;LED_MODE_SEL=3 LED的显示方式为反向流水灯,即LED_DISPLAY3
35 ;LED_MODE_SEL=4 LED的显示方式为反向流水灯,即LED_DISPLAY4
36
0037 37 KEY_VALUE EQU 37H ;键盘键值寄存器
0038 38 KEY_PUSH_COU EQU 38H ;键盘被按下的次数,即按键码时间=10ms*次数
0039 39 KEY_STATE EQU 39H ;键盘状态寄存器
0042 40 DISP_REG EQU 42H ;LED显示寄存器
0044 41 KEY_GET_REG EQU 44H ;取键值状态寄存器
0045 42 TIME_COU EQU 45H ;时间初值寄存器
0046 43 TIME_CHUZHI EQU 46H
0000 44 TIME_FLAG BIT 00H ;定时时标位,设定时间到置1
0004 45 T10MSFLAG BIT 04H ;10mS的定时时标位
0007 46 KEY_LED_flag BIT 07h ;按键与显示状态标志位 KEY为0,LED为1
0008 47 KEYSUCCFLAG BIT 08H ;按键成功标志位
0080 48 P0_0 BIT 80H ;
49 ;***************************************************************
0000 50 ORG 0000H
0000 020100 51 LJMP START
000B 52 ORG 000BH
000B 020264 53 LJMP TIMER0
54 ;
0100 55 ORG 0100H
0100 758160 56 START: MOV SP,#60H
0103 754632 57 MOV TIME_CHUZHI,#50 ;初始化 10mS*50=0.5S ;MOV 30H,#10
0106 753401 58 MOV LED_STATE,#01 ;初始化 LED显示状态变量
A51 MACRO ASSEMBLER KEY_LED 12/17/2007 17:27:03 PAGE 2
0109 753501 59 MOV LED_TIME_SEL,#1 ;初始化 LED显示时间选择变量
010C 753601 60 MOV LED_MODE_SEL,#1 ;初始化 LED显示模式选择变量
010F 753800 61 MOV KEY_PUSH_COU,#00H ;初始化 按键次数寄存器
0112 753900 62 MOV KEY_STATE,#00H ;初始化 按键状态寄存器
0115 754500 63 MOV TIME_COU,#00H
0118 7542FE 64 MOV DISP_REG,#0FEH ;初始化 LED显示寄存器
011B 754400 65 MOV KEY_GET_REG,#00H ;初始化 取键值状态寄存器
011E C204 66 CLR T10MSflag
0120 C208 67 CLR KEYSUCCflag
0122 D207 68 SETB KEY_LED_flag ;初始化,设为LED显示状态
0124 753000 69 MOV DISP_REG0,#00H ;显示方式0函数的数据指针
0127 753101 70 MOV DISP_REG1,#01H ;显示方式1函数的数据指针
012A 753202 71 MOV DISP_REG2,#02H ;显示方式2函数的数据指针
012D 753303 72 MOV DISP_REG3,#03H ;显示方式3函数的数据指针
73
0130 758CD8 74 MOV TH0,#0D8H ;设计数初值,定时时间为10mS
0133 758AF0 75 MOV TL0,#0F0H
76
0136 758901 77 MOV TMOD,#01H ;定时器0工作于方式2,为16位的定时器
0139 D2A9 78 SETB ET0
013B D28C 79 SETB TR0
013D D2AF 80 SETB EA
81
82 ;
013F 83 MAIN_LOOP: ;主程序入口
013F 300405 84 JNB T10MSflag,MAIN_NEXT2 ;10MS调一下键盘扫描
0142 C204 85 CLR T10MSflag ;清10MS时标标志位
0144 1201C9 86 LCALL KEYSCAN
87 ;
0147 88 MAIN_NEXT2:
0147 300805 89 JNB KEYSUCCFLAG,MAIN_NEXT3
014A C208 90 CLR KEYSUCCFLAG
014C 1201A5 91 LCALL KEY_CHECK
014F 92 MAIN_NEXT3:
014F 3000ED 93 JNB TIME_FLAG,MAIN_LOOP
0152 C200 94 CLR TIME_FLAG
0154 12016A 95 LCALL DISLED_MODE_SEL
0157 02013F 96 LJMP MAIN_LOOP
97 ;主程式序循环扫描
015A FEFCF8F0 98 DISP_TABLE1: DB 0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,080H,000H
015E E0C08000
0162 0080C0E0 99 DISP_TABLE2: DB 000H,080H,0C0H,0E0H,0F0H,0F8H,0FCH,0FFH
0166 F0F8FCFF
100 ;
016A 101 DISLED_MODE_SEL:
016A E536 102 MOV A,LED_MODE_SEL
016C B40008 103 CJNE A,#00H,DIS_00
016F E530 104 MOV A,DISP_REG0
0171 23 105 RL A
0172 F530 106 MOV DISP_REG0,A
0174 F590 107 MOV P1,A
108
0176 22 109 RET
110 ;
0177 B40108 111 DIS_00:CJNE A,#01H,DIS_01
017A E531 112 MOV A,DISP_REG1
017C 03 113 RR A
017D F531 114 MOV DISP_REG1,A
017F F590 115 MOV P1,A
0181 22 116 RET
117 ;
0182 B40213 118 DIS_01: CJNE A,#02H,DIS_02
0185 E532 119 MOV A,DISP_REG2
0187 90015A 120 MOV DPTR,#DISP_TABLE1
018A 93 121 MOVC A,@A+DPTR
018B F590 122 MOV P1,A
A51 MACRO ASSEMBLER KEY_LED 12/17/2007 17:27:03 PAGE 3
018D 0532 123 INC DISP_REG2
018F E532 124 MOV A,DISP_REG2
0191 B40803 125 CJNE A,#08H,DIS_001
0194 753200 126 MOV DISP_REG2,#00H
0197 127 DIS_001:
0197 22 128 RET
129 ;
0198 B40305 130 DIS_02: CJNE A,#03H,DIS_RR
019B E533 131 MOV A,DISP_REG3
019D 13 132 RRC A
019E F590 133 MOV P1,A
01A0 22 134 DIS_RR: RET
135 ;
01A1 326496C8 136 TIME_TABLE:DB 50,100,150,200
01A5 137 KEY_CHECK:
01A5 E537 138 MOV A,KEY_VALUE
01A7 B40811 139 CJNE A,#S2,KEY_C0
01AA 0535 140 INC LED_TIME_SEL
01AC B40403 141 CJNE A,#04H,KEY_C1
01AF 753500 142 MOV LED_TIME_SEL,#00H
143 ;
01B2 E535 144 KEY_C1: MOV A,LED_TIME_SEL
01B4 9001A1 145 MOV DPTR,#TIME_TABLE
01B7 93 146 MOVC A,@A+DPTR
01B8 F546 147 MOV TIME_CHUZHI,A
01BA 22 148 RET
149 ;
01BB B4040A 150 KEY_C0: CJNE A,#S1,KEY_C2
01BE 0536 151 INC LED_MODE_SEL
01C0 E536 152 MOV A,LED_MODE_SEL
01C2 B40403 153 CJNE A,#04H,KEY_C2
01C5 753600 154 MOV LED_MODE_SEL,#00H
01C8 22 155 KEY_C2: RET
156 ;***************************************************************
157 ;独立键盘处理程序
158 ;K1从P3.2输入 K2从P3.3输入
159 ;K1为模式选择键,K2为方式选择键
160 ;***************************************************************
01C9 161 KEYSCAN:
01C9 43B00C 162 ORL P3,#0CH
01CC E5B0 163 MOV A,P3
01CE 540C 164 ANL A,#0CH
01D0 F5F0 165 MOV B,A
01D2 B40C04 166 CJNE A,#0CH,KEY_00; ;没有键按下直接退出
01D5 753900 167 MOV KEY_STATE,#00H
01D8 22 168 RET
169 ;
01D9 E539 170 KEY_00: MOV A,KEY_STATE
01DB B40008 171 CJNE A,#00H,KEY_01
01DE E5F0 172 MOV A,B
01E0 F537 173 MOV KEY_VALUE,A
01E2 753901 174 MOV KEY_STATE,#01H
01E5 22 175 RET
176 ;
01E6 B4010D 177 KEY_01: CJNE A,#01H,KEY_03
01E9 E5F0 178 MOV A,B
01EB B53704 179 CJNE A,KEY_VALUE,KEY_02
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -