|
51單片機小車仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (14.71 KB, 下載次數(shù): 42)
下載附件
2018-5-12 03:16 上傳
0.png (18.59 KB, 下載次數(shù): 44)
下載附件
2018-5-12 03:17 上傳
單片機源程序如下:
- /* 買了個四驅(qū)車的底盤,雙直流電機,一只驅(qū)動左邊兩輪,一只驅(qū)動
- 右邊兩輪。驅(qū)動電壓為4.5-9V,配兩個紅外對管,打算一直裝在小車前方
- ,一只裝在小車底盤,分別檢測前方障礙和臺階,小車碰到前方障礙后
- 左邊兩輪停止,右輪驅(qū)動,實現(xiàn)轉(zhuǎn)彎。碰到臺階后小車先后退,然后左輪
- 停止,右輪驅(qū)動實現(xiàn)轉(zhuǎn)彎,轉(zhuǎn)彎結(jié)束后小車?yán)^續(xù)前進(jìn),如此循環(huán)*/
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar cs1,cs2,num1,num2;
- uchar code table[]={0,1}; //占空比50%
- sbit qdg=P3^4; //前紅外對管,檢測小車前方障礙
- sbit xdg=P3^5; //下紅外對管,檢測小車是否碰到臺階
- sbit in1=P1^0; //L298輸入
- sbit in2=P1^1; //L298輸入
- sbit in3=P1^2; //L298輸入
- sbit in4=P1^3; //L298輸入
- sbit ena=P1^4; //L298輸入使能A
- sbit enb=P1^5; //L298輸入使能B
- void delay(int z) //延時函數(shù)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void init() //初始化函數(shù)
- {
- TMOD=0x11;
- TH0=(65536-500)/256;
- TL0=(65536-500)%256;
- ET0=1;
- TR0=1;
- EA=1;
- }
- void main()
- {
- init();
- while(1)
- {
- if(qdg==1) //如果前方?jīng)]有檢測到障礙,對管輸出高電平
- {
- ena=1; //L298使能端A為高
- enb=1; //L298使能端B為高
- in2=0; //L298IN2為低,小車左輪前進(jìn)
- in4=0; //L298IN4為低,小車右輪前進(jìn)
- }
- else
- {
- ena=0; //如果前方檢測到障礙,L298使能端為低 ,左輪停止(小車轉(zhuǎn)彎)
- delay(1000);
- ena=1; //一秒后轉(zhuǎn)彎結(jié)束,繼續(xù)兩輪驅(qū)動前進(jìn)
- }
- if(xdg==0) //如果小車下方未檢測到障礙(碰到臺階)
- {
- in2=1; //L298IN2為高,小車左輪后退
- in4=1; //L298IN4為高,小車右輪后退
- delay(1000);
- ena=0; //后退一秒后,左輪停止(轉(zhuǎn)彎)
- delay(1000); //一秒后轉(zhuǎn)彎結(jié)束,小車?yán)^續(xù)前進(jìn)
- }
- }
- }
- void timer0() interrupt 1
- {
- TH0=(65536-500)/256;
- TL0=(65536-500)%256;
- cs1++;
- if (cs1==10)
- {
- cs1=0;
- num1++;
- if(num1==3)
- num1=0;
- in1=table[num1];
- num2++;
- if(num2==3)
- num2=0;
- in3=table[num2];
- }
- }
復(fù)制代碼
0.jpg (40.18 KB, 下載次數(shù): 32)
下載附件
2018-5-12 03:17 上傳
所有資料51hei提供下載:
小車.rar
(59.09 KB, 下載次數(shù): 98)
2018-5-11 10:30 上傳
點擊文件名下載附件
小車 下載積分: 黑幣 -5
|
評分
-
查看全部評分
|