?? led.lst
字號:
(0303) DDRC=0x00;
0182 BA24 OUT 0x14,R2
(0304) PORTD=0xff;
0183 BB82 OUT 0x12,R24
(0305) DDRD=0x00;
0184 BA21 OUT 0x11,R2
(0306) Un_Led();
0185 DFCE RCALL _Un_Led
(0307) Clear_SMG();
0186 DFD3 RCALL _Clear_SMG
0187 9508 RET
FILE: F:\qihaijun\kaifa\1_LED\LED.c
(0001)
(0002) #include <iom16v.h> //包含單片機型號頭文件
(0003) #include <macros.h> //包含"位"操作頭文件
(0004) #include <delay.h> //包含延時頭文件
(0005) #include <AVR_XQV12.h> //包含通用函數及宏定義頭文件
(0006) /*******************************************************/
(0007) /****** 函數名稱: Scan_Int_Key() ******/
(0008) /****** 功 能: 掃描INT0、INT1按鍵,使鍵值改變******/
(0009) /****** 參 數: 無 ******/
(0010) /****** 返回值 : 無 ******/
(0011) /*******************************************************/
(0012) void Scan_Int_Key(void)
(0013) {
(0014) if(KEY0==0) //判斷是否有鍵按下
_Scan_Int_Key:
0188 9982 SBIC 0x10,2
0189 C013 RJMP 0x019D
(0015) {
(0016) delay_nms(10); //延時去抖
018A E00A LDI R16,0xA
018B E010 LDI R17,0
018C DED5 RCALL _delay_nms
(0017) if(KEY0==0) //再次判斷是否有鍵按下
018D 9982 SBIC 0x10,2
018E C00E RJMP 0x019D
(0018) {
(0019) while(KEY0==0); //等待按鍵釋放
018F 9B82 SBIS 0x10,2
0190 CFFE RJMP 0x018F
(0020) Key_Number++; //鍵值加1
0191 91800062 LDS R24,Key_Number
0193 5F8F SUBI R24,0xFF
0194 93800062 STS Key_Number,R24
(0021) if(Key_Number>2)
0196 E082 LDI R24,2
0197 90200062 LDS R2,Key_Number
0199 1582 CP R24,R2
019A F410 BCC 0x019D
(0022) Key_Number=2;
019B 93800062 STS Key_Number,R24
(0023) }
(0024) }
(0025) if(KEY1==0) //判斷是否有鍵按下
019D 9983 SBIC 0x10,3
019E C014 RJMP 0x01B3
(0026) {
(0027) delay_nms(10); //延時去抖
019F E00A LDI R16,0xA
01A0 E010 LDI R17,0
01A1 DEC0 RCALL _delay_nms
(0028) if(KEY1==0) //再次判斷是否有鍵按下
01A2 9983 SBIC 0x10,3
01A3 C00F RJMP 0x01B3
(0029) {
(0030) while(KEY1==0); //等待按鍵釋放
01A4 9B83 SBIS 0x10,3
01A5 CFFE RJMP 0x01A4
(0031) Key_Number--; //鍵值減1
01A6 91800062 LDS R24,Key_Number
01A8 5081 SUBI R24,1
01A9 93800062 STS Key_Number,R24
(0032) if(Key_Number>2)
01AB E082 LDI R24,2
01AC 90200062 LDS R2,Key_Number
01AE 1582 CP R24,R2
01AF F418 BCC 0x01B3
(0033) Key_Number=0;
01B0 2422 CLR R2
01B1 92200062 STS Key_Number,R2
(0034) }
(0035) }
01B3 9508 RET
(0036) }
(0037)
(0038) /*******************************************************/
(0039) /****** 函數名稱: main() ******/
(0040) /****** 功 能: 流水燈、按鍵INT0、INT1改變顯示方式**/
(0041) /****** 參 數: 無 ******/
(0042) /****** 返回值 : 無 ******/
(0043) /*******************************************************/
(0044) void main(void)
(0045) {
(0046) unsigned char i;
(0047) CPU_Init(); //初始化CPU
_main:
i --> R22
01B4 DFC2 RCALL _CPU_Init
(0048) En_Led(); //使能LED
01B5 DF99 RCALL _En_Led
01B6 C093 RJMP 0x024A
(0049) while(1)
(0050) {
(0051) switch(Key_Number) //選擇LED掃描方式
01B7 91400062 LDS R20,Key_Number
01B9 2755 CLR R21
01BA 3040 CPI R20,0
01BB 0745 CPC R20,R21
01BC F409 BNE 0x01BE
01BD C049 RJMP 0x0207
01BE 3041 CPI R20,1
01BF E0E0 LDI R30,0
01C0 075E CPC R21,R30
01C1 F409 BNE 0x01C3
01C2 C064 RJMP 0x0227
01C3 3042 CPI R20,2
01C4 E0E0 LDI R30,0
01C5 075E CPC R21,R30
01C6 F409 BNE 0x01C8
01C7 C081 RJMP 0x0249
01C8 C081 RJMP 0x024A
(0052) {
(0053) case 0:
(0054) while(1)
(0055) {
(0056) for(i=0;i<8;i++)
01C9 2766 CLR R22
01CA C015 RJMP 0x01E0
(0057) {
(0058) LED=0xff; //LED全部熄滅
01CB EF8F LDI R24,0xFF
01CC BB88 OUT 0x18,R24
(0059) LED&=~BIT(i); //點亮相應位LED
01CD E001 LDI R16,1
01CE 2F16 MOV R17,R22
01CF 940E026E CALL lsl8
01D1 2E20 MOV R2,R16
01D2 9420 COM R2
01D3 B238 IN R3,0x18
01D4 2032 AND R3,R2
01D5 BA38 OUT 0x18,R3
(0060) delay_nms(100); //延時大約100毫秒
01D6 E604 LDI R16,0x64
01D7 E010 LDI R17,0
01D8 DE89 RCALL _delay_nms
(0061) Scan_Int_Key(); //查詢是否有按鍵按下
01D9 DFAE RCALL _Scan_Int_Key
(0062) if(Key_Number!=0)
01DA 90200062 LDS R2,Key_Number
01DC 2022 TST R2
01DD F009 BEQ 0x01DF
(0063) break; //如果鍵值改變退出
01DE C003 RJMP 0x01E2
01DF 9563 INC R22
01E0 3068 CPI R22,0x8
01E1 F348 BCS 0x01CB
(0064) }
(0065) if(Key_Number!=0)
01E2 90200062 LDS R2,Key_Number
01E4 2022 TST R2
01E5 F009 BEQ 0x01E7
(0066) break;
01E6 C063 RJMP 0x024A
(0067) for(i=9;i>1;i--)
01E7 E069 LDI R22,0x9
01E8 C016 RJMP 0x01FF
(0068) {
(0069) LED=0xff; //LED全部熄滅
01E9 EF8F LDI R24,0xFF
01EA BB88 OUT 0x18,R24
(0070) LED&=~BIT(i-2); //點亮相應位LED
01EB 2F16 MOV R17,R22
01EC 5012 SUBI R17,2
01ED E001 LDI R16,1
01EE 940E026E CALL lsl8
01F0 2E20 MOV R2,R16
01F1 9420 COM R2
01F2 B238 IN R3,0x18
01F3 2032 AND R3,R2
01F4 BA38 OUT 0x18,R3
(0071) delay_nms(100); //延時大約100毫秒
01F5 E604 LDI R16,0x64
01F6 E010 LDI R17,0
01F7 DE6A RCALL _delay_nms
(0072) Scan_Int_Key(); //查詢是否有按鍵按下
01F8 DF8F RCALL _Scan_Int_Key
(0073) if(Key_Number!=0)
01F9 90200062 LDS R2,Key_Number
01FB 2022 TST R2
01FC F009 BEQ 0x01FE
(0074) break; //如果鍵值改變退出
01FD C004 RJMP 0x0202
01FE 956A DEC R22
01FF E081 LDI R24,1
0200 1786 CP R24,R22
0201 F338 BCS 0x01E9
(0075) }
(0076) if(Key_Number!=0)
0202 90200062 LDS R2,Key_Number
0204 2022 TST R2
0205 F009 BEQ 0x0207
(0077) break;
0206 C043 RJMP 0x024A
0207 CFC1 RJMP 0x01C9
(0078) }
(0079) break;
0208 C041 RJMP 0x024A
(0080) case 1:
(0081) while(1)
(0082) {
(0083) for(i=0;i<8;i++)
0209 2766 CLR R22
020A C015 RJMP 0x0220
(0084) {
(0085) LED=0xff; //LED全部熄滅
020B EF8F LDI R24,0xFF
020C BB88 OUT 0x18,R24
(0086) LED&=~BIT(i); //點亮相應位LED
020D E001 LDI R16,1
020E 2F16 MOV R17,R22
020F 940E026E CALL lsl8
0211 2E20 MOV R2,R16
0212 9420 COM R2
0213 B238 IN R3,0x18
0214 2032 AND R3,R2
0215 BA38 OUT 0x18,R3
(0087) delay_nms(50); //延時大約50毫秒
0216 E302 LDI R16,0x32
0217 E010 LDI R17,0
0218 DE49 RCALL _delay_nms
(0088) Scan_Int_Key(); //查詢是否有按鍵按下
0219 DF6E RCALL _Scan_Int_Key
(0089) if(Key_Number!=1)
021A 91800062 LDS R24,Key_Number
021C 3081 CPI R24,1
021D F009 BEQ 0x021F
(0090) break; //如果鍵值改變退出
021E C003 RJMP 0x0222
021F 9563 INC R22
0220 3068 CPI R22,0x8
0221 F348 BCS 0x020B
(0091) }
(0092) if(Key_Number!=1)
0222 91800062 LDS R24,Key_Number
0224 3081 CPI R24,1
0225 F009 BEQ 0x0227
(0093) break;
0226 C023 RJMP 0x024A
0227 CFE1 RJMP 0x0209
(0094) }
(0095) break;
0228 C021 RJMP 0x024A
(0096) case 2:
(0097) while(1)
(0098) {
(0099) for(i=9;i>1;i--)
0229 E069 LDI R22,0x9
022A C016 RJMP 0x0241
(0100) {
(0101) LED=0xff; //LED全部熄滅
022B EF8F LDI R24,0xFF
022C BB88 OUT 0x18,R24
(0102) LED&=~BIT(i-2); //點亮相應位LED
022D 2F16 MOV R17,R22
022E 5012 SUBI R17,2
022F E001 LDI R16,1
0230 940E026E CALL lsl8
0232 2E20 MOV R2,R16
0233 9420 COM R2
0234 B238 IN R3,0x18
0235 2032 AND R3,R2
0236 BA38 OUT 0x18,R3
(0103) delay_nms(50); //延時大約50毫秒
0237 E302 LDI R16,0x32
0238 E010 LDI R17,0
0239 DE28 RCALL _delay_nms
(0104) Scan_Int_Key(); //查詢是否有按鍵按下
023A DF4D RCALL _Scan_Int_Key
(0105) if(Key_Number!=2)
023B 91800062 LDS R24,Key_Number
023D 3082 CPI R24,2
023E F009 BEQ 0x0240
(0106) break; //如果鍵值改變退出
023F C004 RJMP 0x0244
0240 956A DEC R22
0241 E081 LDI R24,1
0242 1786 CP R24,R22
0243 F338 BCS 0x022B
(0107) }
(0108) if(Key_Number!=2)
0244 91800062 LDS R24,Key_Number
0246 3082 CPI R24,2
0247 F009 BEQ 0x0249
(0109) break;
FILE: <library>
0248 C001 RJMP 0x024A
0249 CFDF RJMP 0x0229
024A CF6C RJMP 0x01B7
024B 9508 RET
pop_gset2:
024C E0E2 LDI R30,2
024D 940C025B JMP pop
push_gset5:
024F 92FA ST R15,-Y
0250 92EA ST R14,-Y
push_gset4:
0251 92DA ST R13,-Y
0252 92CA ST R12,-Y
push_gset3:
0253 92BA ST R11,-Y
0254 92AA ST R10,-Y
push_gset2:
0255 937A ST R23,-Y
0256 936A ST R22,-Y
push_gset1:
0257 935A ST R21,-Y
0258 934A ST R20,-Y
0259 9508 RET
pop_gset1:
025A E0E1 LDI R30,1
pop:
025B 9149 LD R20,Y+
025C 9159 LD R21,Y+
025D FDE0 SBRC R30,0
025E 9508 RET
025F 9169 LD R22,Y+
0260 9179 LD R23,Y+
0261 FDE1 SBRC R30,1
0262 9508 RET
0263 90A9 LD R10,Y+
0264 90B9 LD R11,Y+
0265 FDE2 SBRC R30,2
0266 9508 RET
0267 90C9 LD R12,Y+
0268 90D9 LD R13,Y+
0269 FDE3 SBRC R30,3
026A 9508 RET
026B 90E9 LD R14,Y+
026C 90F9 LD R15,Y+
026D 9508 RET
lsl8:
026E 2311 TST R17
026F F019 BEQ 0x0273
0270 0F00 LSL R16
0271 951A DEC R17
0272 CFFB RJMP lsl8
0273 9508 RET
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -