久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8272|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

智能尋鐵絲尋跡小車單片機(jī)程序 電感式接近開關(guān)做的

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:252449 發(fā)表于 2017-12-4 19:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
用電感式接近開關(guān)做的尋鐵絲小車

單片機(jī)源程序如下:
  1.         #include<reg52.h>
  2.         #define uchar unsigned char
  3.         #define uint unsigned int
  4.         sbit P0_4 = P0^4;                 //后輪輸入口
  5.         sbit P0_5 = P0^5;
  6.         sbit P0_6 = P0^6;
  7.         sbit P0_7 = P0^7;

  8.         sbit P0_0 = P0^0;                //前輪輸入口
  9.         sbit P0_1 = P0^1;
  10.         sbit P0_2 = P0^2;
  11.         sbit P0_3 = P0^3;
  12.                
  13.         sbit Left_moto_pwm = P3^6;          //電機(jī)使能
  14.         sbit Right_moto_pwm = P3^7;
  15.         sbit Left_moto_pwm2 = P3^5;
  16.         sbit Right_moto_pwm2 = P3^4;

  17.         sbit P20 = P2^0;          //金屬檢測器I/O口                 //左
  18.         sbit P21 = P2^1;                                                        // 中
  19.         sbit P22 = P2^2;                                                        //右
  20.                                                                                        
  21.         sbit rw=P2^5;         //1602
  22.         sbit rs=P2^6;
  23.         sbit en=P2^7;

  24.         sbit beep=P2^4;//蜂鳴器

  25.         uchar code table[]="Distance";
  26.         uchar code table1[]="Time";

  27.         unsigned int motor1=0;         //計左電機(jī)碼盤脈沖值         (碼盤值為20)
  28.         unsigned int motor2=0;         //計右電機(jī)碼盤脈沖值

  29. //        #define Left_moto_pwm     P3_6           //接驅(qū)動模塊ENA        使能端,輸入PWM信號調(diào)節(jié)速度         (左馬達(dá)調(diào)節(jié)PWM)  前
  30. //        #define Right_moto_pwm    P3_7           //接驅(qū)動模塊ENB         (右馬達(dá)調(diào)節(jié)PWM)
  31. //        #define Left_moto_pwm2     P3_5           //接驅(qū)動模塊ENA        使能端,輸入PWM信號調(diào)節(jié)速度         (左馬達(dá)調(diào)節(jié)PWM)  后
  32. //        #define Right_moto_pwm2    P3_4           //接驅(qū)動模塊ENB         (右馬達(dá)調(diào)節(jié)PWM)

  33.         #define Left_moto_go      {P0_4=0,P0_5=1;} //  左電機(jī)前進(jìn)         前          P0_4=0,P0_5=1;
  34.         #define Left_moto_back    {P0_4=1,P0_5=0;} // 左電機(jī)后退  前        P0_4=1,P0_5=0                      
  35.         #define Right_moto_go     {P0_6=1,P0_7=0;} //右電機(jī)前轉(zhuǎn)         后                P0_6=1,P0_7=0;
  36.         #define Right_moto_back   {P0_6=0,P0_7=1;} //右電機(jī)后退         后                P0_6=0,P0_7=1

  37.         #define Left_moto_go2      {P0_2=0,P0_3=1;} //左電機(jī)前進(jìn)        P0_2=0,P0_3=1                           
  38.         #define Left_moto_back2    {P0_2=1,P0_3=0;} //左電機(jī)后退          P0_2=1,P0_3=0        前左               
  39.         #define Right_moto_go2     {P0_0=1,P0_1=0;} //右電機(jī)前轉(zhuǎn)        P0_0=1,P0_1=0         前右
  40.         #define Right_moto_back2   {P0_0=0,P0_1=1;} //右電機(jī)后退         P0_0=0,P0_1=1

  41.         #define Left_moto_stop22    {P0_2=0,P0_3=0;} //左電機(jī)后退          P0_2=0,P0_3=0                      
  42.         #define Right_moto_stop22     {P0_0=0,P0_1=0;} //右電機(jī)前轉(zhuǎn)        P0_0=0,P0_1=0
  43.         #define Left_moto_stop21    {P0_4=0,P0_5=0;} // 左電機(jī)后退  后        P0_4=0,P0_5=0                      
  44.         #define Right_moto_stop21     {P0_6=0,P0_7=0;} //右電機(jī)前轉(zhuǎn)         后                P0_6=0,P0_7=0;

  45.            unsigned char pwm_val_left  =0;//變量定義
  46.         unsigned char push_val_left =0;// 左電機(jī)占空比N/20         推動                           //計算占空比時N的值(人工改變值)
  47.         unsigned char pwm_val_right =0;                                                                                      //通過它來實(shí)現(xiàn)PWM的改變(通過FOR循環(huán))
  48.         unsigned char push_val_right=0;// 右電機(jī)占空比N/20

  49.         unsigned char pwm_val_left2  =0;//變量定義
  50.         unsigned char push_val_left2 =0;// 左電機(jī)占空比N/20         推動                           //計算占空比時N的值(人工改變值)
  51.         unsigned char pwm_val_right2 =0;                                                                                      //通過它來實(shí)現(xiàn)PWM的改變(通過FOR循環(huán))
  52.         unsigned char push_val_right2=0;// 右電機(jī)占空比N/20

  53.         bit Right_moto_stop=1;
  54.         bit Left_moto_stop =1;

  55.         bit Right_moto_stop2=1;
  56.         bit Left_moto_stop2 =1;
  57.         unsigned  int  time=0;
  58.         uchar num2,shi=0,fen=0,miao=0;           //num2用于時鐘部分  
  59.         uint num,num1,num3,sum,num7;  //num,num1,num3用于距離處理部分
  60.         unsigned long num6,S=0,S1=0,S2=0;
  61.         uchar jc; //檢測
  62. /**************************1602顯示**********************************************/
  63. void delayms(uint xms)//延時函數(shù)
  64. {
  65. uint i,j;
  66. for(i=xms;i>0;i--)
  67.         for(j=110;j>0;j--);
  68. }
  69. void write_com(uchar com)
  70. {
  71. rs=0;
  72. en=0;
  73. P1=com;
  74. delayms(5);
  75. en=1;
  76. delayms(5);
  77. en=0;
  78. }
  79. void write_date(uchar date)
  80. {
  81. rs=1;
  82. en=0;
  83. P1=date;
  84. delayms(5);
  85. en=1;
  86. delayms(5);
  87. en=0;
  88. }
  89. void write_sfm(uchar add,uchar date)
  90. {
  91. uchar shi,ge;
  92. shi=date/10;
  93. ge=date%10;
  94. write_com(0x80+0x00+add);                                                  
  95. write_date(0x30+shi);                                                         
  96. write_date(0x30+ge);                                                         

  97. }
  98. void write_juli(uchar add,uchar date)
  99. {
  100. uchar shi,ge;
  101. shi=date/10;
  102. ge=date%10;
  103. write_com(0x80+0x40+add);                                                  
  104. write_date(0x30+shi);                                                         
  105. write_date(0x30+ge);                                                         

  106. }
  107. void led_1602_init()  //1602初始化函數(shù)
  108. {
  109. rw=0;
  110. en=0;
  111. write_com(0x38);
  112. write_com(0x0c);
  113. write_com(0x06);
  114. write_com(0x01);

  115.                
  116. }
  117.         void timer1()interrupt 3
  118.         {
  119.          TH1=(65536-45872)/256;
  120.          TL1=(65536-45872)%256;
  121.                  num2++;
  122.                 if(num2==20)
  123.                 {
  124.                  num2=0;
  125.                  miao++;
  126.                  }
  127.                  if(miao==60)
  128.                          {
  129.                          miao=0;
  130.                          fen++;
  131.                          }
  132.                          if(fen==60)
  133.                                  {
  134.                                  fen=0;
  135.                                  shi++;
  136.                                  }
  137.                                  if(shi==24)
  138.                                          {
  139.                                          shi=0;
  140.                                         }
  141.                                 
  142.         }
  143. void deal_juli() //測距函數(shù)
  144. {
  145. // S=S1*100+S2;
  146. // uint sum;                 
  147. sum=motor1+motor2;        // 求和
  148. num=sum/2.0;          // 求平均值
  149. num1=num/160.0;//求輪子旋轉(zhuǎn)圈數(shù)
  150. num3=num1*22.5;//輪子走過的距離 算出來的是cm
  151. S2=num3;
  152. S=S2/100;
  153. S1=S2%100;
  154. // write_juli(9,S);
  155. // write_juli(12,S1);
  156. }

  157. /*********************************************************************************************
  158. 蜂鳴器
  159. /********************************************************************************************/
  160. //void sound()
  161. //{
  162. // uint i;
  163. // for(i=4;i>0;i--)
  164. //        {
  165. //         beep=~beep;
  166. //        delayms(100);        //控制蜂鳴器的頻率
  167. //        }
  168. //}




  169. /*********************************************************************************************
  170. 外部中斷INT0計算電機(jī)1的脈沖
  171. /********************************************************************************************/
  172. void intersvr1(void) interrupt 0 using 1
  173. {
  174.         motor1++;       
  175.         if(motor1>=9999)
  176.                 motor1=0;       
  177. }
  178. /*********************************************************************************************
  179. 外部中斷INT1計算電機(jī)2的脈沖
  180. /********************************************************************************************/
  181. void intersvr2(void) interrupt 2 using 3
  182. {
  183.         motor2++;
  184.         if(motor2>=9999)
  185.                 motor2=0;
  186. }
  187. /************************************************************************/
  188.      void  run(void)        //前進(jìn)函數(shù)
  189. {
  190. ////         TR1=1;
  191. //     push_val_left  =4;  //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快  改這個值可以改變其速度
  192. //         push_val_right =4;         //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快         改這個值可以改變其速度
  193. //
  194. //         push_val_left2  =4;  //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快  改這個值可以改變其速度
  195. //         push_val_right2 =4;         //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快         改這個值可以改變其速度
  196.          if(P20==0&&P21==0&&P22==0)                //全測到
  197.          {
  198.          TR1=0;
  199.          Left_moto_stop21 ;                 //左電機(jī)
  200.          Right_moto_stop21 ;         //右電機(jī)

  201.          Left_moto_stop22 ;                 //左電機(jī)
  202.          Right_moto_stop22 ;         //右電機(jī)         
  203.          }

  204.      else if(P20==1&&P21==0&&P22==1)                //中間測到        //前進(jìn)函數(shù)
  205. {
  206.                 TR1=1;
  207.      push_val_left  =9;  //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快  改這個值可以改變其速度
  208.          push_val_right =9;         //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快         改這個值可以改變其速度

  209.          push_val_left2  =9;  //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快  改這個值可以改變其速度
  210.          push_val_right2 =9;         //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快         改這個值可以改變其速度
  211.        Left_moto_go ;                 //停止
  212.            Right_moto_go ;         

  213.            Left_moto_go2 ;               
  214.            Right_moto_go2 ;       
  215.            push_val_left  =4;  //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快  改這個值可以改變其速度
  216.          push_val_right =4;         //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快         改這個值可以改變其速度

  217.          push_val_left2  =4;  //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快  改這個值可以改變其速度
  218.          push_val_right2 =4;         //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快         改這個值可以改變其速度
  219.        Left_moto_go ;                 //停止
  220.            Right_moto_go ;         

  221.            Left_moto_go2 ;               
  222.            Right_moto_go2 ;       

  223.          
  224. }
  225.         else if(P20==0&&P21==1&&P22==1)                 //左邊測到
  226. {
  227.          TR1=1;
  228.          push_val_left  =7;  //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快  改這個值可以改變其速度
  229.          push_val_right =7;         //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快         改這個值可以改變其速度

  230.          push_val_left2  =7;  //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快  改這個值可以改變其速度
  231.          push_val_right2 =7;         //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快         改這個值可以改變其速度

  232.          Right_moto_go;
  233.          Right_moto_go2;
  234.          Left_moto_back;
  235.          Left_moto_back2;
  236.          
  237. }
  238.         else if(P20==1&&P21==1&&P22==0)                 //右邊測到
  239. {
  240.          TR1=1;
  241.          push_val_left  =7;  //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快  改這個值可以改變其速度
  242.          push_val_right =7;         //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快         改這個值可以改變其速度

  243.          push_val_left2  =7;  //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快  改這個值可以改變其速度
  244.          push_val_right2 =7;         //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快         改這個值可以改變其速度
  245.          Right_moto_back;
  246.          Right_moto_back2;
  247.          Left_moto_go;
  248.          Left_moto_go2;
  249.          
  250. }
  251.             else if(P20==0&&P21==0&&P22==1)                 //左兩測到
  252.          {
  253.                  TR1=1;
  254.      push_val_left  =8;  //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快  改這個值可以改變其速度
  255.          push_val_right =8;         //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快         改這個值可以改變其速度

  256.          push_val_left2  =8;  //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快  改這個值可以改變其速度
  257.          push_val_right2 =8;         //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快         改這個值可以改變其速度
  258.        Left_moto_go ;                 //停止
  259.            Right_moto_go ;         

  260.            Left_moto_go2 ;               
  261.            Right_moto_go2 ;       
  262.            push_val_left  =3;  //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快  改這個值可以改變其速度
  263.          push_val_right =3;         //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快         改這個值可以改變其速度

  264.          push_val_left2  =3;  //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快  改這個值可以改變其速度
  265.          push_val_right2 =3;         //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快         改這個值可以改變其速度
  266.        Left_moto_go ;                 //停止
  267.            Right_moto_go ;         

  268.            Left_moto_go2 ;               
  269.            Right_moto_go2 ;       
  270.          }
  271.          else if(P20==1&&P21==0&&P22==0)         //右兩測到
  272.          {
  273.            TR1=1;
  274.      push_val_left  =8;  //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快  改這個值可以改變其速度
  275.          push_val_right =8;         //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快         改這個值可以改變其速度

  276.          push_val_left2  =8;  //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快  改這個值可以改變其速度
  277.          push_val_right2 =8;         //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快         改這個值可以改變其速度
  278.        Left_moto_go ;                 //停止
  279.            Right_moto_go ;         

  280.            Left_moto_go2 ;               
  281.            Right_moto_go2 ;       
  282.            push_val_left  =3;  //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快  改這個值可以改變其速度
  283.          push_val_right =3;         //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快         改這個值可以改變其速度

  284.          push_val_left2  =3;  //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快  改這個值可以改變其速度
  285.          push_val_right2 =3;         //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快         改這個值可以改變其速度
  286.        Left_moto_go ;                 //停止
  287.            Right_moto_go ;         

  288.            Left_moto_go2 ;               
  289.            Right_moto_go2 ;       
  290.      }
  291. }                        



  292. /************************************************************************/
  293. /*                    PWM調(diào)制電機(jī)轉(zhuǎn)速                                   */
  294. /************************************************************************/
  295. /*                    左電機(jī)調(diào)速                                        */
  296. /*調(diào)節(jié)push_val_left的值改變電機(jī)轉(zhuǎn)速,占空比            */
  297.                 void pwm_out_left_moto(void)
  298. {  
  299.    if(Left_moto_stop)
  300.    {
  301.     if(pwm_val_left<=push_val_left)
  302.                Left_moto_pwm=1;
  303.         else
  304.                Left_moto_pwm=0;
  305.         if(pwm_val_left>=20)
  306.         pwm_val_left=0;
  307.    }
  308.    else  Left_moto_pwm=0;
  309. }
  310. /******************************************************************/
  311. /*                    右電機(jī)調(diào)速                                  */  
  312.    void pwm_out_right_moto(void)
  313. {
  314.   if(Right_moto_stop)
  315.    {
  316.     if(pwm_val_right<=push_val_right)
  317.                Right_moto_pwm=1;
  318.         else
  319.                Right_moto_pwm=0;
  320.         if(pwm_val_right>=20)
  321.         pwm_val_right=0;
  322.    }
  323.    else    Right_moto_pwm=0;
  324. }

  325. /************************************************************************/
  326. /*    222222                2PWM調(diào)制電機(jī)轉(zhuǎn)速2                                   */
  327. /************************************************************************/
  328. /*                    左電機(jī)調(diào)速                                        */
  329. /*調(diào)節(jié)push_val_left的值改變電機(jī)轉(zhuǎn)速,占空比            */
  330.                 void pwm_out_left_moto2(void)
  331. {  
  332.    if(Left_moto_stop2)
  333.    {
  334.     if(pwm_val_left2<=push_val_left2)
  335.                Left_moto_pwm2=1;
  336.         else
  337.                Left_moto_pwm2=0;
  338.         if(pwm_val_left2>=20)
  339.         pwm_val_left2=0;
  340.    }
  341.    else  Left_moto_pwm2=0;
  342. }
  343. /******************************************************************/
  344. /*                    右電機(jī)調(diào)速                                  */  
  345.    void pwm_out_right_moto2(void)
  346. {
  347.   if(Right_moto_stop2)
  348.    {
  349.     if(pwm_val_right2<=push_val_right2)
  350.                Right_moto_pwm2=1;
  351.         else
  352.                Right_moto_pwm2=0;
  353.         if(pwm_val_right2>=20)
  354.         pwm_val_right2=0;
  355.    }
  356.    else    Right_moto_pwm2=0;
  357. }

  358. /***************************************************/
  359. ///*TIMER0中斷服務(wù)子函數(shù)產(chǎn)生PWM信號*/
  360.         void timer0()interrupt 1   using 2
  361. {
  362.      TH0=0Xfe;          //0.1Ms定時
  363.          TL0=0Xa3;
  364.          time++;
  365.          pwm_val_left++;
  366.          pwm_val_right++;
  367.          pwm_out_left_moto();
  368.          pwm_out_right_moto();

  369.          pwm_val_left2++;
  370.          pwm_val_right2++;
  371.          pwm_out_left_moto2();
  372.          pwm_out_right_moto2();

  373. }

  374. /***************************************************/


  375. /**********************循跡程序*****************************/

  376.         void main(void)
  377. {

  378.         TMOD=0X11;
  379.         TH0= 0Xfe;                  //0.1ms定時
  380.         TL0= 0Xa3;

  381.         TH1=(65536-45872)/256;
  382.         TL1=(65536-45872)%256;
  383.         EA = 1;                        //中斷總開關(guān)       
  384.         TR0= 1;
  385.         ET0= 1;
  386. //        TR1=1;
  387.         ET1=1;
  388.                   
  389. ……………………

  390. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
yyb.zip (3.08 KB, 下載次數(shù): 88)


評分

參與人數(shù) 2黑幣 +55 收起 理由
liuyanga + 5 共享資料的黑幣獎勵!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:342305 發(fā)表于 2018-6-19 11:00 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報

板凳
ID:342305 發(fā)表于 2018-6-19 11:01 | 只看該作者
想問一下樓主有小車的照片嗎?還有這個模塊用的是那種的啊?》
回復(fù)

使用道具 舉報

地板
ID:356953 發(fā)表于 2018-6-23 10:36 | 只看該作者
我們之前做電子產(chǎn)品設(shè)計大賽的時候做的就是這個
回復(fù)

使用道具 舉報

5#
ID:379274 發(fā)表于 2018-7-26 20:19 來自手機(jī) | 只看該作者
這是用的ldc1000和52實(shí)現(xiàn)的么???
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品国产乱码久久久久久88av | 成人在线视频网 | 在线观看特色大片免费网站 | 欧美日韩免费一区二区三区 | 欧美黑人激情 | 国产日韩欧美一区二区在线播放 | 视频精品一区二区三区 | 亚洲精品久久久久久久久久久久久 | 国产一区二区影院 | 欧美6一10sex性hd | 久一久| 在线播放国产一区二区三区 | 一区二区三区视频在线观看 | 亚洲综合国产 | 国产情侣久久 | 91综合网 | 久久久久综合 | 久久精品国产一区二区 | 2019精品手机国产品在线 | 欧美日韩中文字幕在线 | 黄色毛片在线观看 | 中文字幕在线网 | 一级欧美一级日韩片免费观看 | 国产精品亚洲第一 | 成年人视频免费在线观看 | 色噜噜亚洲男人的天堂 | 亚州视频在线 | 91丨国产| 久久久久成人精品免费播放动漫 | 中文字幕人成人 | a级在线观看 | 国产日韩一区二区 | 亚洲精品视频在线 | 午夜影院| 国产一区二区三区高清 | 国产精品1区2区3区 国产在线观看一区 | 亚洲伊人久久综合 | 毛片站 | 日韩av在线免费 | 国产色99精品9i | 欧洲视频一区 |