?? diy0206_4.lst
字號:
023F EF0A LDI R16,0xFA
0240 E010 LDI R17,0
0241 DF9D RCALL _delay_ms
(0205) }
(0206) if(sw_in == 0x03)// 0b 0000,0011 左側開關接觸
0242 3043 CPI R20,3
0243 F441 BNE 0x024C
(0207) {//后退,左轉
(0208) backward(); //后退
0244 DFBC RCALL _backward
(0209) delay_ms(touch_time);
0245 EF0A LDI R16,0xFA
0246 E010 LDI R17,0
0247 DF97 RCALL _delay_ms
(0210)
(0211) turn_left(); //左轉
0248 DFA9 RCALL _turn_left
(0212) delay_ms(touch_time);
0249 EF0A LDI R16,0xFA
024A E010 LDI R17,0
024B DF93 RCALL _delay_ms
(0213) }
(0214) if(sw_in == 0x02)// 0b 0000,0010 兩側開關同時接觸,停止運動
024C 3042 CPI R20,2
024D F4F9 BNE 0x026D
(0215) {
(0216) stop(); //停止運動,熄滅指示燈
024E DFBC RCALL _stop
(0217) delay_ms(touch_time*4);
024F EE08 LDI R16,0xE8
0250 E013 LDI R17,3
0251 DF8D RCALL _delay_ms
0252 C019 RJMP 0x026C
(0218) while(1)
(0219) {
(0220) sw_in = PINC & 0x10;
0253 B343 IN R20,P13
0254 7140 ANDI R20,0x10
(0221) if(sw_in == 0x00)
0255 F409 BNE 0x0257
(0222) {break;}//首部開關接觸繼續啟動運動
0256 C016 RJMP 0x026D
(0223) PORTA = 0x55;//停止不運動時pa口指示燈流動閃爍
0257 E585 LDI R24,0x55
0258 BB8B OUT P1B,R24
(0224) delay_ms(250);
0259 EF0A LDI R16,0xFA
025A E010 LDI R17,0
025B DF83 RCALL _delay_ms
(0225) PORTA = 0xAA;
025C EA8A LDI R24,0xAA
025D BB8B OUT P1B,R24
(0226) delay_ms(250);
025E EF0A LDI R16,0xFA
025F E010 LDI R17,0
0260 DF7E RCALL _delay_ms
(0227) remote_in = PINB & 0xf0;//遙控器控制繼續運動
0261 B366 IN R22,P16
0262 7F60 ANDI R22,0xF0
(0228) if(remote_in == 0x10 || remote_in == 0x20 || remote_in == 0x40 || remote_in == 0x80)
0263 3160 CPI R22,0x10
0264 F031 BEQ 0x026B
0265 3260 CPI R22,0x20
0266 F021 BEQ 0x026B
0267 3460 CPI R22,0x40
0268 F011 BEQ 0x026B
0269 3860 CPI R22,0x80
026A F409 BNE 0x026C
(0229) {break;}
026B C001 RJMP 0x026D
026C CFE6 RJMP 0x0253
(0230) }
(0231) }
(0232) }
026D D637 RCALL pop_gset2
026E 9508 RET
(0233)
(0234) void mic_startup()
(0235) {//聲控啟動程序運行
_mic_startup:
mic_in --> R16
026F C004 RJMP 0x0274
(0236) unsigned char mic_in;
(0237) while(1)//等待PB2按鍵按下
(0238) { //無鍵按下等待
(0239) mic_in=PINB & 0x04; //pb2=0
0270 B306 IN R16,P16
0271 7004 ANDI R16,4
(0240) if(mic_in==0){break;}
0272 F409 BNE 0x0274
0273 C001 RJMP 0x0275
0274 CFFB RJMP 0x0270
(0241) }//有鍵按下運行下面的程序
(0242) }
0275 9508 RET
(0243)
(0244) // #
(0245) // #
(0246) // #
(0247) // #
(0248) // # // delay_time1 轉彎時間
(0249) // # # # # # // delay_time2 直行時間
(0250) // # X # //<A> 0x40 delay_time2-50
(0251) // # B C # //<B> 0x20 delay_time1+50
(0252) // # D A # //<C> 0x80 delay_time1-50
(0253) // # # //<D> 0x10 delay_time2+50
(0254) // # # # # // max: 2000 min: 200
(0255)
(0256) unsigned int delay_time1,delay_time2;
(0257)
(0258) void remote_auto_time()
(0259) {
(0260) unsigned char remote_in;
(0261) remote_in = PINB & 0xF0;
_remote_auto_time:
remote_in --> R16
0276 B306 IN R16,P16
0277 7F00 ANDI R16,0xF0
(0262) switch (remote_in)
0278 2711 CLR R17
0279 3200 CPI R16,0x20
027A E0E0 LDI R30,0
027B 071E CPC R17,R30
027C F119 BEQ 0x02A0
027D E280 LDI R24,0x20
027E E090 LDI R25,0
027F 1780 CP R24,R16
0280 0791 CPC R25,R17
0281 F07C BLT 0x0291
0282 3000 CPI R16,0
0283 0701 CPC R16,R17
0284 F409 BNE 0x0286
0285 C06A RJMP 0x02F0
0286 3000 CPI R16,0
0287 E0E0 LDI R30,0
0288 071E CPC R17,R30
0289 F40C BGE 0x028B
028A C065 RJMP 0x02F0
028B 3100 CPI R16,0x10
028C E0E0 LDI R30,0
028D 071E CPC R17,R30
028E F409 BNE 0x0290
028F C039 RJMP 0x02C9
0290 C05F RJMP 0x02F0
0291 3400 CPI R16,0x40
0292 E0E0 LDI R30,0
0293 071E CPC R17,R30
0294 F101 BEQ 0x02B5
0295 3400 CPI R16,0x40
0296 E0E0 LDI R30,0
0297 071E CPC R17,R30
0298 F40C BGE 0x029A
0299 C056 RJMP 0x02F0
029A 3800 CPI R16,0x80
029B E0E0 LDI R30,0
029C 071E CPC R17,R30
029D F409 BNE 0x029F
029E C03E RJMP 0x02DD
029F C050 RJMP 0x02F0
(0263) {//檢測遙控器是否有鍵按下
(0264) case 0x20: // < A >
(0265) delay_time2 = delay_time2 - 50;
02A0 91800079 LDS R24,_delay_time2
02A2 9190007A LDS R25,_delay_time2+1
02A4 97C2 SBIW R24,0x32
02A5 9390007A STS _delay_time2+1,R25
02A7 93800079 STS _delay_time2,R24
(0266) if(delay_time2 == 50)
02A9 3382 CPI R24,0x32
02AA E0E0 LDI R30,0
02AB 079E CPC R25,R30
02AC F009 BEQ 0x02AE
02AD C042 RJMP 0x02F0
(0267) {delay_time2 = 100;}
02AE E684 LDI R24,0x64
02AF E090 LDI R25,0
02B0 9390007A STS _delay_time2+1,R25
02B2 93800079 STS _delay_time2,R24
(0268) break;
02B4 C03B RJMP 0x02F0
(0269) case 0x40: // < B >
(0270) delay_time1 = delay_time1 + 50;
02B5 9180007B LDS R24,_delay_time1
02B7 9190007C LDS R25,_delay_time1+1
02B9 96C2 ADIW R24,0x32
02BA 9390007C STS _delay_time1+1,R25
02BC 9380007B STS _delay_time1,R24
(0271) if(delay_time1 == 2050)
02BE 3082 CPI R24,2
02BF E0E8 LDI R30,0x8
02C0 079E CPC R25,R30
02C1 F571 BNE 0x02F0
(0272) {delay_time1 = 2000;}
02C2 ED80 LDI R24,0xD0
02C3 E097 LDI R25,7
02C4 9390007C STS _delay_time1+1,R25
02C6 9380007B STS _delay_time1,R24
(0273) break;
02C8 C027 RJMP 0x02F0
(0274) case 0x10: // < C >
(0275) delay_time1 = delay_time1 - 50;
02C9 9180007B LDS R24,_delay_time1
02CB 9190007C LDS R25,_delay_time1+1
02CD 97C2 SBIW R24,0x32
02CE 9390007C STS _delay_time1+1,R25
02D0 9380007B STS _delay_time1,R24
(0276) if(delay_time1 == 50)
02D2 3382 CPI R24,0x32
02D3 E0E0 LDI R30,0
02D4 079E CPC R25,R30
02D5 F4D1 BNE 0x02F0
(0277) {delay_time1 = 100;}
02D6 E684 LDI R24,0x64
02D7 E090 LDI R25,0
02D8 9390007C STS _delay_time1+1,R25
02DA 9380007B STS _delay_time1,R24
(0278) break;
02DC C013 RJMP 0x02F0
(0279) case 0x80: // < D >
(0280) delay_time2 = delay_time2 + 50;
02DD 91800079 LDS R24,_delay_time2
02DF 9190007A LDS R25,_delay_time2+1
02E1 96C2 ADIW R24,0x32
02E2 9390007A STS _delay_time2+1,R25
02E4 93800079 STS _delay_time2,R24
(0281) if(delay_time2 == 2050)
02E6 3082 CPI R24,2
02E7 E0E8 LDI R30,0x8
02E8 079E CPC R25,R30
02E9 F431 BNE 0x02F0
(0282) {delay_time2 = 2000;}
02EA ED80 LDI R24,0xD0
02EB E097 LDI R25,7
02EC 9390007A STS _delay_time2+1,R25
02EE 93800079 STS _delay_time2,R24
(0283) break;
(0284) case 0x00: // 無按鍵
(0285) break;
(0286) }
(0287) }
02F0 9508 RET
FILE: E:\icc\iccavr\diy02-6\8515\diy0206_4\diy0206_4.c
(0001) /*******************************************/
(0002) /* 廣州天河雙龍電子公司 */
(0003) /* http://www.sl.com.cn */
(0004) /* 020-85510191,87578852,87578872 */
(0005) /* nikko@sl.com.cn */
(0006) /*******************************************/
(0007)
(0008) //遙控器沒有按鍵或者 pd3,pd2,pd1,pd0 短路塊全部接上,全為高電平
(0009) //機器人運行音樂機器人程序。
(0010) //PA口為音樂燈,當不同的音樂節奏,點亮不同的燈。
(0011) //聲控起動音樂機器人程序,未起動時,PA口的8 LED 呈廣告燈效果(霓虹燈)
(0012) //聲控起動后,機器人開始演奏音樂,同時PA口LED燈根據音樂節拍閃爍
(0013) //按遙控器上不同的鍵后可改變機器人演奏的樂曲。
(0014)
(0015) //將 pd0 接低電平,pd3,pd2,pd1 保持高電平
(0016) // 或按下遙控器<A>(保持 0.5s) 進入遙控機器人運行環境
(0017) //聲控起動遙控車程序,未起動時,PA口的8 LED 呈廣告燈效果(霓虹燈)
(0018) //聲控起動后,機器人開始動作
(0019) //遙控器無按鍵,機器人直行
(0020) //按住 < A > 鍵,機器人右轉,同時演奏右轉指示音樂;
(0021) //按住 < B > 鍵,機器人后退,同時演奏后退指示音樂;
(0022) //按住 < C > 鍵,機器人停止,同時演奏停止指示音樂;
(0023) //按住 < D > 鍵,機器人左轉,同時演奏左轉指示音樂;
(0024) //釋放遙控器按鍵,音樂停止
(0025)
(0026) //將 pd1 接低電平,pd3,pd2,pd0 保持高電平
(0027) // 或按下遙控器<B>(保持 0.5s) 尋跡機器人,探測白底黑線,沿黑線行進
(0028) //聲控起動尋跡機器人程序,未起動時,PA口的 8 LED 呈廣告燈效果(霓虹燈)
(0029) //聲控起動后,機器人開始動作,PA口的 8 LED 指示運動狀態
(0030)
(0031) //將 pd2 接低電平,pd3,pd1,pd0 保持高電平,只連接pd2的短路塊
(0032) // 或按下遙控器<C>(保持 0.5s) 機器人避障礙、避懸崖行進
(0033) //聲控起動避懸崖,壁障礙運行程序,未起動時,PA口的8 LED 呈廣告燈效果(霓虹燈)
(0034) //聲控起動后,機器人開始動作,PA口的 8 LED 指示運動狀態
(0035) //探測到邊緣,后退、轉彎,并以伴有音樂提示。
(0036)
(0037) //將 pd3 接低電平,pd2,pd1,pd0 保持高電平
(0038) // 或按下遙控器<D>(保持 0.5s) 機器人按程序設定路線行走,走四方形,同時演奏音樂
(0039) //自走車 機器人走四方形路線,遙控器調節行走路線
(0040) //聲控起動機器人按設定路線行走,未起動時,PA口的 8 LED 呈廣告燈效果(霓虹燈)
(0041) //聲控起動后,機器人開始動作,PA口的 8 LED 指示運動狀態
(0042)
(0043) //程序等待聲控起動運行,未啟動運行時機器人運行霓虹車程序。
(0044) //連續按住遙控器 < C > 鍵超過 10s 起動看門狗,再過 1s 系統復位
(0045)
(0046) //將 diy0206.c 文件拷貝到 icc avr 安裝目錄的<include>文件夾
(0047) //diy0206.c 是diy0206機器人板的子函數庫
(0048) //程序中調用此文件后 #include <diy0206.c>
(0049) //可直接調用里面的函數和變量
(0050)
(0051) // 最后更新:2003.04.17
(0052)
(0053) #include <io8515v.h>
(0054) #include <macros.h>
(0055) #include <diy0206.c>
(0056) #include <eeprom.h>
(0057)
(0058) #define xuanya_delayms 300
(0059) #define cny_delayms 50
(0060) #define light_delay 100
(0061)
(0062) /* 音樂數據 */
(0063) /* 四分之一拍為0x10, 二分之一拍為0x20, 一拍為0x40 */
(0064) /* 低1-1 2-2 3-3 4-4 5-5 6-6 7-7 */
(0065) /* 中1-8 2-9 3-A 4-B 5-C 6-D 7-E */
(0066) /* 高1-F */
(0067) #pragma data:eeprom
(0068) unsigned char sound[]={ //樂曲數據表
(0069) //情非得以
(0070) 0x20,0x1c,0x1d,0x4c,0x4c,0x4c,0x4c,0x20,0x2d,0x19,0x1a,0x19,0x18,0x48,0x48,0x48,
(0071) 0x48,0x47,0x47,0x46,0x46,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,
(0072)
(0073) 0x23,0x24,0x25,0x44,0x45,0x24,0x23,0x22,0x42,0x40,0x40,0x23,0x22,0x21,0x41,0x28,
(0074) 0x48,0x23,0x25,0x45,0x40,0x40,0x21,0x21,0x42,0x21,0x21,0x41,0x20,0x28,0x47,0x26,
(0075) 0x17,0x16,0x15,0x45,0x40,0x31,0x11,0x21,0x21,0x21,0x22,0x42,0x40,0x20,0x23,0x23,
(0076) 0x24,0x25,0x24,0x23,0x24,0x25,0x26,0x23,0x23,0x42,0x42,0x40,0x23,0x22,0x21,0x41,
(0077) 0x28,0x28,0x28,0x23,0x25,0x45,0x45,0x40,0x20,0x25,0x46,0x28,0x28,0x48,0x20,0x29,
(0078) 0x47,0x26,0x17,0x16,0x15,0x45,0x25,0x25,0x26,0x28,0x18,0x16,0x26,0x28,0x26,0x28,
(0079) 0x19,0x19,0x49,0x49,0x20,0x25,0x2a,0x18,0x19,0x29,0x28,0x16,0x17,0x16,0x15,0x25,
(0080) 0x25,0x28,0x29,0x2a,0x29,0x48,0x28,0x48,0x2c,0x4c,0x4c,0x40,0x2a,0x2c,0x1c,0x1a,
(0081) 0x2a,0x2a,0x29,0x4a,0x2b,0x2a,0x4a,0x4a,0x40,0x2a,0x29,0x29,0x28,0x28,0x26,0x48,
(0082) 0x29,0x26,0x45,0x45,0x40,0x25,0x25,0x26,0x21,0x18,0x16,0x26,0x28,0x26,0x28,0x29,
(0083) 0x49,0x49,0x20,0x25,0x28,0x29,0x2a,0x29,0x49,0x28,0x48,0x2c,0x4c,0x4c,0x40,0x2a,
(0084) 0x2c,0x15,0x1a,0x2a,0x2a,0x29,0x4a,0x2b,0x2a,0x4a,0x4a,0x40,0x2a,0x29,0x29,0x28,
(0085) 0x28,0x26,0x28,0x28,0x29,0x26,0x45,0x45,0x40,0x25,0x25,0x26,0x28,0x28,0x26,0x2a,
(0086) 0x19,0x18,0x28,0x18,0x19,0x48,0x48,0x40,0x40,0x40,0x40,0x28,0x48,0x29,0x28,0x28,
(0087) 0x2a,0x1a,0x1a,0x1a,0x18,0x40,0x20,0x26,0x28,0x28,0x28,0x26,0x28,0x48,0x26,0x25,
(0088) 0x45,0x45,0x40,0x40,0x40,0x28,0x48,0x28,0x28,0x1c,0x1d,0x2d,0x2c,0x28,0x28,0x28,
(0089) 0x20,0x26,0x19,0x1a,0x29,0x19,0x18,0x28,0x28,0x26,0x21,0x29,0x49,0x49,0x40,0x20,
(0090) 0x28,0x29,0x2a,0x4a,0x4a,0x20,0x25,0x28,0x29,0x48,0x48,0x48,0x25,0x25,0x26,0x28,
(0091) 0x28,0x26,0x2a,0x19,0x18,0x28,0x18,0x19,0x49,0x49,0x40,0x40,
(0092)
(0093) 0x00,0x00
(0094) };
(0095) #pragma data:data
(0096) /* 音階表 */
(0097) const unsigned int TONETABLE[15]={DO,RE,MI,FA,SO,LA,TI,DO_H,
(0098) RE_H,MI_H,FA_H,SO_H,LA_H,TI_H,DO_HH};
(0099) /* 音階重裝常數 */
(0100) unsigned int toneconst;
(0101) unsigned int sound_add=0;
(0102) unsigned int rst_time,delay_time1,delay_time2,led_delayms=600;
(0103) unsigned char temp,temp1;
(0104) unsigned char pa,pb,pc,pd,remote_in,timers,cny_in,cny_times,cds,pd_select,remote_select;
(0105) unsigned char gzsl,t0_times;
(0106) unsigned char sound_1,sound_2;
(0107)
(0108) const unsigned char led_data[]=
(0109) {//設置LED廣告燈數據表
(0110) 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,
(0111) 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,
(0112) 0x00,0x18,0x3c,0x7e,0xff,0x7e,0x3c,0x18,
(0113) 0x00,0x18,0x3c,0x7e,0xff,0x7e,0x3c,0x18,
(0114) 0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x8f,0xc7,0xe3,0xf1,
(0115) 0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x8f,0xc7,0xe3,0xf1,
(0116) 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,
(0117) 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,
(0118) 0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,
(0119) 0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,
(0120) 0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,
(0121)
(0122) 0x0a,0x0a
(0123) };
(0124)
(0125) const unsigned char music_11[]=
(0126) {//七子之歌
(0127) 0x45,0x23,0x25,0x23,0x65,0x26,0x25,0x23,0x26,0x45,0x45,0x41,
(0128) 0x21,0x22,0x43,0x25,0x23,0x42,0x20,0x23,0x45,0x45,0x25,0x25,
(0129) 0x26,0x25,0x23,0x45,0x25,0x26,0x25,0x28,0x26,0x45,0x45,0x41,
(0130) 0x25,0x23,0x22,0x21,0x42,0x23,0x65,0x25,0x22,0x43,0x41,0x41,
(0131) 0x41,0x41,0x45,0x23,0x25,0x23,0x65,0x26,0x25,0x23,0x26,0x45,
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -