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

標(biāo)題: 自己寫的51單片機智能車程序 不懂得可以問我 [打印本頁]

作者: HandsomeV    時間: 2019-3-18 20:46
標(biāo)題: 自己寫的51單片機智能車程序 不懂得可以問我
不涉及路口判斷

單片機源程序如下:
  1. #include<reg52.h>
  2. typedef unsigned char u8;
  3. typedef unsigned int  u16;

  4. //占空比標(biāo)志
  5. u8 ZKB_QZ,ZKB_QY,ZKB_HZ,ZKB_HY,Q_Z,Q_Y,H_Z,H_Y;

  6. //電機控制端口          P1
  7. sbit IN1=P1^0;           //前 左 反轉(zhuǎn)                                       
  8. sbit IN2=P1^1;           //前 左 正轉(zhuǎn)  
  9. sbit IN3=P1^2;           //前 右 正轉(zhuǎn)
  10. sbit IN4=P1^3;           //前 右 反轉(zhuǎn)
  11. sbit IN11=P1^4;           //后 右 反轉(zhuǎn)
  12. sbit IN22=P1^5;           //后 右 正轉(zhuǎn)
  13. sbit IN33=P1^6;           //后 左 正轉(zhuǎn)
  14. sbit IN44=P1^7;           //后 左 反轉(zhuǎn)

  15. //紅外傳感器          P3
  16. sbit hw_left=P3^7;
  17. sbit hw_mid=P3^6;
  18. sbit hw_right=P3^5;

  19. //PWM調(diào)速端口           P0
  20. sbit PWM_QZ=P0^1;  //前 左
  21. sbit PWM_QY=P0^2;  //前 右
  22. sbit PWM_HZ=P0^3;  //后 左               
  23. sbit PWM_HY=P0^4;  //后 右

  24. //延時函數(shù)
  25. void delay(u16 num)
  26. {
  27.   u16 x,y;
  28.   for(x=num;x>0;x--)
  29.   for(y=110;y>0;y--)
  30.   {
  31.   ;                                         
  32.   }
  33. }

  34. //定時器           初始化函數(shù)
  35. void Z_D()          
  36. {
  37.         TMOD=0x01;
  38.         TH0=(65536-100)/256;
  39.         TL0=(65536-100)%256        ;
  40.         EA=1;
  41.         ET0=1;
  42.         TR0=1;
  43.         PWM_QZ=1;  
  44.     PWM_QY=1;  
  45.     PWM_HZ=1;                 
  46.     PWM_HY=1;  
  47. }

  48. //中斷服務(wù)函數(shù)                          
  49. void time_service(void) interrupt 1   
  50. {
  51.         Q_Z++,Q_Y++,H_Z++,H_Y++;                     //進入中斷自加

  52.     //前 右
  53.         if(Q_Y<ZKB_QY)                                                 //如果小于設(shè)定值,使能端置1,否則置0
  54.         {
  55.           PWM_QY=1;
  56.         }                
  57.         else {PWM_QY=0;}
  58.         if(Q_Y==40)                                                         //如果i加到40;使能端取反,i置0
  59.         {
  60.              PWM_QY=~PWM_QY;
  61.           Q_Y=0;
  62.         }  
  63.        
  64.         //前 左                                                                                  
  65.         if(Q_Z<ZKB_QZ)                                                 //如果小于設(shè)定值,使能端置1,否則置0
  66.         {
  67.           PWM_QZ=1;
  68.         }                
  69.         else {PWM_QZ=0;}
  70.         if(Q_Z==40)                                                         //如果i加到40;使能端取反,i置0
  71.         {
  72.              PWM_QZ=~PWM_QZ;
  73.           Q_Z=0;
  74.         }  
  75.        
  76.         //后 右
  77.         if(H_Y<ZKB_HY)                                                 //如果小于設(shè)定值,使能端置1,否則置0
  78.         {
  79.           PWM_HY=1;
  80.         }                                                                
  81.         else {PWM_HY=0;}
  82.         if(H_Y==40)                                                         //如果i加到40;使能端取反,i置0
  83.         {
  84.              PWM_HY=~PWM_HY;
  85.           H_Y=0;
  86.         }  
  87.        
  88.     //后 左
  89.         if(H_Z<ZKB_HZ)                                                 //如果小于設(shè)定值,使能端置1,否則置0
  90.         {
  91.           PWM_HZ=1;
  92.         }                                                                
  93.         else {PWM_HZ=0;}
  94.         if(H_Z==40)                                                         //如果i加到40;使能端取反,i置0
  95.         {
  96.              PWM_HZ=~PWM_HZ;
  97.           H_Z=0;
  98.         }         
  99.         //定時器0重裝初值
  100.         TH0=(65536-100)/256;          
  101.         TL0=(65536-100)%256;
  102. }

  103. //前進
  104. void go()       
  105. {
  106.           ZKB_QZ=13;
  107.         ZKB_QY=8;
  108.         ZKB_HZ=15;
  109.         ZKB_HY=8;
  110.        
  111.          IN2=1;               //前 左 正轉(zhuǎn)            
  112.      IN3=1;               //前 右 正轉(zhuǎn)
  113.          IN22=0;           //后 右 正轉(zhuǎn)
  114.      IN33=0;       //后 左 正轉(zhuǎn)
  115.          
  116.          IN1=0;               //前 左 反轉(zhuǎn)
  117.          IN4=0;               //前 右 反轉(zhuǎn)
  118.      IN11=1;           //后 右 反轉(zhuǎn)
  119.      IN44=1;           //后 左 反轉(zhuǎn)
  120. }
  121. //后退
  122. void back()       
  123. {
  124.         ZKB_QZ=6;
  125.         ZKB_QY=6;
  126.         ZKB_HZ=6;
  127.         ZKB_HY=6;
  128.        
  129.          IN2=0;               //前 左 正轉(zhuǎn)            
  130.      IN3=0;               //前 右 正轉(zhuǎn)
  131.          IN22=1;           //后 右 正轉(zhuǎn)
  132.      IN33=1;       //后 左 正轉(zhuǎn)
  133.          
  134.          IN1=1;               //前 左 反轉(zhuǎn)
  135.          IN4=1;               //前 右 反轉(zhuǎn)
  136.      IN11=0;           //后 右 反轉(zhuǎn)
  137.      IN44=0;           //后 左 反轉(zhuǎn)
  138. }
  139. //右轉(zhuǎn)
  140. void right()       
  141. {
  142.         do
  143.         {
  144.         ZKB_QZ=15;
  145.         ZKB_QY=35;
  146.         ZKB_HZ=15;
  147.         ZKB_HY=35;
  148.        
  149.          IN2=0;               //前 左 反轉(zhuǎn)            
  150.      IN3=1;               //前 右 反轉(zhuǎn)
  151.          IN22=0;           //后 右 反轉(zhuǎn)
  152.      IN33=1;       //后 左 反轉(zhuǎn)
  153.          
  154.          IN1=1;               //前 左 正轉(zhuǎn)
  155.          IN4=0;               //前 右 正轉(zhuǎn)
  156.      IN11=1;           //后 右 正轉(zhuǎn)
  157.      IN44=0;           //后 左 正轉(zhuǎn)
  158.         }
  159.         while(hw_mid==1);
  160. }
  161. //左轉(zhuǎn)
  162. void left()       
  163. {
  164.         do
  165.         {
  166.         ZKB_QZ=15;
  167.         ZKB_QY=35;
  168.         ZKB_HZ=15;
  169.         ZKB_HY=35;
  170.        
  171.          IN2=1;               //前 左 反轉(zhuǎn)            
  172.      IN3=0;               //前 右 反轉(zhuǎn)
  173.          IN22=1;           //后 右 反轉(zhuǎn)
  174.      IN33=0;       //后 左 反轉(zhuǎn)
  175.          
  176.          IN1=0;               //前 左 正轉(zhuǎn)
  177.          IN4=1;               //前 右 正轉(zhuǎn)
  178.      IN11=0;           //后 右 正轉(zhuǎn)
  179.      IN44=1;           //后 左 正轉(zhuǎn)
  180.          }
  181.          while(hw_mid==1);
  182. }
  183. void stop()                   //停止函數(shù)
  184. {
  185.          IN2=0;               //前 左 正轉(zhuǎn)            
  186.      IN3=0;               //前 右 正轉(zhuǎn)
  187.          IN22=0;           //后 右 正轉(zhuǎn)
  188.      IN33=0;       //后 左 正轉(zhuǎn)
  189.          
  190.          IN1=0;               //前 左 反轉(zhuǎn)
  191.          IN4=0;               //前 右 反轉(zhuǎn)
  192.      IN11=0;           //后 右 反轉(zhuǎn)
  193.      IN44=0;           //后 左 反轉(zhuǎn)
  194. }
  195. void go_rignt()
  196. {
  197.         ZKB_QZ=5;
  198.         ZKB_QY=5;
  199.         ZKB_HZ=5;
  200.         ZKB_HY=5;
  201.        
  202.          IN2=1;               //前 左 反轉(zhuǎn)            
  203.      IN3=0;               //前 右 反轉(zhuǎn)
  204.          IN22=1;           //后 右 反轉(zhuǎn)
  205.      IN33=0;       //后 左 反轉(zhuǎn)
  206.          
  207.          IN1=0;               //前 左 正轉(zhuǎn)
  208.          IN4=1;               //前 右 正轉(zhuǎn)
  209.      IN11=0;           //后 右 正轉(zhuǎn)
  210.      IN44=1;           //后 左 正轉(zhuǎn)
  211. }
  212. void go_left()
  213. {
  214.         ZKB_QZ=5;
  215.         ZKB_QY=5;
  216.         ZKB_HZ=5;
  217.         ZKB_HY=5;
  218.        
  219.          IN2=0;               //前 左 反轉(zhuǎn)            
  220.      IN3=1;               //前 右 反轉(zhuǎn)
  221.          IN22=0;           //后 右 反轉(zhuǎn)
  222.      IN33=1;       //后 左 反轉(zhuǎn)
  223.          
  224.          IN1=1;               //前 左 正轉(zhuǎn)
  225.          IN4=0;               //前 右 正轉(zhuǎn)
  226.      IN11=1;           //后 右 正轉(zhuǎn)
  227.      IN44=0;           //后 左 正轉(zhuǎn)
  228. }
  229. void huigui()
  230. {
  231.   u8 num;       
  232.           for(num=2;num>0;num--)
  233.                 {
  234.                           if(hw_left==0 & hw_mid==1 & hw_right==1)                                  
  235.                        {
  236.                        go_rignt();
  237.                     }
  238.                         if(hw_left==1 & hw_mid==1 & hw_right==0)                                  
  239.                        {
  240.                         go_left();
  241.                        }
  242.                
  243.                 }
  244. }
  245. void X_J()         //循跡函數(shù)
  246. {
  247.         u8 P_D;                                                             //定義判斷
  248.         //未檢測到黑線
  249.         if(hw_left==1 & hw_mid==1 & hw_right==1)
  250.         {
  251.             P_D=0;
  252.         }                                                                                                                       
  253.         //中間檢測到黑線
  254.         if(hw_left==1 & hw_mid==0 & hw_right==1)                                  
  255.            {
  256.           P_D=1;
  257.         }
  258.         //左面檢測到黑線
  259.         if(hw_left==0 & hw_mid==1 & hw_right==1)                                  
  260.            {
  261.           P_D=2;
  262.         }
  263.         //右面檢測到黑線
  264.         if(hw_left==1 & hw_mid==1 & hw_right==0)                                  
  265.            {
  266.           P_D=3;
  267.         }
  268.         //全部都檢測到黑線后退
  269.         if(hw_left==0 & hw_mid==0 & hw_right==0)                                  
  270.            {
  271.           P_D=4;
  272.         }     
  273.         //中間和左面檢測到黑線
  274.         if(hw_left==0 & hw_mid==0 & hw_right==1)                                  
  275.            {
  276.           P_D=5;
  277.         }  
  278.         //中間和右面檢測到黑線
  279.         if(hw_left==1 & hw_mid==0 & hw_right==0)                                  
  280.            {
  281.           P_D=6;
  282.         }  
  283.         switch (P_D)
  284.         {                                  
  285.                 case 0: huigui();break;        //情況0,停止
  286.                 case 1: go();    break;        //情況1,前進
  287.                 case 2: left();  break;        //情況2,左轉(zhuǎn)
  288.                 case 3: right(); break;        //情況3,右轉(zhuǎn)
  289.                 case 4:        back();         break; //情況4,后退
  290.             case 5:        left();         break; //情況5,左轉(zhuǎn)
  291.             case 6:        right(); break; //情況6,右轉(zhuǎn)
  292.         }
  293. }
  294. //主函數(shù)
  295. void main()
  296. {
  297.         Z_D();
  298.         delay(5);
  299.         while(1)
  300.         {
  301.           X_J();
  302.         }
  303. }
