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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1580|回復: 0
打印 上一主題 下一主題
收起左側

自制遙控機器人的單片機代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:376157 發(fā)表于 2018-11-12 21:55 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
可以遙控撿東西,用手機藍牙軟件控制移動,也可以讓它自主撿東西,紅外避障,外加pwm調速


單片機源程序如下:
  1. /**************************************************************************************
  2. *                              LED流水燈實驗                                                                                                  *
  3. 實現現象:下載程序后LED呈現流水燈效果進行左移右移滾動
  4. 注意事項:無       
  5. 手機遙控時按鍵設置如下:
  6. 前進 1 0
  7. 后退 2 0
  8. 左轉 3 0
  9. 右轉 4 0
  10. 發(fā)球 7 8
  11. 收球 5 6
  12. ***************************************************************************************/

  13. #include "reg52.h"                         //此文件中定義了單片機的一些特殊功能寄存器
  14. #include<intrins.h>                //因為要用到左右移函數,所以加入這個頭文件

  15. typedef unsigned int u16;          //對數據類型進行聲明定義
  16. typedef unsigned char u8;

  17. sbit L_11=P1^4;
  18. sbit L_12=P1^5;
  19. sbit R_21=P1^6;
  20. sbit R_22=P1^7;       

  21. sbit shou1=P2^2;
  22. sbit shou2=P2^3;

  23. sbit fa1=P2^6;
  24. sbit fa2=P2^7;

  25. sbit left_PWM1=P1^5;
  26. sbit right_PWM2=P1^7;
  27. sbit shou_PWM=P2^3;   //定義PWM端口

  28. sbit led1=P1^0;
  29. sbit led2=P1^1;
  30. sbit led3=P1^2;




  31. u16 timer1,timer2,timer3;

  32. #define left_run {L_11=0,L_12=1;}       //左輪正轉
  33. #define left_down {L_11=1,L_12=0;}      //左輪反轉
  34. #define left_stop {L_11=1,L_12=1;}      //左輪停止
  35. #define right_run {R_21=0,R_22=1;}      //右輪正轉
  36. #define right_down {R_21=1,R_22=0;}     //右輪反轉
  37. #define right_stop {R_21=1,R_22=1;}     //右輪停止

  38. #define shou_run {shou1=0,shou2=1;}
  39. #define shou_stop {shou1=1,shou2=1;}

  40. #define fa_run {fa1=0,fa2=1;}
  41. #define fa_stop {fa1=1,fa2=1;}



  42. /*******************************************************************************
  43. * 函 數 名         : delay
  44. * 函數功能                   : 延時函數,i=1時,大約延時10us
  45. *******************************************************************************/

  46. void delay(u16 k)
  47. {
  48.         while(k--);
  49. }

  50. void Timer1Init()   //定時器初始化
  51. {
  52.         TMOD|=0x01;      //選擇定時器1模式,工作方式1
  53.         TH0=0xFE;       //賦初值,定時0.5ms
  54.         TL0=0x0C;
  55.         ET1=1;           //打開定時器1中斷允許
  56.         EA=1;             //打開總中斷
  57. //        TR1=1;           //打開定時器
  58. }

  59. void UsartInit()
  60. {
  61. //        P2=0xff;
  62.         SCON=0X50;                        //設置為工作方式1
  63.         TMOD=0X20;                        //設置計數器工作方式2
  64.         PCON=0X80;                        //波特率加倍
  65.         TH1=0XF3;                                //計數器366初始值設置,注意波特率是4800的
  66.         TL1=0XF3;
  67.         IP=0X10;
  68.         ES=1;                                                //打開接收中斷
  69.         EA=1;                                                //打開總中斷
  70.         TR1=1;                                        //打開計數器
  71. }


  72. void left_PWM_fan(u16 j)         //PWM控制左輪轉速
  73. {
  74.         u16 timer1;
  75.         for(timer1=0;timer1<100;timer1++)
  76.         {
  77.                 if(timer1>100)          //PWM周期100*定時器周期
  78.                 {
  79.                         timer1=0;
  80.                 }
  81.                 if(timer1<j)           //調節(jié)占空比
  82.                 {
  83.                         left_PWM1=0;
  84.        
  85.                 }
  86.                 else
  87.                 {
  88.                         left_PWM1=1;
  89.        
  90.                 }
  91.         }
  92. }
  93. void shouq_PWM(u16 t)         //PWM控制左輪轉速
  94. {
  95.         u16 timer3;
  96.         for(timer3=0;timer3<200;timer3++)
  97.         {
  98.                 if(timer3>200)          //PWM周期100*定時器周期
  99.                 {
  100.                         timer3=0;
  101.                 }
  102.                 if(timer3<t)           //調節(jié)占空比
  103.                 {
  104.                         shou_PWM=1;
  105.        
  106.                 }
  107.                 else
  108.                 {
  109.                         shou_PWM=0;
  110.        
  111.                 }
  112.         }
  113. }
  114. void left_PWM_zheng(u16 k)         //PWM控制左輪轉速
  115. {
  116.         u16 timer1;
  117.         for(timer1=0;timer1<100;timer1++)
  118.         {
  119.                 if(timer1>100)          //PWM周期100*定時器周期
  120.                 {
  121.                         timer1=0;
  122.                 }
  123.                 if(timer1<k)           //調節(jié)占空比
  124.                 {
  125.                         left_PWM1=1;
  126.        
  127.                 }
  128.                 else
  129.                 {
  130.                         left_PWM1=0;
  131.        
  132.                 }
  133.         }
  134. }

  135. void right_PWM_fan(u16 q)         //PWM控制右輪轉速
  136. {
  137.         u16 timer2;
  138.         for(timer2=0;timer2<100;timer2++)
  139.         {
  140.                 if(timer2>100)
  141.                 {
  142.                         timer2=0;
  143.                 }
  144.                 if(timer2<q)
  145.                 {
  146.        
  147.                         right_PWM2=0;
  148.                 }
  149.                 else
  150.                 {

  151.                         right_PWM2=1;
  152.                 }
  153.         }
  154. }
  155. void right_PWM_zheng(u16 w)         //PWM控制右輪轉速
  156. {
  157.         u16 timer2;
  158.         for(timer2=0;timer2<100;timer2++)
  159.         {
  160.                 if(timer2>100)
  161.                 {
  162.                         timer2=0;
  163.                 }
  164.                 if(timer2<w)
  165.                 {
  166.        
  167.                         right_PWM2=1;
  168.                 }
  169.                 else
  170.                 {

  171.                         right_PWM2=0;
  172.                 }
  173.         }
  174. }
  175. /*******************************************************************************
  176. 需要改的數據中,所有含pwm的為調速所用
  177. 其余的為轉動角度或者行走距離
  178. 傳送帶的速度到時候看情況,實在不會找一波或我
  179. *******************************************************************************/
  180. ////////////////需要改的數字在left1循環(huán)里面,一共2個數字
  181. void left1(u16 i)             //調輪子轉速
  182. {
  183.         while(i--)
  184.         {
  185.           left_down;
  186.         left_PWM_fan(95);
  187.         right_run;
  188.         right_PWM_zheng(95);

  189.         }
  190. }
  191. void shouqiu()        //調風扇及傳送帶速度
  192. {
  193.                                 shou_run;
  194.                 shouq_PWM(120);
  195. }

  196. void shouqiuting()        //調風扇及傳送帶速度
  197. {
  198.                                 shou_stop;

  199. }
  200. void faqiu()
  201. {
  202.        
  203.         fa_run;
  204. }
  205. void fating()
  206. {
  207.         fa_stop;
  208. }
  209. ////////////////需要改的數字在right1循環(huán)里面,一共2個數字
  210. void right1(u16 i)         //調輪子轉速
  211. {
  212. while(i--)
  213. {
  214.                           left_run;
  215.         left_PWM_zheng(95);
  216.         right_down;
  217.         right_PWM_fan(95) ;

  218. }
  219.        
  220. }

  221. void stop()       //停止
  222. {

  223.        
  224.           left_stop;
  225.           right_stop;
  226.        
  227. }
  228. /////////////////需要改的數字在down1循環(huán)里面,一共2個數字
  229. void down1(u16 i)       //調輪子轉速
  230. {
  231.   while(i--)
  232.         {
  233.         left_down;
  234.         left_PWM_fan(78);
  235.         right_down;
  236.         right_PWM_fan(78) ;

  237.         }
  238. }
  239. ////////////////////////////////需要改的數字在run1循環(huán)里面,一共2個數字
  240. void run1()
  241. {

  242.                           left_run;
  243.         left_PWM_zheng(78);
  244.        
  245.         right_run;
  246.         right_PWM_zheng(78) ;

  247.        
  248. }

  249. void run2(u16 i)
  250. {
  251. while(i--)
  252. {
  253.                           left_run;
  254.         left_PWM_zheng(78);
  255.        
  256.         right_run;
  257.         right_PWM_zheng(78) ;
  258. }
  259. }
  260. void hongwai()
  261. {
  262.                                 if(led1==1&&led2==1&&led3==1)
  263.                         {
  264.                                 delay(10);
  265.                                 if(led1==1&&led2==1&&led3==1)
  266.                         {
  267.         run1();
  268.                                 delay(20);
  269.                         }
  270.                         }
  271.                         if(led1==1&&led2==0&&led3==1)
  272.                         {
  273.                                 delay(10);
  274.                                 if(led1==1&&led2==0&&led3==1)
  275.                                 {
  276.                                 left1(298);                    //轉動角度
  277.                                 run1();
  278.                                                 delay(20);
  279.                                 }
  280.                         }
  281.                         if(led1==1&&led2==1&&led3==0)
  282.                         {
  283.                                 delay(10);
  284.                                 if(led1==1&&led2==1&&led3==0)
  285.                         {
  286.                                 right1(298);                       //轉動角度
  287.                                 run1();
  288.                                         delay(20);
  289.                         }
  290.                 }
  291.                         if(led1==1&&led2==0&&led3==0)
  292.                         {
  293.                                 delay(10);
  294.                                 if(led1==1&&led2==0&&led3==0)
  295.                         {
  296.                                 right1(298);                       //轉動角度
  297.                                 run1();
  298.                                         delay(20);
  299.                         }
  300.                 }
  301. //                                else
  302. //                {
  303. //                        down1(150);                        //后退距離
  304. //                        left1(400);                       //轉動角度
  305. //                        run1();
  306. //          }
  307.                                         if(led1==0&&led2==1&&led3==1)
  308.                         {
  309.                                 delay(10);
  310.                                 if(led1==0&&led2==1&&led3==1)
  311.                         {
  312.                    down1(150);                        //后退距離
  313.                         left1(400);                       //轉動角度
  314.                         run1();
  315.                                 delay(20);
  316.                         }
  317.                         }
  318.                         if(led1==0&&led2==0&&led3==1)
  319.                         {
  320.                                 delay(10);
  321.                                 if(led1==0&&led2==0&&led3==1)
  322.                                 {
  323.                                                    down1(150);                        //后退距離
  324.                            left1(400);                       //轉動角度
  325.                             run1();
  326.                                                 delay(20);
  327.                                 }
  328.                         }
  329.                         if(led1==0&&led2==1&&led3==0)
  330.                         {
  331.                                 delay(10);
  332.                                 if(led1==0&&led2==1&&led3==0)
  333.                         {
  334.                                                    down1(150);                        //后退距離
  335.                         left1(400);                       //轉動角度
  336.                         run1();
  337.                                         delay(20);
  338.                         }
  339.                 }
  340.                         if(led1==0&&led2==0&&led3==0)
  341.                         {
  342.                                 delay(10);
  343.                                 if(led1==0&&led2==0&&led3==0)
  344.                         {
  345.                                                    down1(150);                        //后退距離
  346.                         left1(400);                       //轉動角度
  347.                         run1();
  348.                                         delay(20);
  349. }
  350. }
  351. }
  352. ///////////////////////////////////////////////////////////需要改的數字在while循環(huán)里面,一共四個數字
  353. void main()
  354. {
  355.         Timer1Init();
  356.         UsartInit();
  357.                 shouqiu();
  358.         while(1)
  359.         {
  360.      hongwai();
  361.                         }
  362.                 }
  363.        


  364. void Time0() interrupt 1     //中斷函數
  365. {
  366.         TH0=0xFE;
  367.         TL0=0x0C;
  368.         timer1++;
  369.         timer2++;
  370.         timer3++;
  371.        
  372. }

  373. void Usart() interrupt 4
  374. {// unsigned int i;
  375.         u8 receiveData;
  376.         RI = 0;//清除接收中斷標志位
  377.         receiveData=SBUF;//出去接收到的數據
  378.         SBUF=receiveData;//將接收到的數據放入到發(fā)送寄存器
  379.         switch(receiveData)
  380.                 {
  381.                 case '1':run2(50);break;//0xfe的字符碼
  382.                 case '7':faqiu();break;
  383.                         case '8':fating();break;
  384.                         case '2':down1(50);break;
  385.                         case '5':shouqiu();break;
  386.                         case '3':left1(50);break;
  387.                         case '6':shouqiuting();break;
  388.                         case '4':right1(50);break;                       
  389.                         case '0':stop();break;

  390.                 }
  391. ////                ES=1;
  392.           TI=0;                                                 //清除發(fā)送完成標志位
  393. }       
