📄 main.lis
字号:
01D0 L34:
01D0 .dbline -2
01D0 L30:
01D0 .dbline 0 ; func end
01D0 0895 ret
01D2 .dbsym r tmp_PD 16 c
01D2 .dbend
01D2 .dbfunc e delay30ms _delay30ms fV
01D2 ; tmp_delay_cn -> R16,R17
.even
01D2 _delay30ms::
01D2 .dbline -1
01D2 .dbline 192
01D2 ; }
01D2 ; }
01D2 ;
01D2 ;
01D2 ; void delay30ms(void) //延时30毫秒的子程序
01D2 ; {
01D2 .dbline 194
01D2 ; unsigned int tmp_delay_cn;
01D2 ; for (tmp_delay_cn=0;tmp_delay_cn<300;tmp_delay_cn++)
01D2 0027 clr R16
01D4 1127 clr R17
01D6 02C0 xjmp L46
01D8 L43:
01D8 .dbline 195
01D8 L44:
01D8 .dbline 194
01D8 0F5F subi R16,255 ; offset = 1
01DA 1F4F sbci R17,255
01DC L46:
01DC .dbline 194
01DC 0C32 cpi R16,44
01DE E1E0 ldi R30,1
01E0 1E07 cpc R17,R30
01E2 D0F3 brlo L43
01E4 .dbline -2
01E4 L42:
01E4 .dbline 0 ; func end
01E4 0895 ret
01E6 .dbsym r tmp_delay_cn 16 i
01E6 .dbend
01E6 .dbfunc e check_key_pressed _check_key_pressed fc
01E6 ; key_tem -> R16
.even
01E6 _check_key_pressed::
01E6 .dbline -1
01E6 .dbline 200
01E6 ; ;
01E6 ; }
01E6 ;
01E6 ;
01E6 ; unsigned char check_key_pressed(void) //检查是否有键盘按下
01E6 ; {
01E6 .dbline 202
01E6 ; unsigned char key_tem;
01E6 ; key_tem=PINA &= ~(0XC3);
01E6 89B3 in R24,0x19
01E8 8C73 andi R24,60
01EA 89BB out 0x19,R24
01EC 082F mov R16,R24
01EE .dbline 203
01EE ; if(key_tem!=0X3C)
01EE 8C33 cpi R24,60
01F0 11F0 breq L48
01F2 .dbline 204
01F2 ; return 1;
01F2 01E0 ldi R16,1
01F4 01C0 xjmp L47
01F6 L48:
01F6 .dbline 206
01F6 ; else
01F6 ; return 0;
01F6 0027 clr R16
01F8 .dbline -2
01F8 L47:
01F8 .dbline 0 ; func end
01F8 0895 ret
01FA .dbsym r key_tem 16 c
01FA .dbend
01FA .dbfunc e find_key_code _find_key_code fc
01FA ; uuu -> R20
.even
01FA _find_key_code::
01FA 0E940000 xcall push_gset1
01FE .dbline -1
01FE .dbline 211
01FE ; }
01FE ;
01FE ;
01FE ; unsigned char find_key_code(void)
01FE ; {
01FE .dbline 213
01FE ; unsigned char uuu;
01FE ; if(check_key_pressed()==1)
01FE F3DF xcall _check_key_pressed
0200 0130 cpi R16,1
0202 41F4 brne L51
0204 .dbline 214
0204 ; {
0204 .dbline 215
0204 ; delay30ms(); //延时去抖动
0204 E6DF xcall _delay30ms
0206 .dbline 216
0206 ; if(check_key_pressed()==1)
0206 EFDF xcall _check_key_pressed
0208 0130 cpi R16,1
020A 21F4 brne L53
020C .dbline 217
020C ; {
020C .dbline 218
020C ; uuu=(PINA & 0X3C);
020C 49B3 in R20,0x19
020E 4C73 andi R20,60
0210 .dbline 219
0210 ; return uuu; //屏蔽最高和最低两位
0210 042F mov R16,R20
0212 01C0 xjmp L50
0214 L53:
0214 .dbline 221
0214 ; }
0214 ; }
0214 L51:
0214 .dbline 222
0214 ; return 0XC3;
0214 03EC ldi R16,195
0216 .dbline -2
0216 L50:
0216 0E940000 xcall pop_gset1
021A .dbline 0 ; func end
021A 0895 ret
021C .dbsym r uuu 20 c
021C .dbend
.area vector(rom, abs)
.org 36
0024 0C940E01 jmp _timer0_ovf_isr
.area text(rom, con, rel)
021C .dbfile E:\work\百步梯攀登计划\AVR程序\new\main.c
021C .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
.even
021C _timer0_ovf_isr::
021C 0E940000 xcall push_lset
0220 0E940000 xcall push_gset1
0224 .dbline -1
0224 .dbline 227
0224 ; }
0224 ;
0224 ; #pragma interrupt_handler timer0_ovf_isr:10 //
0224 ; void timer0_ovf_isr(void)
0224 ; {
0224 .dbline 228
0224 ; TCNT0 = 0xB2; //计数器初始值重载
0224 82EB ldi R24,178
0226 82BF out 0x32,R24
0228 .dbline 229
0228 ; if (tmp_cn_0==100) //固定时间产生变化
0228 80910200 lds R24,_tmp_cn_0
022C 8436 cpi R24,100
022E 09F0 breq X2
0230 3EC0 xjmp L56
0232 X2:
0232 .dbline 230
0232 ; {
0232 .dbline 231
0232 ; switch (key_code) //根据按下的键盘产生一定的闪灯花样
0232 40910000 lds R20,_key_code
0236 5527 clr R21
0238 4C32 cpi R20,44
023A E0E0 ldi R30,0
023C 5E07 cpc R21,R30
023E C9F0 breq L62
0240 8CE2 ldi R24,44
0242 90E0 ldi R25,0
0244 8417 cp R24,R20
0246 9507 cpc R25,R21
0248 2CF0 brlt L66
024A L65:
024A 4C31 cpi R20,28
024C E0E0 ldi R30,0
024E 5E07 cpc R21,R30
0250 71F0 breq L61
0252 15C0 xjmp L58
0254 L66:
0254 4433 cpi R20,52
0256 E0E0 ldi R30,0
0258 5E07 cpc R21,R30
025A 69F0 breq L63
025C 4433 cpi R20,52
025E E0E0 ldi R30,0
0260 5E07 cpc R21,R30
0262 6CF0 brlt L58
0264 L67:
0264 4833 cpi R20,56
0266 E0E0 ldi R30,0
0268 5E07 cpc R21,R30
026A 39F0 breq L64
026C 08C0 xjmp L58
026E X1:
026E .dbline 232
026E ; {
026E L61:
026E .dbline 233
026E ; case 0X1C: flash_led_type4(); break;
026E 73DF xcall _flash_led_type4
0270 .dbline 233
0270 07C0 xjmp L59
0272 L62:
0272 .dbline 234
0272 ; case 0X2c: flash_led_type3(); break;
0272 69DF xcall _flash_led_type3
0274 .dbline 234
0274 05C0 xjmp L59
0276 L63:
0276 .dbline 235
0276 ; case 0X34: flash_led_type2(); break;
0276 56DF xcall _flash_led_type2
0278 .dbline 235
0278 03C0 xjmp L59
027A L64:
027A .dbline 236
027A ; case 0X38: flash_led_type1(); break;
027A 43DF xcall _flash_led_type1
027C .dbline 236
027C 01C0 xjmp L59
027E L58:
027E .dbline 237
027E ; default: flash_led_type4(); break;
027E 6BDF xcall _flash_led_type4
0280 .dbline 237
0280 L59:
0280 .dbline 240
0280 ; }
0280 ;
0280 ; disp_led(LED_INDEX[tmp_led_index]); //循环显示8段数字LED
0280 80E0 ldi R24,<_LED_INDEX
0282 90E0 ldi R25,>_LED_INDEX
0284 E0910100 lds R30,_tmp_led_index
0288 FF27 clr R31
028A E80F add R30,R24
028C F91F adc R31,R25
028E 0491 lpm R16,Z
0290 04DF xcall _disp_led
0292 .dbline 241
0292 ; tmp_led_index++;
0292 80910100 lds R24,_tmp_led_index
0296 8F5F subi R24,255 ; addi 1
0298 80930100 sts _tmp_led_index,R24
029C .dbline 242
029C ; if (tmp_led_index==10) tmp_led_index=0; //LED计数器归零
029C 8A30 cpi R24,10
029E 19F4 brne L68
02A0 .dbline 242
02A0 2224 clr R2
02A2 20920100 sts _tmp_led_index,R2
02A6 L68:
02A6 .dbline 244
02A6 ;
02A6 ; tmp_cn_0=0; //临时计数器0归零
02A6 2224 clr R2
02A8 20920200 sts _tmp_cn_0,R2
02AC .dbline 245
02AC ; }
02AC 05C0 xjmp L57
02AE L56:
02AE .dbline 247
02AE .dbline 248
02AE 80910200 lds R24,_tmp_cn_0
02B2 8F5F subi R24,255 ; addi 1
02B4 80930200 sts _tmp_cn_0,R24
02B8 .dbline 249
02B8 L57:
02B8 .dbline -2
02B8 L55:
02B8 0E940000 xcall pop_gset1
02BC 0E940000 xcall pop_lset
02C0 .dbline 0 ; func end
02C0 1895 reti
02C2 .dbend
02C2 .dbfunc e main _main fV
02C2 ; tmp_key_code -> R20
.even
02C2 _main::
02C2 .dbline -1
02C2 .dbline 256
02C2 ; else
02C2 ; {
02C2 ; tmp_cn_0=tmp_cn_0+1; //临时计数器递增
02C2 ; }
02C2 ; }
02C2 ;
02C2 ;
02C2 ; //****************** MAIN 程序的入口*************************//
02C2 ;
02C2 ; void main()
02C2 ; {
02C2 .dbline 258
02C2 ; unsigned char tmp_key_code;
02C2 ; init_devices();
02C2 0FDF xcall _init_devices
02C4 08C0 xjmp L72
02C6 L71:
02C6 .dbline 260
02C6 ; while(1)
02C6 ; {
02C6 .dbline 261
02C6 ; start_adc_0(); //循环进行ADC转换
02C6 DCDE xcall _start_adc_0
02C8 .dbline 263
02C8 ;
02C8 ; tmp_key_code=find_key_code() & 0X3C; //判断是否按下键盘
02C8 98DF xcall _find_key_code
02CA 402F mov R20,R16
02CC 4C73 andi R20,60
02CE .dbline 265
02CE ;
02CE ; if (tmp_key_code!=0x3c) key_code=tmp_key_code;
02CE 4C33 cpi R20,60
02D0 11F0 breq L74
02D2 .dbline 265
02D2 40930000 sts _key_code,R20
02D6 L74:
02D6 .dbline 268
02D6 L72:
02D6 .dbline 259
02D6 F7CF xjmp L71
02D8 X3:
02D8 .dbline -2
02D8 L70:
02D8 .dbline 0 ; func end
02D8 0895 ret
02DA .dbsym r tmp_key_code 20 c
02DA .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\work\百步梯攀登计划\AVR程序\new\main.c
0000 _key_code::
0000 .blkb 1
0001 .dbsym e key_code _key_code c
0001 _tmp_cn_1::
0001 .blkb 1
0002 .dbsym e tmp_cn_1 _tmp_cn_1 c
0002 _tmp_cn_0::
0002 .blkb 1
0003 .dbsym e tmp_cn_0 _tmp_cn_0 c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -