?? 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 + -