📄 music_car.lst
字号:
(0193) delay_ms(touch_time);
01FA EF0A LDI R16,0xFA
01FB E010 LDI R17,0
01FC DFA3 RCALL _delay_ms
(0194) }
(0195) if(sw_in == 0x30)// 0b 0011,0000 右侧开关接触
01FD 9180007E LDS R24,_sw_in
01FF 3380 CPI R24,0x30
0200 F441 BNE 0x0209
(0196) {//后退,左转
(0197) backward(); //后退
0201 DFC0 RCALL _backward
(0198) delay_ms(touch_time);
0202 EF0A LDI R16,0xFA
0203 E010 LDI R17,0
0204 DF9B RCALL _delay_ms
(0199)
(0200) turn_left(); //左转
0205 DFAD RCALL _turn_left
(0201) delay_ms(touch_time);
0206 EF0A LDI R16,0xFA
0207 E010 LDI R17,0
0208 DF97 RCALL _delay_ms
(0202) }
(0203) if(sw_in == 0x60)// 0b 0110,0000 左侧开关接触
0209 9180007E LDS R24,_sw_in
020B 3680 CPI R24,0x60
020C F441 BNE 0x0215
(0204) {//后退,左转
(0205) backward(); //后退
020D DFB4 RCALL _backward
(0206) delay_ms(touch_time);
020E EF0A LDI R16,0xFA
020F E010 LDI R17,0
0210 DF8F RCALL _delay_ms
(0207)
(0208) turn_left(); //左转
0211 DFA1 RCALL _turn_left
(0209) delay_ms(touch_time);
0212 EF0A LDI R16,0xFA
0213 E010 LDI R17,0
0214 DF8B RCALL _delay_ms
(0210) }
(0211) if(sw_in == 0x20)// 0b 0010,0000 两侧开关同时接触,停止运动
0215 9180007E LDS R24,_sw_in
0217 3280 CPI R24,0x20
0218 F4F1 BNE 0x0237
(0212) {
(0213) stop(); //停止运动,熄灭指示灯
0219 DFB2 RCALL _stop
(0214) delay_ms(touch_time*4);
021A EE08 LDI R16,0xE8
021B E013 LDI R17,3
021C DF83 RCALL _delay_ms
021D C018 RJMP 0x0236
(0215) while(1)
(0216) {
(0217) sw_in = PINC & 0x10;
021E B383 IN R24,0x13
021F 7180 ANDI R24,0x10
0220 9380007E STS _sw_in,R24
(0218) if(sw_in == 0x00)
0222 2388 TST R24
0223 F409 BNE 0x0225
(0219) {break;}
0224 C012 RJMP 0x0237
(0220) PORTA = 0x55;
0225 E585 LDI R24,0x55
0226 BB8B OUT 0x1B,R24
(0221) delay_ms(250);
0227 EF0A LDI R16,0xFA
0228 E010 LDI R17,0
0229 DF76 RCALL _delay_ms
(0222) PORTA = 0xAA;
022A EA8A LDI R24,0xAA
022B BB8B OUT 0x1B,R24
(0223) delay_ms(250);
022C EF0A LDI R16,0xFA
022D E010 LDI R17,0
022E DF71 RCALL _delay_ms
(0224) remote_in = PINB & 0x0f;
022F B386 IN R24,0x16
0230 708F ANDI R24,0xF
0231 9380007D STS _remote_in,R24
(0225) if(remote_in != 0x00)
0233 2388 TST R24
0234 F009 BEQ 0x0236
(0226) {break;}
0235 C001 RJMP 0x0237
0236 CFE7 RJMP 0x021E
(0227) }
(0228) }
(0229) }
0237 9508 RET
(0230)
(0231) void mic_startup()
(0232) {//声控启动程序运行
_mic_startup:
0238 C007 RJMP 0x0240
(0233)
(0234) while(1)//等待pc3(声控键)按键按下
(0235) { //无键按下等待
(0236) mic_in = PINC & 0x08; //pc2=0
0239 B383 IN R24,0x13
023A 7088 ANDI R24,0x8
023B 9380007C STS _mic_in,R24
(0237) if(mic_in == 0){break;}
023D 2388 TST R24
023E F409 BNE 0x0240
023F C001 RJMP 0x0241
0240 CFF8 RJMP 0x0239
(0238) }//有键按下运行下面的程序
(0239) }
0241 9508 RET
(0240)
(0241) // #
(0242) // #
(0243) // #
(0244) // #
(0245) // # // delay_time1 转弯时间
(0246) // # # # # # // delay_time2 直行时间
(0247) // # X # //<A> 0x04 delay_time2-50
(0248) // # B C # //<B> 0x02 delay_time1+50
(0249) // # D A # //<C> 0x08 delay_time1-50
(0250) // # # //<D> 0x01 delay_time2+50
(0251) // # # # # // max: 2000 min: 200
(0252)
(0253) void remote_auto_time()
(0254) {
(0255) remote_in = PINB & 0x0F;
_remote_auto_time:
0242 B386 IN R24,0x16
0243 708F ANDI R24,0xF
0244 9380007D STS _remote_in,R24
(0256) switch (remote_in)
0246 2F08 MOV R16,R24
0247 2711 CLR R17
0248 3000 CPI R16,0
0249 0701 CPC R16,R17
024A F409 BNE 0x024C
024B C062 RJMP 0x02AE
024C 3001 CPI R16,1
024D E0E0 LDI R30,0
024E 071E CPC R17,R30
024F F409 BNE 0x0251
0250 C04A RJMP 0x029B
0251 3002 CPI R16,2
0252 E0E0 LDI R30,0
0253 071E CPC R17,R30
0254 F0F1 BEQ 0x0273
0255 3004 CPI R16,4
0256 E0E0 LDI R30,0
0257 071E CPC R17,R30
0258 F029 BEQ 0x025E
0259 3008 CPI R16,0x8
025A E0E0 LDI R30,0
025B 071E CPC R17,R30
025C F151 BEQ 0x0287
025D C050 RJMP 0x02AE
(0257) {//检测遥控器是否有键按下
(0258) case 0x04: // < A >
(0259) delay_time2 = delay_time2 - 50;
025E 91800078 LDS R24,_delay_time2
0260 91900079 LDS R25,_delay_time2+1
0262 97C2 SBIW R24,0x32
0263 93900079 STS _delay_time2+1,R25
0265 93800078 STS _delay_time2,R24
(0260) if(delay_time2 == 50)
0267 3382 CPI R24,0x32
0268 E0E0 LDI R30,0
0269 079E CPC R25,R30
026A F009 BEQ 0x026C
026B C042 RJMP 0x02AE
(0261) {delay_time2 = 100;}
026C E684 LDI R24,0x64
026D E090 LDI R25,0
026E 93900079 STS _delay_time2+1,R25
0270 93800078 STS _delay_time2,R24
(0262) break;
0272 C03B RJMP 0x02AE
(0263) case 0x02: // < B >
(0264) delay_time1 = delay_time1 + 50;
0273 9180007A LDS R24,_delay_time1
0275 9190007B LDS R25,_delay_time1+1
0277 96C2 ADIW R24,0x32
0278 9390007B STS _delay_time1+1,R25
027A 9380007A STS _delay_time1,R24
(0265) if(delay_time1 == 2050)
027C 3082 CPI R24,2
027D E0E8 LDI R30,0x8
027E 079E CPC R25,R30
027F F571 BNE 0x02AE
(0266) {delay_time1 = 2000;}
0280 ED80 LDI R24,0xD0
0281 E097 LDI R25,7
0282 9390007B STS _delay_time1+1,R25
0284 9380007A STS _delay_time1,R24
(0267) break;
0286 C027 RJMP 0x02AE
(0268) case 0x08: // < C >
(0269) delay_time1 = delay_time1 - 50;
0287 9180007A LDS R24,_delay_time1
0289 9190007B LDS R25,_delay_time1+1
028B 97C2 SBIW R24,0x32
028C 9390007B STS _delay_time1+1,R25
028E 9380007A STS _delay_time1,R24
(0270) if(delay_time1 == 50)
0290 3382 CPI R24,0x32
0291 E0E0 LDI R30,0
0292 079E CPC R25,R30
0293 F4D1 BNE 0x02AE
(0271) {delay_time1 = 100;}
0294 E684 LDI R24,0x64
0295 E090 LDI R25,0
0296 9390007B STS _delay_time1+1,R25
0298 9380007A STS _delay_time1,R24
(0272) break;
029A C013 RJMP 0x02AE
(0273) case 0x01: // < D >
(0274) delay_time2 = delay_time2 + 50;
029B 91800078 LDS R24,_delay_time2
029D 91900079 LDS R25,_delay_time2+1
029F 96C2 ADIW R24,0x32
02A0 93900079 STS _delay_time2+1,R25
02A2 93800078 STS _delay_time2,R24
(0275) if(delay_time2 == 2050)
02A4 3082 CPI R24,2
02A5 E0E8 LDI R30,0x8
02A6 079E CPC R25,R30
02A7 F431 BNE 0x02AE
(0276) {delay_time2 = 2000;}
02A8 ED80 LDI R24,0xD0
02A9 E097 LDI R25,7
02AA 93900079 STS _delay_time2+1,R25
02AC 93800078 STS _delay_time2,R24
(0277) break;
(0278) case 0x00: // 无按键
(0279) break;
(0280) }
(0281) }
02AE 9508 RET
FILE: E:\icc\iccavr\sl3010\music_car\music_car.c
(0001) /*******************************************/
(0002) /* 广州天河双龙电子公司 */
(0003) /* http://www.sl.com.cn */
(0004) /* 电子音乐演示程序 */
(0005) /*******************************************/
(0006) // 在 icc avr 所在目录的 <include>文件夹中有 "sl3010.c" 文件
(0007) //使用说明:音乐输出端口:PORTC.0,音乐数据存放
(0008) //于AT90S8515 的EEPROM存贮器中。
(0009) // 可以用并口下载软件写入新的音乐文件
(0010)
(0011) //PA口为音乐灯,当不同的音乐节奏,点亮不同的灯。
(0012) //声控起动音乐机器人程序,未起动时,PA口的8 LED 呈广告灯效果(霓虹灯)
(0013) //声控起动后,机器人开始演奏音乐,同时PA口LED灯根据音乐节拍闪烁
(0014) //按遥控器上不同的键后可改变机器人演奏的乐曲。
(0015) //连续 按住 < C > 键时间超过 10s,音乐声停止,等待声控重新起动演奏
(0016)
(0017) #include <io8515v.h>
(0018) #include <macros.h>
(0019) #include <eeprom.h>
(0020) #include <sl3010.c>
(0021)
(0022) /* 音乐数据 */
(0023) /* 四分之一拍为0x10, 二分之一拍为0x20, 一拍为0x40 */
(0024) /* 低1-1 2-2 3-3 4-4 5-5 6-6 7-7 */
(0025) /* 中1-8 2-9 3-A 4-B 5-C 6-D 7-E */
(0026) /* 高1-F */
(0027) #pragma data:eeprom
(0028) unsigned char sound[]={ //乐曲数据表
(0029) //情非得以
(0030) 0x20,0x1c,0x1d,0x4c,0x4c,0x4c,0x4c,0x20,0x2d,0x19,0x1a,0x19,0x18,0x48,0x48,0x48,
(0031) 0x48,0x47,0x47,0x46,0x46,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,
(0032)
(0033) 0x23,0x24,0x25,0x44,0x45,0x24,0x23,0x22,0x42,0x40,0x40,0x23,0x22,0x21,0x41,0x28,
(0034) 0x48,0x23,0x25,0x45,0x40,0x40,0x21,0x21,0x42,0x21,0x21,0x41,0x20,0x28,0x47,0x26,
(0035) 0x17,0x16,0x15,0x45,0x40,0x31,0x11,0x21,0x21,0x21,0x22,0x42,0x40,0x20,0x23,0x23,
(0036) 0x24,0x25,0x24,0x23,0x24,0x25,0x26,0x23,0x23,0x42,0x42,0x40,0x23,0x22,0x21,0x41,
(0037) 0x28,0x28,0x28,0x23,0x25,0x45,0x45,0x40,0x20,0x25,0x46,0x28,0x28,0x48,0x20,0x29,
(0038) 0x47,0x26,0x17,0x16,0x15,0x45,0x25,0x25,0x26,0x28,0x18,0x16,0x26,0x28,0x26,0x28,
(0039) 0x19,0x19,0x49,0x49,0x20,0x25,0x2a,0x18,0x19,0x29,0x28,0x16,0x17,0x16,0x15,0x25,
(0040) 0x25,0x28,0x29,0x2a,0x29,0x48,0x28,0x48,0x2c,0x4c,0x4c,0x40,0x2a,0x2c,0x1c,0x1a,
(0041) 0x2a,0x2a,0x29,0x4a,0x2b,0x2a,0x4a,0x4a,0x40,0x2a,0x29,0x29,0x28,0x28,0x26,0x48,
(0042) 0x29,0x26,0x45,0x45,0x40,0x25,0x25,0x26,0x21,0x18,0x16,0x26,0x28,0x26,0x28,0x29,
(0043) 0x49,0x49,0x20,0x25,0x28,0x29,0x2a,0x29,0x49,0x28,0x48,0x2c,0x4c,0x4c,0x40,0x2a,
(0044) 0x2c,0x15,0x1a,0x2a,0x2a,0x29,0x4a,0x2b,0x2a,0x4a,0x4a,0x40,0x2a,0x29,0x29,0x28,
(0045) 0x28,0x26,0x28,0x28,0x29,0x26,0x45,0x45,0x40,0x25,0x25,0x26,0x28,0x28,0x26,0x2a,
(0046) 0x19,0x18,0x28,0x18,0x19,0x48,0x48,0x40,0x40,0x40,0x40,0x28,0x48,0x29,0x28,0x28,
(0047) 0x2a,0x1a,0x1a,0x1a,0x18,0x40,0x20,0x26,0x28,0x28,0x28,0x26,0x28,0x48,0x26,0x25,
(0048) 0x45,0x45,0x40,0x40,0x40,0x28,0x48,0x28,0x28,0x1c,0x1d,0x2d,0x2c,0x28,0x28,0x28,
(0049) 0x20,0x26,0x19,0x1a,0x29,0x19,0x18,0x28,0x28,0x26,0x21,0x29,0x49,0x49,0x40,0x20,
(0050) 0x28,0x29,0x2a,0x4a,0x4a,0x20,0x25,0x28,0x29,0x48,0x48,0x48,0x25,0x25,0x26,0x28,
(0051) 0x28,0x26,0x2a,0x19,0x18,0x28,0x18,0x19,0x49,0x49,0x40,0x40,
(0052)
(0053) 0x00,0x00
(0054) };
(0055) #pragma data:data
(0056) /* 音阶表 */
(0057) const unsigned int TONETABLE[15]={DO,RE,MI,FA,SO,LA,TI,DO_H,
(0058) RE_H,MI_H,FA_H,SO_H,LA_H,TI_H,DO_HH};
(0059) /* 音阶重装常数 */
(0060) unsigned int toneconst;
(0061) unsigned int sound_add=0;
(0062) unsigned int rst_time,delay_time1,delay_time2,led_delayms=600;
(0063) unsigned char temp,temp1;
(0064) unsigned char pa,pb,pc,pd,remote_in,timers,cny_in,cny_times,cds,pd_select,remote_select;
(0065) unsigned char gzsl,t0_times;
(0066) unsigned char sound_1,sound_2;
(0067)
(0068) const unsigned char led_data[]=
(0069) {//设置LED广告灯数据表
(0070) 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,
(0071) 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,
(0072) 0x00,0x18,0x3c,0x7e,0xff,0x7e,0x3c,0x18,
(0073) 0x00,0x18,0x3c,0x7e,0xff,0x7e,0x3c,0x18,
(0074) 0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x8f,0xc7,0xe3,0xf1,
(0075) 0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x8f,0xc7,0xe3,0xf1,
(0076) 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,
(0077) 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,
(0078) 0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,
(0079) 0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,
(0080) 0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,
(0081)
(0082) 0x0a,0x0a
(0083) };
(0084)
(0085) const unsigned char music_11[]=
(0086) {//七子之歌
(0087) 0x45,0x23,0x25,0x23,0x65,0x26,0x25,0x23,0x26,0x45,0x45,0x41,
(0088) 0x21,0x22,0x43,0x25,0x23,0x42,0x20,0x23,0x45,0x45,0x25,0x25,
(0089) 0x26,0x25,0x23,0x45,0x25,0x26,0x25,0x28,0x26,0x45,0x45,0x41,
(0090) 0x25,0x23,0x22,0x21,0x42,0x23,0x65,0x25,0x22,0x43,0x41,0x41,
(0091) 0x41,0x41,0x45,0x23,0x25,0x23,0x65,0x26,0x25,0x23,0x26,0x45,
(0092) 0x45,0x41,0x21,0x22,0x43,0x25,0x23,0x42,0x20,0x23,0x45,0x45,
(0093) 0x25,0x25,0x26,0x25,0x23,0x45,0x25,0x26,0x25,0x28,0x26,0x45,
(0094) 0x45,0x41,0x25,0x23,0x22,0x21,0x42,0x23,0x65,0x25,0x22,0x43,
(0095) 0x41,0x41,0x41,0x20,0x25,0x4a,0x29,0x28,0x26,0x25,0x45,0x26,
(0096) 0x46,0x25,0x36,0x18,0x2a,0x28,0x49,0x49,0x49,0x20,0x25,0x4a,
(0097) 0x39,0x18,0x26,0x25,0x45,0x26,0x46,0x25,0x46,0x2a,0x29,0x49,
(0098) 0x49,0x49,0x49,0x4a,0x39,0x18,0x26,0x25,0x45,0x48,0x26,0x25,
(0099) 0x23,0x22,0x41,0x40,0x22,0x23,0x45,0x45,0x45,0x45,0x40,0x25,
(0100) 0x26,0x48,0x48,0x48,
(0101) 0x00,0x00
(0102) };
(0103) const unsigned char music_22[]=
(0104) {//走进新时代
(0105) 0x68,0x26,0x25,0x23,0x22,0x13,0x12,0x41,0x41,0x41,0x23,0x25,
(0106) 0x28,0x48,0x28,0x29,0x2a,0x29,0x26,0x45,0x45,0x45,0x45,0x68,
(0107) 0x29,0x29,0x28,0x26,0x25,0x46,0x46,0x46,0x25,0x26,
(0108) 0x29,0x43,0x25,0x22,0x23,0x22,0x21,0x42,0x42,0x42,0x42,0x63,
(0109) 0x25,0x26,0x25,0x26,0x25,0x23,0x22,0x13,0x12,0x41,0x23,0x25,
(0110) 0x28,0x28,0x28,0x28,0x29,0x2a,0x2a,0x29,0x46,0x46,0x46,0x46,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -