標(biāo)題: 單片機(jī)尋聲小車源程序 [打印本頁]

作者: 礦泉水小強(qiáng)    時(shí)間: 2018-4-13 21:05
標(biāo)題: 單片機(jī)尋聲小車源程序
單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. typedef unsigned int uint;
  3. typedef unsigned char uchar;
  4. int a=0;

  5. sbit IN1=P1^0; //定義電機(jī)驅(qū)動(dòng)信號(hào)輸出端
  6. sbit IN2=P1^1; //定義電機(jī)驅(qū)動(dòng)信號(hào)輸出端
  7. sbit IN3=P1^2; //定義電機(jī)驅(qū)動(dòng)信號(hào)輸出端
  8. sbit IN4=P1^3; //定義電機(jī)驅(qū)動(dòng)信號(hào)輸出端
  9. sbit IN5=P1^4; //定義電機(jī)驅(qū)動(dòng)信號(hào)輸出端
  10. sbit IN6=P1^5; //定義電機(jī)驅(qū)動(dòng)信號(hào)輸出端
  11. sbit IN7=P1^6; //定義電機(jī)驅(qū)動(dòng)信號(hào)輸出端
  12. sbit IN8=P1^7; //定義電機(jī)驅(qū)動(dòng)信號(hào)輸出端
  13. sbit out1=P3^2;//定義尋聲模塊信號(hào)左輸入端  //可有可無中斷自動(dòng)觸發(fā)
  14. sbit out2=P3^3;//定義尋聲模塊信號(hào)右輸入端
  15. char L_pwm,R_pwm,t;
  16. void L_qian()
  17. {
  18.    IN1=1;   
  19.    IN2=0;
  20.    IN3=1;      
  21.    IN4=0;
  22. }
  23. void R_qian()
  24. {
  25.    IN5=1;   
  26.    IN6=0;
  27.    IN7=1;      
  28.    IN8=0;
  29. }
  30. void L_ting()
  31. {
  32.    IN1=0;   
  33.    IN2=0;
  34.    IN3=0;      
  35.    IN4=0;
  36. }
  37. void R_ting()
  38. {
  39.    IN5=0;   
  40.    IN6=0;
  41.    IN7=0;      
  42.    IN8=0;
  43. }
  44. void L_hou()
  45. {
  46.    IN1=0;   
  47.    IN2=1;
  48.    IN3=0;      
  49.    IN4=1;
  50. }
  51. void R_hou()
  52. {
  53.    IN5=0;   
  54.    IN6=1;
  55.    IN7=0;      
  56.    IN8=1;
  57. }


  58. void zuozhuan()interrupt 0
  59. {
  60.   if(a==0)
  61. { L_pwm=0;R_pwm=40;a=1;}
  62. else a=0;
  63.   }
  64.   void youzhuan()interrupt 2
  65.   {
  66.    if(a==0)
  67. { L_pwm=40;R_pwm=0;a=1;}
  68. else a=0;
  69.   }

  70. void timer0() interrupt 1
  71. {   TH1 = 0x0FE;
  72.     TL1 = 0x33;
  73.    if(L_pwm>=0)if(t<L_pwm) L_qian(); //當(dāng)L_pwm為0時(shí)根據(jù)我們的思維:電機(jī)不應(yīng)該轉(zhuǎn)。將0代入左邊
  74.              else        L_ting(); //L_pwm,發(fā)現(xiàn)不管t取0~39范圍內(nèi)何值時(shí),都不會(huì)執(zhí)行L_qian(),
  75.    else if(t<~L_pwm)    L_hou(); //當(dāng)L_pwm為0時(shí)根據(jù)我們的思維:電機(jī)不應(yīng)該轉(zhuǎn)。將0代入左邊
  76.              else        L_ting(); //L_pwm,發(fā)現(xiàn)不管t取0~39范圍內(nèi)何值時(shí),都不會(huì)執(zhí)行L_qian(),
  77.    if(R_pwm>=0)if(t<R_pwm) R_qian(); //當(dāng)L_pwm為0時(shí)根據(jù)我們的思維:電機(jī)不應(yīng)該轉(zhuǎn)。將0代入左邊
  78.              else        R_ting(); //L_pwm,發(fā)現(xiàn)不管t取0~39范圍內(nèi)何值時(shí),都不會(huì)執(zhí)行L_qian(),
  79.    else if(t<~R_pwm)    R_hou(); //當(dāng)L_pwm為0時(shí)根據(jù)我們的思維:電機(jī)不應(yīng)該轉(zhuǎn)。將0代入左邊
  80.              else        R_ting(); //L_pwm,發(fā)現(xiàn)不管t取0~39范圍內(nèi)何值時(shí),都不會(huì)執(zhí)行L_qian(),
  81.   t++;
  82.   t%=40;//使每個(gè)pwm周期內(nèi)t的取值都是0~39變化
  83. }
復(fù)制代碼







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1