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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

自己寫的51單片機(jī)智能車程序 不懂得可以問我

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:493513 發(fā)表于 2019-3-18 20:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
不涉及路口判斷

單片機(jī)源程序如下:
  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. //電機(jī)控制端口          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++;                     //進(jìn)入中斷自加

  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. //前進(jìn)
  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,前進(jìn)
  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)



評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:314803 發(fā)表于 2019-5-20 16:21 | 只看該作者
有原理圖哇?
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91极品视频| 91传媒在线观看 | 在线不卡 | 国内自拍真实伦在线观看 | 日韩黄色av | 91成人在线 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 九九视频网 | 黄频免费 | 福利二区 | 国产成人精品免高潮在线观看 | 久久精品高清视频 | 亚洲欧美日韩精品久久亚洲区 | 三级av在线 | 日韩一区二区三区在线播放 | 国产9 9在线 | 中文 | 精品国产精品三级精品av网址 | wwwxxx日本在线观看 | 国产精品一区二区视频 | 国产精品视频在线观看 | 婷婷色网 | 精品一区二区三区电影 | 亚洲一区二区三区国产 | 日韩中文字幕高清 | 亚洲欧美精品国产一级在线 | 国产精品乱码一二三区的特点 | 爱爱爱av| 欧美日韩精品久久久免费观看 | 国产精品久久久久久妇女6080 | 国户精品久久久久久久久久久不卡 | 日韩欧美精品在线播放 | 91精品国产91久久久久久三级 | 国产在线www | 欧美日韩精品一区二区三区四区 | 国产高清视频在线观看 | 国产农村妇女毛片精品久久麻豆 | 日韩一级免费看 | 国产超碰人人爽人人做人人爱 | 波多野结衣精品在线 | 成人性生交大片免费看中文带字幕 | 日韩看片 |