|
四個(gè)紅外傳感器的小車循跡源碼修改版,更穩(wěn)定,感興趣的同學(xué)可以拿去參考一下,每輛車都不一樣,速度可能要調(diào)一下。
164744fiptpykgqrwrwcrp.jpg (99.99 KB, 下載次數(shù): 296)
下載附件
四輪四個(gè)傳感器循跡小車
2017-5-20 11:46 上傳
單片機(jī)源程序如下:
- /*從小車后面觀察,從左向右的紅外檢測(cè)分別為DD1,DD2,DD3,DD4
- DD1---P0^3
- DD2---P0^2
- DD3---P0^1
- DD4---P0^0
- */
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- extern void Motor_Left(bit ReverOrCoro, uchar DutyCycle); //左邊電機(jī)控制函數(shù)
- extern void Motor_Right(bit ReverOrCoro, uchar DutyCycle); //右邊電機(jī)控制函數(shù)
- void Timer0Config(); // 配置定時(shí)器0
- void zhizou();
- void dazhuan1();
- void dazhuan2();
- void weitiao1();
- void weitiao2();
- sbit ENA = P1^5; //定義電機(jī)使能端
- sbit ENB = P1^0;
- uchar a;
- uchar Infrared; //檢測(cè)P0低四位的值
- void main()
- {
- Timer0Config();
- ENA = 1; ENB = 1;
- Infrared = P0 & 0x0F; //取出P0口低四位
- while(1)
- {
- switch(Infrared)
- {
- case 0x00:
- zhizou(); break; //未檢測(cè)到黑線,直行
- case 0x08:
- dazhuan1(); break; //左邊第一個(gè)檢測(cè)到黑線,左大轉(zhuǎn)
- case 0x04:
- weitiao1(); break; //左邊第二個(gè)檢測(cè)到黑線,左微調(diào)
- case 0x02:
- weitiao2(); break; //右邊第一個(gè)檢測(cè)到黑線,右微調(diào)
- case 0x01:
- dazhuan2(); break; //右邊第二個(gè)檢測(cè)到黑線,右大轉(zhuǎn)
- case 0x0C:
- zhizou(); break; //左邊兩個(gè)同時(shí)檢測(cè)到黑線,直行
- case 0x0E:
- zhizou(); break; //左邊三個(gè)同時(shí)檢測(cè)到黑線,直行
- case 0x03:
- zhizou(); break; //右邊兩個(gè)同時(shí)檢測(cè)到黑線,直行
- case 0x07:
- zhizou(); break; //右邊三個(gè)同時(shí)檢測(cè)到黑線,直行
- case 0x0f:
- zhizou(); break; //全部檢測(cè)到,直行
- case 0x06:
- zhizou(); break; //中間兩個(gè)檢測(cè)到,直行
- case 0x09:
- zhizou(); break; //旁邊兩個(gè)檢測(cè)到,直行
- case 0x0A:
- weitiao1(); break; //左一右一檢測(cè)到,左微調(diào)
- case 0x05:
- weitiao2(); break; //左二右二檢測(cè)到,右微調(diào)
- case 0x0b:
- zhizou(); break; //左二未檢測(cè)到,直行
- case 0x0d:
- zhizou(); break; //右一未檢測(cè)到,直行
- default: break;
- }
- }
- }
- void Timer0Config()
- {
- TMOD &= 0xF0;
- TMOD |= 0x01;
- TH0 = 0xFF;
- TL0 = 0x7E;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- }
- void zhizou()
- {
- Motor_Left(1, 100), Motor_Right(1, 100);
- Infrared = P0 & 0x0F;
- }
- void dazhuan1()
- {
- a=1;
-
- while(a)
- {
- Motor_Left(0, 80); Motor_Right(1, 80);
- Infrared = P0 & 0x0F;
- if(Infrared==0x04)
- {
- Motor_Left(1, 100); Motor_Right(0, 100); break;
- }
- else if(Infrared==0x02)
- {
- Motor_Left(1, 100); Motor_Right(0, 100); break;
- }
- }
- Infrared = P0 & 0x0F;
- }
- void dazhuan2()
- {
- a=1;
-
- while(a)
- {
- Motor_Left(1, 80); Motor_Right(0, 80);
- Infrared = P0 & 0x0F;
- if(Infrared==0x02)
- {
- Motor_Left(0, 100); Motor_Right(1, 100); break;
- }
- else if(Infrared==0x04)
- {
- Motor_Left(0, 100); Motor_Right(1, 100); break;
- }
- }
- Infrared = P0 & 0x0F;
- }
- void weitiao1()
- {
- a=1;
- while(a)
- {
- Motor_Left(0, 60); Motor_Right(1, 100);
- Infrared = P0 & 0x0F;
- switch(Infrared)
- {
- case 0x04:
- a=1; break;
- default:
- a=0; break;
- }
- }
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
0.png (48.04 KB, 下載次數(shù): 312)
下載附件
2017-5-20 16:11 上傳
所有資料51hei提供下載:
循跡決賽程序1.zip
(45.32 KB, 下載次數(shù): 685)
2017-5-20 11:48 上傳
點(diǎn)擊文件名下載附件
決賽用的程序 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|