復(fù)制代碼

所有資料51hei提供下載:
main.zip (1.73 KB, 下載次數(shù): 17)




作者: 陳軍123    時間: 2019-5-20 16:21
有原理圖哇?




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产免费视频 | www.亚洲一区| 日韩一区二区三区视频 | 91一区二区三区 | 色婷婷av99xx | 干狠狠 | 中文字幕高清av | 综合色在线 | 久久精品伊人 | 日韩成人在线看 | 91激情视频| 91影院在线观看 | 韩日在线视频 | 国产精品久久一区二区三区 | 玖玖玖在线观看 | 久久久久久久久久久久久久国产 | www.五月婷婷.com | 免费在线看黄 | 影视一区 | 国产精品久久午夜夜伦鲁鲁 | 日韩福利 | 日韩图区 | 欧美精品一区二区在线观看 | 欧美精品一区二区三区四区 在线 | 亚洲精品观看 | 一区二区三区日韩精品 | 久久久久久久久淑女av国产精品 | www.伊人.com| 国产精品精品视频一区二区三区 | 亚洲视频手机在线 | 亚洲欧美日韩精品 | 天天搞天天搞 | 欧美黄色片在线观看 | 草草草影院 | 亚洲视频中文字幕 | 天堂亚洲网 | 日韩国产一区二区三区 | caoporon| 欧美精品a∨在线观看不卡 国产精品久久国产精品 | 亚洲 成人 在线 | 男女下面一进一出网站 |