|
QQ圖片20171031205821.png (94.06 KB, 下載次數(shù): 83)
下載附件
2017-10-31 21:04 上傳
用51單片機(jī)做的滅火機(jī)器人程序,pwm控制速度正反轉(zhuǎn),能夠?qū)崿F(xiàn)自動尋找火源并滅火。此機(jī)器人在電子競賽中獲
單片機(jī)源程序如下:
- #include<reg52.h>
- #include<math.h>
- #include<math.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit IN_L1=P1^3; //左輪電機(jī)控制1 //
- sbit IN_L2=P1^2; //左輪電機(jī)控制2 //
- sbit IN_R1=P1^0; //右輪電機(jī)控制1 //
- sbit IN_R2=P1^1; //右輪電機(jī)控制2 //
- sbit PWMA=P1^6; //左輪電機(jī)PWM波輸出 //
- sbit PWMB=P1^5; //右輪電機(jī)PWM波輸出 //
- sbit HONG_L=P3^0;
- sbit HONG_M=P3^1;
- sbit HONG_R=P3^2; //紅外避障,左,中,右
-
- sbit S_L=P3^4;
- sbit S_R=P3^5; //尋跡傳感器,
- sbit J_L=P3^6;
- sbit J_R=P3^7; //計數(shù)器,左輪,右輪
- sbit DJ=P0^0; // 電機(jī)
- sbit SPK=P2^1; //蜂鳴器
- sbit HUO_L=P2^3;
- sbit HUO_R=P2^4; //探測到火源 ,為低電位
- uchar SpeedTemp1=0; //左輪電機(jī)速度鎖定變量
- uchar SpeedTemp2=0; //右輪電機(jī)速度鎖定變量
- uchar SpeedLeft=0; //左輪電機(jī)速度設(shè)定變量
- uchar SpeedRight=0; //右輪電機(jī)速度設(shè)定變量
- uchar Timer0=0; //定時器T0中斷次數(shù)計數(shù)變量
- uint i,j,k,n;
- void Motor(uchar Select,char Speed) //Select為電機(jī)選擇,左輪為1,右輪為2 //Description:電機(jī)速度,正反轉(zhuǎn)傳遞程序
- {
- if(Select==1) //對左輪電機(jī)的處理
- {
- SpeedLeft=abs(Speed); //取速度的絕對值
- if(Speed>=0)
- {
- IN_L1=0;
- IN_L2=1; //如果速度為非負(fù),則正轉(zhuǎn)
- }
- else
- {
- IN_L1=1;
- IN_L2=0; //如果速度為負(fù),則反轉(zhuǎn)
- }
- }
- if(Select==2) //對右輪電機(jī)的處理
- {
- SpeedRight=abs(Speed); //取速度的絕對值
- if(Speed>=0)
- {
- IN_R1=0;
- IN_R2=1; //如果速度為非負(fù),則正轉(zhuǎn)
- }
- else
- {
- IN_R1=1;
- IN_R2=0; //如果速度為負(fù),則反轉(zhuǎn)
- }
- }
- }
- void Delay(uint n) //Delay范圍0 ~ 65535
- {
- uint j;
- while(n--!=0) //延時次數(shù)
- {
- for(j=0;j<110;j++) //延時1ms
- ;
- }
- } //總延時為Delay*1 ms
- void H_detect()
- {
- if(HUO_L==0)
- {
- for(i=1;i<640;i++)
- for(k=1;k<110;k++)
- {
- Motor(1,-50);
- Motor(2,0);
- DJ=1;
- j=1;
- }
- }
- else
- if(HUO_R==0)
- {
- for(i=1;i<640;i++)
- for(k=1;k<110;k++)
- {
- Motor(1,0);
- Motor(2,-50);
- DJ=1;
- j=2;
- }
- }
- else
- {
- Motor(1,80);
- Motor(2,80);
- j=0;
- }
- if((j==1)||(j==2))
- { DJ=1;
- for(i=0;i<500;i++)
- for(k=1;k<110;k++)
- {
- Motor(1,0);
- Motor(2,0);
- }
- if(j==1)
- {
- for(i=1;i<1150;i++)
- for(k=1;k<110;k++)
- {
- Motor(1,50);
- Motor(2,0);
- }
- }
- else
- {
- for(i=1;i<1150;i++)
- for(k=1;k<110;k++)
- {
- Motor(1,0);
- Motor(2,50);
- }
- }
- DJ=0;
- Delay(200);
- }
- }
- void Move()
- {
- H_detect();
- if((S_L==0)&&(S_R!=0))
- {
- Motor(1,-10);
- Motor(2,80);
- }
- else
- {
- if((S_R==0)&&(S_L!=0))
- {
- Motor(1,80);
- Motor(2,-10);
- }
- else
- {if((S_R==0)&&(S_L==0))
- {
- Motor(1,80);
- Motor(2,80);
- }
- }
- }
- // Delay(100);
- Motor(1,80);
- Motor(2,80);
- }
- void Init()
- {
- IN_L1=1;
- IN_L2=1; //左輪電機(jī)剎車
- IN_R1=1;
- IN_R2=1; //右輪電機(jī)剎車
- PWMA=0; //左輪電機(jī)PWM波初始化
- PWMB=0; //右輪電機(jī)PWM波初始化
-
- TMOD=0x01; // 設(shè)定T0的工作模式為1,GATE=0說明以TR0啟動定時器,C/T為0說明選擇了定時模式
- TR0=0; //關(guān)閉定時器0
- TF0=0; //定時器溢出復(fù)位
- IE=0x00; //所有中斷關(guān)閉
- TH0=(65536-1000)/256;
- TL0=(65536-1000)%256; //裝入TO定時初值,定時時間為50us
- EA=1; //開中斷
- ET0=1; //開定時器0的中斷
- TR0=1; //啟動定時器0
- }
- void main()
- { Init();
- DJ=0;
- n=1;
- while(n)
- {
- Motor(1,80);
- Motor(2,80);
- if((S_R!=0)&(S_L!=0))
- {
- for(i=1;i<95;i++)
- for(k=1;k<110;k++)
- {
- Motor(1,80);
- Motor(2,0);
- } //右轉(zhuǎn)九十度
- n=0;
- }
- }
- Delay(200);
- for(i=1;i<150;i++)
- for(k=1;k<110;k++)
- {
- Move();
- }
- for(i=1;i<180;i++)
- for(k=1;k<110;k++)
- {
- Motor(1,0);
- Motor(2,80);
- } //zuo轉(zhuǎn)九十度
- while(1)
- {
- Move();
- }
- }
- void PwmTimer0() interrupt 1 //定時器0的中斷服務(wù)程序來產(chǎn)生PWM波
- {
- TH0=(65536-1000)/256;
- TL0=(65536-1000)%256; //恢復(fù)定時器0的初值,定時時間50us
-
- if(Timer0==0) //1個PWM周期完成后才會接受新數(shù)值 ,即500us內(nèi)鎖定速度
- {
- SpeedTemp1=SpeedLeft; //鎖定左輪電機(jī)的速度
- SpeedTemp2=SpeedRight; //鎖定右輪電機(jī)的速度
- }
-
- if(Timer0<SpeedTemp1)
- PWMA=1;
- else
- PWMA=0; //產(chǎn)生左輪電機(jī)的PWM波
-
- if(Timer0<SpeedTemp2)
- PWMB=1;
- else
- PWMB=0; //產(chǎn)生右輪電機(jī)的PWM波
-
- Timer0++; //中斷計數(shù)變量增1
- if(Timer0>=100) //設(shè)定PWM波周期為500us
- Timer0=0; //中斷計數(shù)變量清0
- }
復(fù)制代碼
0.png (8.97 KB, 下載次數(shù): 87)
下載附件
2017-11-1 01:54 上傳
所有資料51hei提供下載:
用51單片機(jī)做的滅火機(jī)器人程序,能夠?qū)崿F(xiàn)自動尋找火源并滅火。此機(jī)器人在電子競賽中獲.rar
(32.79 KB, 下載次數(shù): 161)
2017-10-31 21:05 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|