📄 sl3010_4.lst
字号:
(0153) 0x00,0x00
(0154) };
(0155) const unsigned char music_33[]=
(0156) {
(0157) //星语心愿
(0158) 0x36,0x18,0x27,0x26,0x25,0x26,0x43,0x43,0x43,0x26,0x25,0x36,0x18,0x27,0x18,0x17,
(0159) 0x26,0x27,0x48,0x48,0x48,0x28,0x29,0x2a,0x2a,0x2a,0x2a,0x49,0x49,0x28,0x27,0x26,
(0160) 0x27,0x45,0x45,0x46,0x48,0x47,0x26,0x25,0x46,0x46,0x46,0x40,0x40,0x40,0x40,0x40,
(0161) 0x36,0x18,0x27,0x26,0x25,0x26,0x26,0x26,0x46,0x46,0x26,0x25,0x36,0x18,0x27,0x18,
(0162) 0x17,0x26,0x27,0x48,0x48,0x48,0x28,0x29,0x2a,0x2a,0x2a,0x2a,0x49,0x49,0x28,0x27,
(0163) 0x26,0x27,0x45,0x45,0x46,0x26,0x28,0x47,0x45,0x40,0x26,0x28,0x47,0x45,0x46,0x46,
(0164) 0x46,0x46,0x46,0x46,0x46,0x23,0x25,0x46,0x4a,0x39,0x18,0x27,0x28,0x48,0x48,0x48,
(0165) 0x28,0x27,0x36,0x16,0x45,0x47,0x46,0x46,0x46,0x23,0x25,0x46,0x4a,0x39,0x18,0x27,
(0166) 0x28,0x48,0x48,0x28,0x27,0x36,0x16,0x45,0x27,0x26,0x46,0x46,0x46,0x46,0x46,0x46,
(0167) 0x00,0x00
(0168) };
(0169) const unsigned char music_44[]=
(0170) {
(0171) //上海滩
(0172) 0x2a,0x2c,0x4d,0x4d,0x4d,0x2a,0x2c,0x49,0x49,0x49,0x2a,0x2c,
(0173) 0x2d,0x4f,0x2d,0x4c,0x1d,0x18,0x2a,0x49,0x49,0x49,0x29,0x2a,
(0174) 0x4c,0x4c,0x4c,0x29,0x2a,0x29,0x26,0x4d,0x4d,0x4d,0x26,0x28,
(0175) 0x39,0x1a,0x29,0x27,0x26,0x28,0x45,0x45,0x45,0x2a,0x2c,0x4d,
(0176) 0x4d,0x4d,0x2a,0x2c,0x49,0x49,0x49,0x2a,0x2c,0x2d,0x4f,0x2d,
(0177) 0x4c,0x1d,0x18,0x2a,0x49,0x49,0x49,0x29,0x2a,0x4c,0x4c,0x4c,
(0178) 0x29,0x2a,0x29,0x26,0x4d,0x4d,0x4d,0x26,0x28,0x39,0x1a,0x29,
(0179) 0x27,0x26,0x25,0x48,0x48,0x20,0x2f,0x2f,0x2d,0x4f,0x4f,0x20,
(0180) 0x2d,0x2f,0x2d,0x4c,0x4c,0x4c,0x2c,0x2a,0x6d,0x2c,0x48,0x19,
(0181) 0x18,0x28,0x4a,0x4a,0x20,0x2a,0x2a,0x29,0x4a,0x4a,0x20,0x2f,
(0182) 0x2f,0x2e,0x4d,0x4d,0x4d,0x2a,0x2a,0x69,0x2a,0x2f,0x2e,0x2d,
(0183) 0x2a,0x4c,0x4c,0x4c,
(0184) 0x00,0x00
(0185) };
(0186) const unsigned char sound_none[]={0x28,0x27,0x36,0x16,0x45,0x47,0x46,0x46,0x46,0x23,0x25,0x46,0x4a,0x39,0x18,0x27,
(0187) 0x28,0x48,0x48,0x28,0x27,0x36,0x16,0x45,0x27,0x26,0x46,0x46,0x46,0x46,0x46,0x46,0x00,0x00};
(0188) const unsigned char sound_right[]={0x23,0x25,0x46,0x4a,0x39,0x18,0x27,0x28,0x48,0x48,0x48,
(0189) 0x28,0x27,0x36,0x16,0x45,0x47,0x46,0x46,0x46,0x00,0x00};
(0190) const unsigned char sound_back[]={0x2a,0x2c,0x4d,0x4d,0x4d,0x2a,0x2c,0x49,0x49,0x49,0x2a,0x2c,0x2d,0x4f,
(0191) 0x2d,0x4c,0x1d,0x18,0x2a,0x49,0x49,0x49,0x00,0x00};
(0192) const unsigned char sound_stop[]={0x23,0x24,0x25,0x44,0x45,0x24,0x23,0x22,0x42,0x40,0x40,0x23,0x22,0x21,0x41,0x28,
(0193) 0x48,0x23,0x25,0x45,0x40,0x40,0x00,0x00};
(0194) const unsigned char sound_left[]={0x68,0x26,0x25,0x23,0x22,0x13,0x12,0x41,0x41,0x41,0x23,0x25,
(0195) 0x28,0x48,0x28,0x29,0x2a,0x29,0x26,0x45,0x45,0x45,0x00,0x00};
(0196)
(0197) //Watchdog initialisation
(0198) // prescale: 1024K cycles
(0199) void watchdog_init(void)
(0200) {
(0201) WDR(); //this prevents a timout on enabling
_watchdog_init:
02EF 95A8 WDR
(0202) WDTCR = 0x0E; //WATCHDOG ENABLED - dont forget WDR
02F0 E08E LDI R24,0xE
02F1 BD81 OUT 0x21,R24
(0203) }
02F2 9508 RET
(0204)
(0205) //TIMER0 initialisation - prescale:1024
(0206) // desired value: 25mSec
(0207) // actual value: 24.960mSec (0.2%)
(0208) void timer0_init(void)
(0209) {
(0210) TCCR0 = 0x00; //stop timer
_timer0_init:
02F3 2422 CLR R2
02F4 BE23 OUT 0x33,R2
(0211) TCNT0 = 0x3D; //set count value
02F5 E38D LDI R24,0x3D
02F6 BF82 OUT 0x32,R24
(0212) TCCR0 = 0x05; //start timer
02F7 E085 LDI R24,5
02F8 BF83 OUT 0x33,R24
(0213) }
02F9 9508 RET
_timer0_ovf_isr:
02FA D59A RCALL push_lset
02FB D574 RCALL push_gset1
(0214)
(0215) #pragma interrupt_handler timer0_ovf_isr:iv_TIMER0_OVF
(0216) void timer0_ovf_isr(void)
(0217) {
(0218) TCNT0 = 0x3D; //reload counter value
02FC E38D LDI R24,0x3D
02FD BF82 OUT 0x32,R24
(0219) t0_times++;
02FE 91800066 LDS R24,_t0_times
0300 5F8F SUBI R24,0xFF
0301 93800066 STS _t0_times,R24
(0220) remote_in = PINB & 0x0F;
0303 B386 IN R24,0x16
0304 708F ANDI R24,0xF
0305 9380007D STS _remote_in,R24
(0221) switch (remote_in)
0307 2F48 MOV R20,R24
0308 2755 CLR R21
0309 3040 CPI R20,0
030A 0745 CPC R20,R21
030B F089 BEQ 0x031D
030C 3041 CPI R20,1
030D E0E0 LDI R30,0
030E 075E CPC R21,R30
030F F161 BEQ 0x033C
0310 3042 CPI R20,2
0311 E0E0 LDI R30,0
0312 075E CPC R21,R30
0313 F0B9 BEQ 0x032B
0314 3044 CPI R20,4
0315 E0E0 LDI R30,0
0316 075E CPC R21,R30
0317 F061 BEQ 0x0324
0318 3048 CPI R20,0x8
0319 E0E0 LDI R30,0
031A 075E CPC R21,R30
031B F0B1 BEQ 0x0332
031C C025 RJMP 0x0342
(0222) {//检测遥控器是否有键按下
(0223) case 0x00: // none
(0224) rst_time=0;
031D 2422 CLR R2
031E 2433 CLR R3
031F 92300075 STS _rst_time+1,R3
0321 92200074 STS _rst_time,R2
(0225) break;
0323 C01E RJMP 0x0342
(0226) case 0x04: // < A >
(0227) rst_time=0;
0324 2422 CLR R2
0325 2433 CLR R3
0326 92300075 STS _rst_time+1,R3
0328 92200074 STS _rst_time,R2
(0228) break;
032A C017 RJMP 0x0342
(0229) case 0x02: // < B >
(0230) rst_time=0;
032B 2422 CLR R2
032C 2433 CLR R3
032D 92300075 STS _rst_time+1,R3
032F 92200074 STS _rst_time,R2
(0231) break;
0331 C010 RJMP 0x0342
(0232) case 0x08: // < C >
(0233) rst_time++;
0332 91800074 LDS R24,_rst_time
0334 91900075 LDS R25,_rst_time+1
0336 9601 ADIW R24,1
0337 93900075 STS _rst_time+1,R25
0339 93800074 STS _rst_time,R24
(0234) break;
033B C006 RJMP 0x0342
(0235) case 0x01: // < D >
(0236) rst_time=0;
033C 2422 CLR R2
033D 2433 CLR R3
033E 92300075 STS _rst_time+1,R3
0340 92200074 STS _rst_time,R2
(0237) break;
(0238) }
(0239) if(rst_time > 400) // 400*25ms=10s,+1s 看门狗复位
0342 E980 LDI R24,0x90
0343 E091 LDI R25,1
0344 90200074 LDS R2,_rst_time
0346 90300075 LDS R3,_rst_time+1
0348 1582 CP R24,R2
0349 0593 CPC R25,R3
034A F420 BCC 0x034F
(0240) {
(0241) PORTA = 0xff;
034B EF8F LDI R24,0xFF
034C BB8B OUT 0x1B,R24
(0242) watchdog_init();
034D DFA1 RCALL _watchdog_init
(0243) while(1);
034E CFFF RJMP 0x034E
(0244) }
(0245) if(gzsl == 0x88)
034F 91800067 LDS R24,_gzsl
0351 3888 CPI R24,0x88
0352 F509 BNE 0x0374
(0246) {
(0247) if(t0_times == 10)
0353 91800066 LDS R24,_t0_times
0355 308A CPI R24,0xA
0356 F4E9 BNE 0x0374
(0248) {
(0249) timers++;
0357 9180006D LDS R24,_timers
0359 5F8F SUBI R24,0xFF
035A 9380006D STS _timers,R24
(0250) t0_times = 0;
035C 2422 CLR R2
035D 92200066 STS _t0_times,R2
(0251) pa = led_data[timers];
035F E388 LDI R24,0x38
0360 E090 LDI R25,0
0361 9020006D LDS R2,_timers
0363 2433 CLR R3
0364 0E28 ADD R2,R24
0365 1E39 ADC R3,R25
0366 2DE2 MOV R30,R2
0367 2DF3 MOV R31,R3
0368 95C8 LPM
0369 92000071 STS _pa,R0
(0252) if(pa==0x0a){timers=0;}
036B 2D80 MOV R24,R0
036C 308A CPI R24,0xA
036D F419 BNE 0x0371
036E 2422 CLR R2
036F 9220006D STS _timers,R2
(0253) PORTA = pa;
0371 90200071 LDS R2,_pa
0373 BA2B OUT 0x1B,R2
(0254) }
(0255) }
(0256) if(gzsl == 0x33)
0374 91800067 LDS R24,_gzsl
0376 3383 CPI R24,0x33
0377 F009 BEQ 0x0379
0378 C07A RJMP 0x03F3
(0257) {
(0258) sw_touch();
0379 DE96 RCALL _sw_touch
(0259) if(t0_times == 8) //8*25ms=200ms
037A 91800066 LDS R24,_t0_times
037C 3088 CPI R24,0x8
037D F009 BEQ 0x037F
037E C074 RJMP 0x03F3
(0260) {
(0261) t0_times = 0;
037F 2422 CLR R2
0380 92200066 STS _t0_times,R2
(0262) remote_in = PINB & 0x0F;
0382 B386 IN R24,0x16
0383 708F ANDI R24,0xF
0384 9380007D STS _remote_in,R24
(0263) sound_1 = remote_in;
0386 2E28 MOV R2,R24
0387 92200065 STS _sound_1,R2
(0264) if(sound_2 != sound_1)
0389 90300064 LDS R3,_sound_2
038B 1638 CP R3,R24
038C F049 BEQ 0x0396
(0265) {sound_add=0;sound_2 = sound_1;}
038D 2422 CLR R2
038E 2433 CLR R3
038F 92300061 STS 0x61,R3
0391 92200060 STS 0x60,R2
0393 2E28 MOV R2,R24
0394 92200064 STS _sound_2,R2
(0266) switch (remote_in)
0396 9140007D LDS R20,_remote_in
0398 2755 CLR R21
0399 3040 CPI R20,0
039A 0745 CPC R20,R21
039B F091 BEQ 0x03AE
039C 3041 CPI R20,1
039D E0E0 LDI R30,0
039E 075E CPC R21,R30
039F F409 BNE 0x03A1
03A0 C044 RJMP 0x03E5
03A1 3042 CPI R20,2
03A2 E0E0 LDI R30,0
03A3 075E CPC R21,R30
03A4 F111 BEQ 0x03C7
03A5 3044 CPI R20,4
03A6 E0E0 LDI R30,0
03A7 075E CPC R21,R30
03A8 F079 BEQ 0x03B8
03A9 3048 CPI R20,0x8
03AA E0E0 LDI R30,0
03AB 075E CPC R21,R30
03AC F149 BEQ 0x03D6
03AD C045 RJMP 0x03F3
(0267) {//检测遥控器是否有键按下
(0268) case 0x00:
(0269) forward(); //前行
03AE DE58 RCALL _forward
(0270) sound_add=0x00;
03AF 2422 CLR R2
03B0 2433 CLR R3
03B1 92300061 STS 0x61,R3
03B3 92200060 STS 0x60,R2
(0271) temp1=0x00;
03B5 92200072 STS _temp1,R2
(0272) break;
03B7 C03B RJMP 0x03F3
(0273) case 0x04: // < A >
(0274) turn_right(); //右转
03B8 DE35 RCALL _turn_right
(0275) temp1=sound_right[sound_add];
03B9 EE8E LDI R24,0xEE
03BA E092 LDI R25,2
03BB 90200060 LDS R2,0x60
03BD 90300061 LDS R3,0x61
03BF 0E28 ADD R2,R24
03C0 1E39 ADC R3,R25
03C1 2DE2 MOV R30,R2
03C2 2DF3 MOV R31,R3
03C3 95C8 LPM
03C4 92000072 STS _temp1,R0
(0276) break;
03C6 C02C RJMP 0x03F3
(0277) case 0x02: // < B >
(0278) backward(); //后退
03C7 DE3A RCALL _backward
(0279) temp1=sound_back[sound_add];
03C8 E084 LDI R24,4
03C9 E093 LDI R25,3
03CA 90200060 LDS R2,0x60
03CC 90300061 LDS R3,0x61
03CE 0E28 ADD R2,R24
03CF 1E39 ADC R3,R25
03D0 2DE2 MOV R30,R2
03D1 2DF3 MOV R31,R3
03D2 95C8 LPM
03D3 92000072 STS _temp1,R0
(0280) break;
03D5 C01D RJMP 0x03F3
(0281) case 0x08: // < C >
(0282) stop(); //停止运动
03D6 DE35 RCALL _stop
(0283) temp1=sound_stop[sound_add];
03D7 E18C LDI R24,0x1C
03D8 E093 LDI R25,3
03D9 90200060 LDS R2,0x60
03DB 90300061 LDS R3,0x61
03DD 0E28 ADD R2,R24
03DE 1E39 ADC R3,R25
03DF 2DE2 MOV R30,R2
03E0 2DF3 MOV R31,R3
03E1 95C8 LPM
03E2 92000072 STS _temp1,R0
(0284) break;
03E4 C00E RJMP 0x03F3
(0285) case 0x01: // < D >
(0286) turn_left(); //左转
03E5 DE0D RCALL _turn_left
(0287) temp1=sound_left[sound_add];
03E6 E384 LDI R24,0x34
03E7 E093 LDI R25,3
03E8 90200060 LDS R2,0x60
03EA 90300061 LDS R3,0x61
03EC 0E28 ADD R2,R24
03ED 1E39 ADC R3,R25
03EE 2DE2 MOV R30,R2
03EF 2DF3 MOV R31,R3
03F0 95C8 LPM
03F1 92000072 STS _temp1,R0
(0288) break;
(0289) }
(0290) }
(0291) }
(0292) if(gzsl == 0x11)
03F3 91800067 LDS R24,_gzsl
03F5 3181 CPI R24,0x11
03F6 F489 BNE 0x0408
(0293) {
(0294) if(t0_times == delay_time1) //delay_time1*25ms
03F7 9020007A LDS R2,_delay_time1
03F9 9030007B LDS R3,_delay_time1+1
03FB 90400066 LDS R4,_t0_times
03FD 2455 CLR R5
03FE 1442 CP R4,R2
03FF 0453 CPC R5,R3
0400 F439 BNE 0x0408
(0295) {
(0296) t0_times = 0;
0401 2422 CLR R2
0402 92200066 STS _t0_times,R2
(0297) gzsl = 0x22;
0404 E282 LDI R24,0x22
0405 93800067 STS _gzsl,R24
(0298) forward();
0407 DDFF RCALL _forward
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -