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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1983|回復: 0
收起左側

51單片機小車控制系統源代碼

[復制鏈接]
ID:394085 發表于 2020-2-10 20:47 | 顯示全部樓層 |閱讀模式
  1. #include <STC15F2K60S2.H>
  2. #include "stdio.h"

  3. #include "intrins.h"


  4. sbit DJ1=P2^4;//L298N  IN1
  5. sbit DJ2=P2^5;//L298N  IN2
  6. sbit DJ3=P2^6;//L298N  IN3
  7. sbit DJ4=P2^7;//L298N  IN4


  8. sbit tirg=P0^5;//超聲波
  9. sbit tur=P0^6;//舵機
  10. sbit echo=P0^7;//超聲波

  11. void forward(){          //直走
  12.         DJ1=1;DJ2=0;
  13.   DJ3=0;DJ4=1;
  14. }

  15. void back(){          //直走
  16.         DJ1=0;DJ2=1;
  17.   DJ3=1;DJ4=0;
  18. }
  19. void stop(){          //停止
  20.         DJ1=1;DJ2=1;
  21.         DJ3=1;DJ4=1;
  22. }
  23. void right(){          //右轉
  24.         DJ1=1;DJ2=0;
  25.         DJ3=1;DJ4=1;
  26. }
  27. void D_right(){          //大右轉
  28.         DJ1=1;DJ2=0;
  29.         DJ3=1;DJ4=0;
  30. }
  31. void left(){          //左轉
  32.         DJ1=1;DJ2=1;
  33.         DJ3=0;DJ4=1;
  34. }
  35. void D_left(){          //大左轉
  36.         DJ1=0;DJ2=1;
  37.         DJ3=0;DJ4=1;
  38. }

  39. void UartInit(void)                //9600bps@11.0592MHz
  40. {
  41.         PCON &= 0x7F;                //波特率不倍速
  42.         SCON = 0x50;                //8位數據,可變波特率
  43.         AUXR &= 0xBF;                //定時器1時鐘為Fosc/12,即12T
  44.         AUXR &= 0xFE;                //串口1選擇定時器1為波特率發生器
  45.         TMOD &= 0x0F;                //清除定時器1模式位
  46.         TMOD |= 0x20;                //設定定時器1為8位自動重裝方式
  47.         TL1 = 0xFD;                //設定定時初值
  48.         TH1 = 0xFD;                //設定定時器重裝值
  49.         ET1 = 0;                //禁止定時器1中斷
  50.         TR1 = 1;                //啟動定時器1
  51.         ES=1;
  52.         EA=1;
  53. }
  54. void timer0_init()
  55. {
  56.         TMOD=0x05;
  57.         TH0=0;
  58.         TL0=0;
  59.         TR0=1;
  60. }
  61. void Timer2Init(void)                //0微秒@11.0592MHz
  62. {
  63.         AUXR &= 0xFB;                //定時器時鐘12T模式
  64.         T2L = 0x00;                //設置定時初值
  65.         T2H = 0x00;                //設置定時初值
  66.         AUXR |= 0x10;                //定時器2開始計時
  67.         IE2 |= 0x04;
  68.         EA=1;
  69. }
  70. unsigned char refresh=0;
  71. unsigned short x;

  72. bit sendflags=1;
  73. void senddata(unsigned short datt,unsigned short  distance)//數據包發送
  74. {
  75.         sendflags=1;
  76.         SBUF=1;
  77.         while(sendflags);
  78.         sendflags=1;
  79.         SBUF=2;
  80.         while(sendflags);
  81.         sendflags=1;
  82.         SBUF=3;
  83.         while(sendflags);
  84.         sendflags=1;
  85.         SBUF=4;
  86.         while(sendflags);
  87.         sendflags=1;
  88.         SBUF=datt;
  89.         while(sendflags);
  90.                 sendflags=1;
  91.         SBUF=datt;
  92.         while(sendflags);
  93.                 sendflags=1;
  94.         SBUF=distance;
  95.         while(sendflags);
  96.                         sendflags=1;
  97.                 SBUF=(distance>>8);
  98.         while(sendflags);
  99. }
  100. //void timer4_3_init()
  101. //{
  102. //        T4T3M=0x8c;//timer4 定時器  timer3 計數器
  103. //        T4H=0;
  104. //        T4L=0;
  105. //        T3H=0;
  106. //        T3L=0;
  107. //}
  108. void Delay250ms()                //@11.0592MHz
  109. {
  110.         unsigned char i, j, k;

  111.         _nop_();
  112.         _nop_();
  113.         i = 11;
  114.         j = 130;
  115.         k = 111;
  116.         do
  117.         {
  118.                 do
  119.                 {
  120.                         while (--k);
  121.                 } while (--j);
  122.         } while (--i);
  123. }
  124. void Delay22us()                //@11.0592MHz
  125. {
  126.         unsigned char i;

  127.         _nop_();
  128.         i = 58;
  129.         while (--i);
  130. }

  131. bit isback=0;//后退標志位

  132. unsigned short motorturnround()//超聲波測距函數
  133. {
  134.         unsigned int j=0;
  135.         unsigned short  distance;
  136.         AUXR &= 0x7f;                //定時器2關閉
  137.         T2L = 0x00;                //設置定時初值
  138.         T2H = 0x00;                //設置定時初值
  139.         tirg=1;
  140.         Delay22us();
  141.         tirg=0;
  142.         while(!echo)
  143.         {
  144.                 j++;
  145.                 if(j>32000)
  146.                 {
  147.                         return 0;
  148.                 }
  149.         }
  150.         j=0;
  151.         AUXR |= 0x10;                //定時器2開始計時
  152.         while(echo)
  153.         {
  154.                         j++;
  155.                 if(j>32000)
  156.                 {
  157.                         return 0;
  158.                 }
  159.         }
  160.         distance=(T2H*256.0f+T2L)*17.0f/921.6f;//計算距離
  161.         return distance;
  162. }
  163. void Delay100us()                //@11.0592MHz
  164. {
  165.         unsigned char i, j;

  166.         _nop_();
  167.         _nop_();
  168.         i = 2;
  169.         j = 15;
  170.         do
  171.         {
  172.                 while (--j);
  173.         } while (--i);
  174. }
  175. unsigned char movaue=5;
  176. void turn()//舵機轉動
  177. {
  178.          unsigned char i;
  179.         tur=1;
  180.         for(i=0;i<movaue;i++)
  181.         {
  182.                 Delay100us();
  183.         }
  184.         tur=0;
  185. }
  186. void main()
  187. {
  188.         unsigned short datt=0;
  189.         timer0_init();
  190.         Timer2Init();
  191.         UartInit();
  192.         tirg=0;
  193.         tur=0;
  194.         while(1)
  195.         {
  196.                 if(refresh)
  197.                 {                       
  198.                         datt=motorturnround();
  199. //                        Delay250ms();
  200.                         x=x*13;
  201.                                
  202.                         if(isback)
  203.                         {
  204.                                 x=x|0x80;
  205.                         }
  206.                         senddata(x,datt);
  207.                         refresh=0;
  208.                         TH0=0;
  209.                         TL0=0;
  210.                         TR0=1;
  211.                         T2L = 0x00;                //設置定時初值
  212.                         T2H = 0x00;                //設置定時初值
  213.                         AUXR |= 0x10;                //定時器2開始計時
  214.                         turn();
  215.                 }
  216.        

  217.        
  218.         }
  219.        
  220. }

  221. char state=0;
  222. char iscontrolmode=1;//是否是控制模式不循跡可以不管
  223. char headercheck=0;
  224. void uart() interrupt 4
  225. {
  226.         if(RI==1)
  227.         {
  228.                 if(iscontrolmode)
  229.                 {
  230.                         if(!headercheck)
  231.                         {
  232.                         switch(state)//狀態解碼
  233.                         {
  234.                                 case 0:
  235.                                         if(SBUF==1)
  236.                                         {
  237.                                                 state++;
  238.                                         }
  239.                                        
  240.                                         break;
  241.                                                 case 1:
  242.                                         if(SBUF==2)
  243.                                         {
  244.                                                 state++;
  245.                                         }
  246.                                         else
  247.                                         {
  248.                                                 state=0;
  249.                                         }
  250.                                         break;
  251.                                                 case 2:
  252.                                         if(SBUF==3)
  253.                                         {
  254.                                                 state++;
  255.                                         }
  256.                                         else
  257.                                         {
  258.                                                 state=0;
  259.                                         }
  260.                                         break;
  261.                                                 case 3:
  262.                                         if(SBUF==4)
  263.                                         {
  264.                                                 state=0;
  265.                                                 headercheck=1;
  266.                                         }
  267.                                         else
  268.                                         {
  269.                                                 state=0;
  270.                                         }
  271.                                         break;
  272.                         }
  273.                 }
  274.                 else
  275.                 {
  276.                         switch(SBUF)
  277.                         {
  278.                                 case 66:
  279.                                         forward();
  280.                                 isback=0;
  281.                                         break;
  282.                                         case 62:
  283.                                                 back();
  284.                                         isback=1;
  285.                                         break;
  286.                                 case 44:
  287.                                                 D_left();
  288.                                 isback=0;
  289.                                         break;
  290.                                 case 47:
  291.                                         D_right();
  292.                                 isback=0;
  293.                                         break;
  294.                                 case 18:
  295.                                         stop();
  296.                                 isback=0;
  297.                                         break;
  298.                         }
  299.                         headercheck=0;
  300.                 }
  301.                         if(SBUF==6)//舵機相關
  302.                         {
  303.                                 if(movaue<24)
  304.                                 {
  305.                                         movaue++;
  306.                                 }
  307.                         }
  308.                         else
  309.                         {
  310.                                 if(SBUF==5)//舵機相關
  311.                                 {
  312.                                         if(movaue>5)
  313.                                         {
  314.                                                 movaue--;
  315.                                         }
  316.                                 }
  317.                         }
  318.                 }
  319.                
  320.                 RI=0;
  321.         }
  322.         if(TI==1)
  323.         {
  324.                 TI=0;
  325.                 sendflags=0;
  326.         }
  327. }
  328.         //67.22mm

  329. void t2_isr() interrupt 12 using 1//讀取計數值(用于測量速度)
  330. {
  331.         TR0=0;
  332.         x=TH0;
  333.         x=(x<<8)+TL0;
  334.         refresh=1;
  335.        
  336. }
復制代碼


藍牙遙控小車.7z

1.73 MB, 下載次數: 12, 下載積分: 黑幣 -5

評分

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

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 岛国av一区二区三区 | 欧美色图另类 | 91一区二区三区 | 亚洲国产免费 | 欧美理论| 国产九九精品 | 日韩av一区二区在线观看 | 日韩欧美中文字幕在线观看 | 激情网站在线观看 | 亚洲视频在线观看免费 | 先锋av资源网 | 超碰激情 | 久久精品视频在线观看 | 欧美日韩国产在线观看 | 欧美久久久久 | av在线一区二区三区 | 成人片网址 | 一区二区视频 | 成人av电影天堂 | 亚洲第一天堂 | 国产精品久久影院 | 日韩精品专区在线影院重磅 | 午夜在线视频 | 一区二区三区回区在观看免费视频 | 中文字幕国产一区 | 欧美成年黄网站色视频 | 日日干日日色 | 午夜精品一区二区三区在线视 | 中文字幕一区二区三区不卡 | 精品免费国产一区二区三区 | 狠狠爱免费视频 | 精品国产一区二区三区久久狼黑人 | 四虎网站在线观看 | 久久精品久久综合 | 96av麻豆蜜桃一区二区 | 欧美日本韩国一区二区三区 | 免费成人av| 久久狼人天堂 | 日韩成人在线观看 | 五月免费视频 | 日韩欧美理论片 |