📄 bi2.lst
字号:
018F E20D LDI R16,0x2D
0190 E011 LDI R17,1
0191 DF85 RCALL _change_1302
0192 9300008E STS 0x8E,R16
(0190) sCURDATE[6]=change_1302(&temp_1302[6]);
0194 E20E LDI R16,0x2E
0195 E011 LDI R17,1
0196 DF80 RCALL _change_1302
0197 9300008F STS 0x8F,R16
(0191) time[0][0]=sCURDATE[0];
0199 90200089 LDS R2,sCURDATE
019B 92200062 STS time,R2
(0192) time[0][1]=sCURDATE[1];
019D 9020008A LDS R2,sCURDATE+1
019F 92200063 STS time+1,R2
(0193) time[0][2]=sCURDATE[2];
01A1 9020008B LDS R2,sCURDATE+2
01A3 92200064 STS time+2,R2
01A5 940E0721 CALL pop_gset4
01A7 9508 RET
(0194) }
(0195)
(0196)
(0197)
(0198)
(0199)
(0200)
(0201) /* 音阶常数=65536-8000000/8/2/f */
(0202) #define DO 64580 //523
(0203) #define RE 64684 //587
(0204) #define MI 64777 //659
(0205) #define FA 64820 //698
(0206) #define SO 64898 //784
(0207) #define LA 64968 //880
(0208) #define TI 65030 //988
(0209) #define DO_H 65058 //1046
(0210) #define RE_H 65110 //1174
(0211) #define MI_H 65157 //1318
(0212) #define FA_H 65178 //1397
(0213) #define SO_H 65217 //1568
(0214) #define LA_H 65252 //1760
(0215) #define TI_H 65283 //1976
(0216) #define DO_HH 65297 //2093
(0217)
(0218) /* 音乐数据 */
(0219) /* 四分之一拍为0x10, 二分之一拍为0x20, 一拍为0x40*/
(0220) /* 低1-1 2-2 3-3 4-4 5-5 6-6 7-7 */
(0221) /* 中1-8 2-9 3-A 4-B 5-C 6-D 7-E */
(0222) /* 高1-F*/
(0223) const unsigned char sound[]=
(0224) { //乐曲数据表
(0225)
(0226)
(0227) 0x2a,0x2a,0x4a,0x2a,0x2a,0x4a,0x2a,0x2c,0x28,0x29,
(0228) 0x4a,0x4a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,
(0229) 0x2a,0x29,0x29,0x28,0x49,0x4c,0x2a,0x2a,0x4a,0x2a,
(0230) 0x2a,0x4a,0x2a,0x2c,0x28,0x29,0x4a,0x4a,0x2b,0x2b,
(0231) 0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2c,0x2c,0x2b,0x29,
(0232) 0x48,0x48,0x00,0x00
(0233) /*
(0234) 0x4a,0x2a,0x29,0x28,0x29,0x28,0x27,0x46,0x46,0x46,
(0235) 0x46,0x4b,0x2b,0x2a,0x29,0x28,0x29,0x2b,0x4a,0x4a,
(0236) 0x4a,0x4b,0x2b,0x2a,0x49,0x29,0x2b,0x4a,0x2a,0x28,
(0237) 0x46,0x48,0x47,0x4a,0x29,0x28,0x27,0x28,0x46,0x46,
(0238) 0x46,0x46,0x4a,0x2a,0x29,0x28,0x29,0x28,0x27,0x46,
(0239) 0x46,0x46,0x46,0x4b,0x2b,0x2a,0x29,0x28,0x29,0x2b,
(0240) 0x4a,0x4a,0x4a,0x4b,0x2b,0x2a,0x49,0x29,0x2b,0x4a,
(0241) 0x2a,0x28,0x46,0x48,0x47,0x4a,0x29,0x28,0x27,0x28,
(0242) 0x46,0x46,0x46,0x46,
(0243)
(0244) 0x43,0x43,0x45,0x49,0x49,0x49,0x48,0x48,0x45,0x44,
(0245) 0x44,0x44,0x43,0x43,0x43,0x43,0x44,0x45,0x46,0x46,
(0246) 0x46,0x45,0x45,0x45,0x43,0x43,0x45,0x49,0x49,0x49,
(0247) 0x48,0x48,0x45,0x44,0x44,0x44,0x43,0x43,0x45,0x45,
(0248) 0x46,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,
(0249) 0x45,0x47,0x46,0x45,0x43,0x43,0x45,0x48,0x48,0x48,
(0250) 0x46,0x46,0x48,0x49,0x49,0x48,0x47,0x47,0x47,0x45,
(0251) 0x45,0x45,0x43,0x43,0x45,0x49,0x49,0x49,0x48,0x48,
(0252) 0x45,0x44,0x44,0x44,0x43,0x43,0x45,0x45,0x46,0x47,
(0253) 0x48,0x48,0x48,0x48,0x40,0x40,
(0254)
(0255) 0x45,0x48,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x49,0x4a,
(0256) 0x49,0x48,0x48,0x48,0x48,0x48,0x45,0x48,0x4a,0x4a,
(0257) 0x48,0x4a,0x4c,0x4c,0x4b,0x4a,0x49,0x49,0x49,0x49,
(0258) 0x49,0x4c,0x4b,0x4a,0x4a,0x4a,0x49,0x48,0x48,0x49,
(0259) 0x4a,0x4c,0x4b,0x4b,0x4b,0x4b,0x4b,0x46,0x46,0x45,
(0260) 0x45,0x45,0x47,0x48,0x49,0x49,0x4a,0x49,0x48,0x48,
(0261) 0x48,0x48,0x48,0x48,
(0262) 0x23,0x24,0x25,0x44,0x45,0x24,0x23,0x22,0x42,0x40,0x40,0x23,0x22,0x21,0x41,0x28,
(0263) 0x48,0x23,0x25,0x45,0x40,0x40,0x21,0x21,0x42,0x21,0x21,0x41,0x20,0x28,0x47,0x26,
(0264) 0x17,0x16,0x15,0x45,0x40,0x31,0x11,0x21,0x21,0x21,0x22,0x42,0x40,0x20,0x23,0x23,
(0265) 0x24,0x25,0x24,0x23,0x24,0x25,0x26,0x23,0x23,0x42,0x42,0x40,0x23,0x22,0x21,0x41,
(0266) 0x28,0x28,0x28,0x23,0x25,0x45,0x45,0x40,0x20,0x25,0x46,0x28,0x28,0x48,0x20,0x29,
(0267) 0x47,0x26,0x17,0x16,0x15,0x45,0x25,0x25,0x26,0x28,0x18,0x16,0x26,0x28,0x26,0x28,
(0268) 0x19,0x19,0x49,0x49,0x20,0x25,0x2a,0x18,0x19,0x29,0x28,0x16,0x17,0x16,0x15,0x25,
(0269) 0x25,0x28,0x29,0x2a,0x29,0x48,0x28,0x48,0x2c,0x4c,0x4c,0x40,0x2a,0x2c,0x1c,0x1a,
(0270) 0x2a,0x2a,0x29,0x4a,0x2b,0x2a,0x4a,0x4a,0x40,0x2a,0x29,0x29,0x28,0x28,0x26,0x48,
(0271) 0x29,0x26,0x45,0x45,0x40,0x25,0x25,0x26,0x21,0x18,0x16,0x26,0x28,0x26,0x28,0x29,
(0272) 0x49,0x49,0x20,0x25,0x28,0x29,0x2a,0x29,0x49,0x28,0x48,0x2c,0x4c,0x4c,0x40,0x2a,
(0273) 0x2c,0x15,0x1a,0x2a,0x2a,0x29,0x4a,0x2b,0x2a,0x4a,0x4a,0x40,0x2a,0x29,0x29,0x28,
(0274) 0x28,0x26,0x28,0x28,0x29,0x26,0x45,0x45,0x40,0x25,0x25,0x26,0x28,0x28,0x26,0x2a,
(0275) 0x19,0x18,0x28,0x18,0x19,0x48,0x48,0x40,0x40,0x40,0x40,0x28,0x48,0x29,0x28,0x28,
(0276) 0x2a,0x1a,0x1a,0x1a,0x18,0x40,0x20,0x26,0x28,0x28,0x28,0x26,0x28,0x48,0x26,0x25,
(0277) 0x45,0x45,0x40,0x40,0x40,0x28,0x48,0x28,0x28,0x1c,0x1d,0x2d,0x2c,0x28,0x28,0x28,
(0278) 0x20,0x26,0x19,0x1a,0x29,0x19,0x18,0x28,0x28,0x26,0x21,0x29,0x49,0x49,0x40,0x20,
(0279) 0x28,0x29,0x2a,0x4a,0x4a,0x20,0x25,0x28,0x29,0x48,0x48,0x48,0x25,0x25,0x26,0x28,
(0280) 0x28,0x26,0x2a,0x19,0x18,0x28,0x18,0x19,0x49,0x49,0x40,0x40,
(0281)
(0282) 0x25,0x28,0x2A,0x4A,0x29,0x28,0x48,0x28,
(0283) 0x26,0x46,0x28,0x45,0x25,0x28,0x2A,0x4A,
(0284) 0x29,0x28,0x48,0x28,0x29,0x49,0x2A,0x49,
(0285) 0x40,0x2A,0x4A,0x2B,0x4C,0x40,0x3D,0x1D,
(0286) 0x2D,0x2D,0x4C,0x40,0x2A,0x4A,0x2C,0x48,
(0287) 0x28,0x2A,0x29,0x46,0x25,0x48,0x40,
(0288)
(0289) 0x2a,0x2a,0x4a,0x2a,0x2a,0x4a,0x2a,0x2c,0x28,0x29,
(0290) 0x4a,0x4a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,
(0291) 0x2a,0x29,0x29,0x28,0x49,0x4c,0x2a,0x2a,0x4a,0x2a,
(0292) 0x2a,0x4a,0x2a,0x2c,0x28,0x29,0x4a,0x4a,0x2b,0x2b,
(0293) 0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2c,0x2c,0x2b,0x29,
(0294) 0x48,0x48,
(0295)
(0296) 0x4a,0x2a,0x29,0x28,0x29,0x28,0x27,0x46,0x46,0x46,
(0297) 0x46,0x4b,0x2b,0x2a,0x29,0x28,0x29,0x2b,0x4a,0x4a,
(0298) 0x4a,0x4b,0x2b,0x2a,0x49,0x29,0x2b,0x4a,0x2a,0x28,
(0299) 0x46,0x48,0x47,0x4a,0x29,0x28,0x27,0x28,0x46,0x46,
(0300) 0x46,0x46,0x4a,0x2a,0x29,0x28,0x29,0x28,0x27,0x46,
(0301) 0x46,0x46,0x46,0x4b,0x2b,0x2a,0x29,0x28,0x29,0x2b,
(0302) 0x4a,0x4a,0x4a,0x4b,0x2b,0x2a,0x49,0x29,0x2b,0x4a,
(0303) 0x2a,0x28,0x46,0x48,0x47,0x4a,0x29,0x28,0x27,0x28,
(0304) 0x46,0x46,0x46,0x46,
(0305)
(0306) 0x43,0x43,0x45,0x49,0x49,0x49,0x48,0x48,0x45,0x44,
(0307) 0x44,0x44,0x43,0x43,0x43,0x43,0x44,0x45,0x46,0x46,
(0308) 0x46,0x45,0x45,0x45,0x43,0x43,0x45,0x49,0x49,0x49,
(0309) 0x48,0x48,0x45,0x44,0x44,0x44,0x43,0x43,0x45,0x45,
(0310) 0x46,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,
(0311) 0x45,0x47,0x46,0x45,0x43,0x43,0x45,0x48,0x48,0x48,
(0312) 0x46,0x46,0x48,0x49,0x49,0x48,0x47,0x47,0x47,0x45,
(0313) 0x45,0x45,0x43,0x43,0x45,0x49,0x49,0x49,0x48,0x48,
(0314) 0x45,0x44,0x44,0x44,0x43,0x43,0x45,0x45,0x46,0x47,
(0315) 0x48,0x48,0x48,0x48,0x40,0x40,
(0316)
(0317) 0x45,0x48,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x49,0x4a,
(0318) 0x49,0x48,0x48,0x48,0x48,0x48,0x45,0x48,0x4a,0x4a,
(0319) 0x48,0x4a,0x4c,0x4c,0x4b,0x4a,0x49,0x49,0x49,0x49,
(0320) 0x49,0x4c,0x4b,0x4a,0x4a,0x4a,0x49,0x48,0x48,0x49,
(0321) 0x4a,0x4c,0x4b,0x4b,0x4b,0x4b,0x4b,0x46,0x46,0x45,
(0322) 0x45,0x45,0x47,0x48,0x49,0x49,0x4a,0x49,0x48,0x48,
(0323) 0x48,0x48,0x48,0x48,
(0324)
(0325) 0x00,0x00*/
(0326) };
(0327)
(0328) /* 音阶表 */
(0329) const unsigned int TONETABLE[15]={DO,RE,MI,FA,SO,LA,TI,DO_H,
(0330) RE_H,MI_H,FA_H,SO_H,LA_H,TI_H,DO_HH};
(0331) /* 音阶重装常数 */
(0332) unsigned int toneconst;
(0333)
(0334) void delay_us(int time)
(0335) {//微秒级延时程序
(0336) do
(0337) {
(0338) time--;
_delay_us:
time --> R16
01A8 5001 SUBI R16,1
01A9 4010 SBCI R17,0
(0339) }
(0340) while (time>1);
01AA E081 LDI R24,1
01AB E090 LDI R25,0
01AC 1780 CP R24,R16
01AD 0791 CPC R25,R17
01AE F3CC BLT 0x01A8
01AF 9508 RET
_delay_ms:
time --> R20
01B0 940E072F CALL push_gset1
01B2 01A8 MOVW R20,R16
(0341) }
(0342)
(0343) void delay_ms(unsigned int time)
(0344) {//毫秒级延时程序
01B3 C005 RJMP 0x01B9
(0345) while(time!=0)
(0346) {
(0347) delay_us(1000);
01B4 EE08 LDI R16,0xE8
01B5 E013 LDI R17,3
01B6 DFF1 RCALL _delay_us
(0348) time--;
01B7 5041 SUBI R20,1
01B8 4050 SBCI R21,0
01B9 3040 CPI R20,0
01BA 0745 CPC R20,R21
01BB F7C1 BNE 0x01B4
01BC 940E0732 CALL pop_gset1
01BE 9508 RET
_timer1_ovf_isr:
01BF 922A ST R2,-Y
01C0 923A ST R3,-Y
01C1 938A ST R24,-Y
01C2 B62F IN R2,0x3F
01C3 922A ST R2,-Y
(0349) }
(0350) }
(0351)
(0352) #pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVF
(0353) void timer1_ovf_isr(void)
(0354) {
(0355) TCNT1=toneconst;
01C4 90200126 LDS R2,toneconst
01C6 90300127 LDS R3,toneconst+1
01C8 BC3D OUT 0x2D,R3
01C9 BC2C OUT 0x2C,R2
(0356) PORTC^=1;
01CA E081 LDI R24,1
01CB B225 IN R2,0x15
01CC 2628 EOR R2,R24
01CD BA25 OUT 0x15,R2
01CE 9029 LD R2,Y+
01CF BE2F OUT 0x3F,R2
01D0 9189 LD R24,Y+
01D1 9039 LD R3,Y+
01D2 9029 LD R2,Y+
01D3 9518 RETI
_music:
sound_add --> R20
temp1 --> R22
temp --> R10
01D4 940E072B CALL push_gset3
01D6 9722 SBIW R28,2
(0357) }
(0358) void music(void)
(0359) {
(0360) unsigned char temp,temp1;
(0361) unsigned int sound_add=0;
01D7 2744 CLR R20
01D8 2755 CLR R21
(0362) TCCR1A = 0x00;
01D9 2422 CLR R2
01DA BC2F OUT 0x2F,R2
(0363) TCCR1B =(1<<CS11);//8分频
01DB E082 LDI R24,2
01DC BD8E OUT 0x2E,R24
(0364) temp1 = sound[sound_add];
01DD E584 LDI R24,0x54
01DE E090 LDI R25,0
01DF 01FA MOVW R30,R20
01E0 0FE8 ADD R30,R24
01E1 1FF9 ADC R31,R25
01E2 9164 LPM R22,0(Z)
01E3 C038 RJMP 0x021C
(0365) while(temp1!=0)
(0366) {disp_temp(0,0,1);
01E4 E081 LDI R24,1
01E5 E090 LDI R25,0
01E6 8399 STD Y+1,R25
01E7 8388 STD Y+0,R24
01E8 2722 CLR R18
01E9 2733 CLR R19
01EA 2700 CLR R16
01EB 2711 CLR R17
01EC D160 RCALL _disp_temp
(0367) temp=temp1;
01ED 2EA6 MOV R10,R22
(0368) temp&=0x0f;
01EE 2D8A MOV R24,R10
01EF 708F ANDI R24,0xF
01F0 2EA8 MOV R10,R24
(0369)
(0370) if(temp!=0)
01F1 2388 TST R24
01F2 F0A1 BEQ 0x0207
(0371) {
(0372) TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
01F3 B789 IN R24,0x39
01F4 6084 ORI R24,4
01F5 BF89 OUT 0x39,R24
(0373) temp--;
01F6 94AA DEC R10
(0374) toneconst=TONETABLE[temp];
01F7 E082 LDI R24,2
01F8 9D8A MUL R24,R10
01F9 01F0 MOVW R30,R0
01FA E88A LDI R24,0x8A
01FB E090 LDI R25,0
01FC 0FE8 ADD R30,R24
01FD 1FF9 ADC R31,R25
01FE 9005 LPM R0,Z+
01FF 9014 LPM R1,0(Z)
0200 01F0 MOVW R30,R0
0201 93F00127 STS toneconst+1,R31
0203 93E00126 STS toneconst,R30
(0375) TCNT1=toneconst;
0205 BDFD OUT 0x2D,R31
0206 BDEC OUT 0x2C,R30
(0376) }
(0377) temp=temp1;
0207 2EA6 MOV R10,R22
(0378) temp>>=4;
0208 2D8A MOV R24,R10
0209 9582 SWAP R24
020A 708F ANDI R24,0xF
(0379) temp&=0x0f;
020B 708F ANDI R24,0xF
020C 2EA8 MOV R10,R24
(0380) delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
020D E881 LDI R24,0x81
020E 9D8A MUL R24,R10
020F 0180 MOVW R16,R0
0210 DF9F RCALL _delay_ms
(0381) TIMSK&=~(1<<TOIE1);
0211 B789 IN R24,0x39
0212 7F8B ANDI R24,0xFB
0213 BF89 OUT 0x39,R24
(0382) sound_add++;
0214 5F4F SUBI R20,0xFF
0215 4F5F SBCI R21,0xFF
(0383) temp1 = sound[sound_add];
0216 E584 LDI R24,0x54
0217 E090 LDI R25,0
0218 01FA MOVW R30,R20
0219 0FE8 ADD R30,R24
021A 1FF9 ADC R31,R25
021B 9164 LPM R22,0(Z)
021C 2366 TST R22
021D F009 BEQ 0x021F
021E CFC5 RJMP 0x01E4
021F 9622 ADIW R28,2
0220 940E071E CALL pop_gset3
0222 9508 RET
(0384) }
(0385) // delay_ms(1000);
(0386)
(0387) }
(0388) #define delaytime 300
(0389)
(0390) //TIMER2 initialisation - prescale:256
(0391) // desired value: 1Sec
(0392) // actual value: 1.000Sec (0.0%)
(0393) void timer2_init(void)
(0394) {
(0395) TCCR2 = 0x00; //stop
_timer2_init:
0223 2422 CLR R2
0224 BC25 OUT 0x25,R2
(0396) ASSR |= (1<<AS2); //set async mode
0225 B582 IN R24,0x22
0226 6088 ORI R24,0x8
0227 BD82 OUT 0x22,R24
(0397) TCNT2 = 0x80; //setup
0228 E880 LDI R24,0x80
0229 BD84 OUT 0x24,R24
(0398) TCCR2 |= (1<<CS22)|(1<<CS21); //start
022A B585 IN R24,0x25
022B 6086 ORI R24,6
022C BD85 OUT 0x25,R24
022D 9508 RET
_timer2_ovf_isr:
022E 922A ST R2,-Y
022F 938A ST R24,-Y
0230 B62F IN R2,0x3F
0231 922A ST R2,-Y
(0399) }
(0400)
(0401) #pragma interrupt_handler timer2_ovf_isr:iv_TIMER2_OVF
(0402) void timer2_ovf_isr(void)
(0403) {
(0404) TCNT2 = 0x80; //reload counter value
0232 E880 LDI R24,0x80
0233 BD84 OUT 0x24,R24
(0405) PORTB^=1;
0234 E081 LDI R24,1
0235 B228 IN R2,0x18
0236 2628 EOR R2,R24
0237 BA28 OUT 0x18,R2
0238 9029 LD R2,Y+
0239 BE2F OUT 0x3F,R2
023A 9189 LD R24,Y+
023B 9029 LD R2,Y+
023C 9518 RETI
_LCD_write_ch:
k --> Y+1
p --> Y+0
i --> R20
s --> R22
z --> R10
Y --> R14
X --> R12
023D 940E0727 CALL push_gset5
023F 2EE2 MOV R14,R18
0240 2EC0 MOV R12,R16
0241 9726 SBIW R28,6
0242 88A8 LDD R10,Y+16
0243 896A LDD R22,Y+18
0244 897B LDD R23,Y+19
(0406) }
(0407)
(0408)
(0409)
(0410)
(0411)
(0412)
(0413)
(0414)
(0415)
(0416)
(0417)
(0418)
(0419)
(0420)
(0421)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -