超聲波避障小車程序設(shè)計_第1頁
超聲波避障小車程序設(shè)計_第2頁
超聲波避障小車程序設(shè)計_第3頁
超聲波避障小車程序設(shè)計_第4頁
超聲波避障小車程序設(shè)計_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、word/*/ /5路超聲波避障實驗:51單片機(jī) +  HC-SR04超聲波 / /*/            #include <AT89x52.H>  /器件配置文件   #include <intrins.h>    #define  RX1 

2、60;P3_6     /小車左側(cè)超聲波HC-SR04接收端   #define  TX1  P1_7     /發(fā)送端       #define  RX2  P3_3     /左前方超聲波   #define  T

3、X2  P0_2         #define  RX3  P2_4     /正前方超聲波   #define  TX3  P2_5    #define  RX4  P3_5     /右前方超

4、聲波   #define  TX4  P3_4                #define  RX5  P3_7     /右側(cè)超聲波   #define  TX5  P1_6  

5、0;#define Left_moto_pwm   P1_5  /PWM信號端  #define Right_moto_pwm   P1_4   /PWM信號端    /定義小車驅(qū)動模塊輸入IO口   sbit IN1=P10;  sbit IN2=P11;  sbit IN3=P12;  

6、;sbit IN4=P13;  sbit EN1=P14;  sbit EN2=P15;     bit Right_moto_stop=1;  bit Left_moto_stop =1;   #define Left_moto_go      IN1=0,IN2=1,EN1=1;  /左電機(jī)向前走

7、0; #define Left_moto_back    IN1=1,IN2=0,EN1=1;  /左邊電機(jī)向后走  #define Left_moto_Stop    EN1=0;  /左邊電機(jī)停轉(zhuǎn)               #define Right_moto_g

8、o     IN3=1,IN4=0,EN2=1; /右邊電機(jī)向前走  #define Right_moto_back   IN3=0,IN4=1,EN2=1; /右邊電機(jī)向后走 #define Right_moto_Stop   EN2=0; /右邊電機(jī)停轉(zhuǎn)     unsigned char pwm_val_left 

9、0;=0;/變量定義 unsigned char push_val_left =0;/ 左電機(jī)占空比N/20  unsigned char pwm_val_right =0;  unsigned char push_val_right=0;/ 右電機(jī)占空比N/20       unsigned int  time=0;  

10、60;  unsigned int  timer=0;       unsigned long S1=0;     unsigned long S2=0;     unsigned long S3=0;     unsigned long S4=0;

11、     unsigned long S5=0;      void delay_1ms(unsigned char x)          /1ms延時函數(shù),100ms以內(nèi)可用    unsigned char i;  while(x-) 

