|
尋跡避障 小車 ,經(jīng)典物件 !
制作出來的實(shí)物圖如下:
5086f049-c6f7-44fe-a54c-febe6b51c57e.png (553.5 KB, 下載次數(shù): 0)
下載附件
實(shí)物圖
2024-12-14 17:58 上傳
電路原理圖如下:
1734170409071.png (181.49 KB, 下載次數(shù): 0)
下載附件
2024-12-14 18:00 上傳
單片機(jī)源程序如下:- #include <oled.h>
- #include <reg51.h> //51通用頭文件
- #include <intrins.h>
- void delay(unsigned char sss)
- {
- while(sss--);
- }
-
- sbit PWM=P1^2;// P1.0輸出pwm
- sbit sd=P1^3;// P1.0輸出pwm
- char time,ct; // 定義占空比的變量
- int d,a,dw,ks=0;
- int y=2,z=2;
- int xs=220;
- sbit AIN2 =P2^4;
- sbit AIN1 =P2^3;
- sbit BIN2 =P2^5;
- sbit BIN1 =P2^6;
- sbit zuo =P1^0;
- sbit you =P1^1;
- sbit hw =P2^0;
- void Delay100ms() //@11.0592MHz
- {
- unsigned char i, j, k;
- i = 5;
- j = 52;
- k = 195;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
- void Delay180ms() //@11.0592MHz
- {
- unsigned char i, j, k;
- _nop_();
- _nop_();
- i = 8;
- j = 145;
- k = 99;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
- void Delay300ms() //@11.0592MHz
- {
- unsigned char i, j, k;
- _nop_();
- _nop_();
- i = 13;
- j = 156;
- k = 83;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
- void Delay250ms() //@11.0592MHz
- {
- unsigned char i, j, k;
- _nop_();
- _nop_();
- i = 11;
- j = 130;
- k = 111;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
- void initExtInt0()
- {
- IT0 = 1; // 電平下降沿觸發(fā)
- EX0 = 1; // 開啟INT0中斷
- EA = 1; // 開總中斷
- }
- void Timer01Init() {
- TMOD|=0X01;//選擇為定時器 0 模式,工作方式 1,僅用 TR0 打開啟動。
- TH0=0XFC; //給定時器賦初值,定時 1ms
- TL0=0X18;
- ET0=1;//打開定時器 0 中斷允許
- EA=1;//打開總中斷
- TR0=1;//打開定時器
-
- }
- void xj()
- {
- if(zuo==1&&you==0) {y=1;z=5;}
- if(zuo==0&&you==1) {y=5;z=1;}
- if(zuo==0&&you==0) {y=2;z=2;}
- }
- void fw()
- {
- if(zuo==1||you==1){z=5,y=1;Delay250ms();dw=0;a=0;}
- }
-
- void bz() //判斷小車前面是否存在障礙物
- {
- if(hw==0){a=1;dw=1;}
- while(a)
- {
- switch (dw) //循跡避障
- {
- case 1:z=5;y=1;Delay300ms();dw=2;break;//小車左轉(zhuǎn)
- case 2:z=2,y=2;Delay100ms();dw=3;break;//小車直行
- case 3:z=1,y=5;Delay180ms();dw=4;break;//小車右轉(zhuǎn)
- case 4:z=2,y=2;Delay100ms();dw=5;break;//小車直行
- case 5:z=1,y=5;Delay250ms();dw=6;break;//小車右轉(zhuǎn)
- case 6:z=2,y=2;fw();break; //判斷是否接觸黑線
- }
- }
- }
- void main()
- {
- Timer01Init(); //定時器初始化
- AIN2=1; //tb6612正反設(shè)定
- AIN1=0;
- BIN2=1;
- BIN1=0;
- OLED_Init();
- OLED_Clear();
- OLED_ShowCHinese(0,0,0);
- OLED_ShowCHinese(16,0,1);
- OLED_ShowNum(0,2,2023400,7,16);
- OLED_ShowNum(56,2,20365,5,16);
- while(1)
- {
-
- xj(); //調(diào)用循跡
- bz(); //調(diào)用避障
- }
- }
- void IntT0() interrupt 1
- {
- TH0=0xFC;
- TL0=0x18;
- time++;
- ct++;
-
- if(time>=y ) {time=0;} //右邊轉(zhuǎn)速
- if(time<=d*ks) {PWM=1;}
- else {PWM=0;}
-
- if(ct>=z ) {ct=0;} //左邊轉(zhuǎn)速
- if(ct<=d*ks) {sd=1;}
- else {sd=0;}
- }
復(fù)制代碼
原理圖: 無
仿真: 無
代碼:
程序.7z
(39.83 KB, 下載次數(shù): 0)
2024-12-14 21:22 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|