復制代碼

所有資料51hei提供下載:
sds.zip (52.77 KB, 下載次數: 8)



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

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美在线不卡 | 日韩国产高清在线观看 | 91香蕉视频在线观看 | 国产在线播 | 91亚洲国产成人久久精品网站 | 91大片| 久久精品无码一区二区三区 | 国产 日韩 欧美 中文 在线播放 | 天堂一区二区三区 | 99re热这里只有精品视频 | 综合网中文字幕 | 在线看亚洲 | 一级片网站视频 | 久久久久一区二区三区四区 | 97精品国产97久久久久久免费 | 亚洲在线中文字幕 | 国产一区精品在线 | 国产精品久久久爽爽爽麻豆色哟哟 | 亚洲精品乱码8久久久久久日本 | 黄色片网站在线观看 | 亚洲九九色 | 香蕉婷婷 | 亚洲一区久久 | 欧美精品一区二区三区在线 | 99视频在线免费观看 | 成人精品鲁一区一区二区 | 91精品一区二区三区久久久久久 | 国产精品乱码一二三区的特点 | 91看片网址 | 久久99网站 | 懂色tv| 男人av的天堂 | av免费网站在线观看 | 精品二区 | 国产在线一区二区三区 | 欧美国产精品久久久 | 亚洲网站在线观看 | 高清亚洲 | 一区二区av | 久草免费在线视频 | 九色网址 |