12、0;for(i=124;i>0;i-);      /*/    void Count1()   /計算左側(cè)超聲波距離的函數(shù)     while(!RX1);  /當(dāng)RX1為零時等待   TR0=1;       /開啟計數(shù)   while(RX1);&

13、#160; /當(dāng)RX1為1計數(shù)并等待   TR0=0;    /關(guān)閉計數(shù)   time=TH0*256+TL0;   TH0=0;   TL0=0;         S1=(time*1.7)/100;     /算出來是CM     &#

14、160;void Count2()   /計算函數(shù)     while(!RX2);  /當(dāng)RX2為零時等待 TR0=1;       /開啟計數(shù)   while(RX2);  /當(dāng)RX2為1計數(shù)并等待   TR0=0;    /關(guān)閉計數(shù)   time=TH0

15、*256+TL0;   TH0=0;   TL0=0;              S2=(time*1.7)/100;     /算出來是CM          void Count3()   /計算函數(shù)

16、60;      while(!RX3);  /當(dāng)RX3為零時等待    TR0=1;       /開啟計數(shù)    while(RX3);  /當(dāng)RX3為1計數(shù)并等待    TR0=0;    /關(guān)閉計數(shù)    time=TH0

17、*256+TL0;    TH0=0;    TL0=0;           S3=(time*1.7)/100;     /算出來是CM         void Count4()   /計算函數(shù)  

18、60;    while(!RX4);  /當(dāng)RX4為零時等待  TR0=1;       /開啟計數(shù)    while(RX4);  /當(dāng)RX4為1計數(shù)并等待    TR0=0;    /關(guān)閉計數(shù)   time=TH0*256+TL0;   

19、60;TH0=0;    TL0=0;               S4=(time*1.7)/100;     /算出來是CM         void Count5()   /計算函數(shù)   

20、60; while(!RX5);  /當(dāng)RX5為零時等待  TR0=1;       /開啟計數(shù)   while(RX5);  /當(dāng)RX5為1計數(shù)并等待  TR0=0;    /關(guān)閉計數(shù)   time=TH0*256+TL0;   TH0=0;   TL0=0; 

21、60;         S5=(time*1.7)/100;     /算出來是CM  void leftrun(void)       push_val_left=20;       push_val_right=20;    Left_moto_

22、back  /左電機(jī)往后走  Right_moto_go  /右電機(jī)往前走   /*/  /右轉(zhuǎn)  void rightrun(void)       push_val_left=20;       push_val_right=20;  Left_moto_go  /左電機(jī)往前

23、走  Right_moto_back  /右電機(jī)往后走   /*/  /停止  void stoprun(void)    Left_moto_Stop  /左電機(jī)停  Right_moto_Stop  /右電機(jī)停       /*/ /*     

24、               PWM調(diào)制電機(jī)轉(zhuǎn)速                                 

25、60; */ /*/  /*                    左電機(jī)調(diào)速                       

26、60;                */ /*調(diào)節(jié)push_val_left的值改變電機(jī)轉(zhuǎn)速,占空比            */    void pwm_out_left_moto(void)     

27、60;    if(Left_moto_stop)                    if(pwm_val_left<=push_val_left)                  

28、60;   Left_moto_pwm=1;                   else                        &

29、#160;Left_moto_pwm=0;               if(pwm_val_left>=20)         pwm_val_left=0;            else   

30、60;                           Left_moto_pwm=0;                /*/ /*  

31、             右電機(jī)調(diào)速                                  */  

32、;     void pwm_out_right_moto(void)       if(Right_moto_stop)            if(pwm_val_right<=push_val_right)           

33、        Right_moto_pwm=1;         else                 Right_moto_pwm=0;         

34、0;  if(pwm_val_right>=20)          pwm_val_right=0;          else                    &#

35、160;        Right_moto_pwm=0;                      /*/      void timer0() interrupt 1   &#

36、160;/T0中斷             /*/   /*TIMER1中斷效勞子函數(shù)產(chǎn)生PWM信號*/    void timer1()interrupt 3     TH1=(65536-1000)/256;  /1ms定時  TL1=(65536-1000)%256; &#

37、160; timer+;   pwm_val_left+;   pwm_val_right+;   pwm_out_left_moto();   pwm_out_right_moto();         /*  */   void  main(void)    

38、60;      TMOD=0x11;     /設(shè)T0為方式1,GATE=1; TH0=0;  TL0=0;            TH1=(65536-1000)/256;  /1ms定時  TL1=(65536-1000)%256;  ET0=1;  &

39、#160;          /允許T0中斷  ET1=1;      /允許T1中斷  TR1=1;      /開啟定時器  EA=1;      /開啟總中斷   while(1)   

40、0;         TX1=1;     /開啟超聲波1探測   delay_1ms(1);   TX1=0;      Count1();   /測距        TX2=1;   delay_

41、1ms(1);   TX2=0;      Count2();           TX3=1;   delay_1ms(1);   TX3=0;       Count3();         TX4=1;   delay_1ms(1);   TX4=0;      Count4();              TX5=1;   delay_1ms(1);

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論