亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標(biāo)題: 單片機(jī)WiFi小車(chē)源程序 [打印本頁(yè)]

作者: wangchunpo    時(shí)間: 2017-4-25 10:37
標(biāo)題: 單片機(jī)WiFi小車(chē)源程序
單片機(jī)WiFi小車(chē)源程序


  1. #include<reg52.h>
  2. #include<math.h>
  3. #include<intrins.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. P0M1=0X00;
  7. P0M0=0XFF;//設(shè)置P0 為強(qiáng)推挽輸出


  8. uchar Buffer =0;      //從串口接收的數(shù)據(jù)
  9. uint URTAReceivedCount=0,n=1;
  10. uchar data Tempdatatable[5],CommandDatatable[5];//數(shù)據(jù)包


  11. uchar serVal[2];
  12. uint pwm[]={1120,1190,1382,1382,1382,1382,1382,500}; //初始90度,(實(shí)際是1382.4,取整得1382)
  13. uchar pwm_flag=0;
  14. uint code ms0_5Con=461; //0.5ms計(jì)數(shù) (實(shí)際是460.8,取整得461)461
  15. uint code ms2_5Con=2304; //2.5ms計(jì)數(shù)2304


  16. bit key_stime_ok;
  17. sbit StatusLight=P2^0; //狀態(tài)燈
  18. sbit MainLight=P2^1; //主大燈
  19. sbit servo0=P0^0;  //舵機(jī)控制
  20. sbit servo1=P0^1;
  21. sbit servo2=P0^2;
  22. sbit servo3=P0^3;
  23. sbit servo4=P0^4;
  24. sbit servo5=P0^5;
  25. sbit servo6=P0^6;
  26. sbit servo7=P0^7;
  27. sbit P1_0=P1^0;
  28. sbit P1_1=P1^1;
  29. sbit P1_2=P1^2;
  30. sbit P1_3=P1^3;
  31. /********************************************************************
  32. * 名稱(chēng) : Delay_1ms()
  33. * 功能 : 延時(shí)子程序,延時(shí)時(shí)間為 1ms * x
  34. * 輸入 : x (延時(shí)一毫秒的個(gè)數(shù))
  35. * 輸出 : 無(wú)
  36. ***********************************************************************/
  37. void Delay_1ms(uint i)//1ms延時(shí)
  38. {
  39. uint x,j;//uchar x,j;
  40. for(j=0;j<i;j++)
  41. for(x=0;x<=148;x++);
  42. }

  43. void TurnOnStatusLight()
  44. {   
  45.    StatusLight=0;
  46. }
  47. /********************************************************************
  48. * 名稱(chēng) : Send_Data()
  49. * 功能 : 向上位機(jī)傳送字符
  50. * 輸入 : 無(wú)
  51. * 輸出 : 無(wú)
  52. ***********************************************************************/
  53. void Send_Data(uchar type,uchar cmd,uchar dat)
  54. {
  55.    uchar data Buffer[5];//構(gòu)建數(shù)據(jù)包
  56.    uchar *p;
  57.    uint Send_Count=0;
  58.    p = Buffer;
  59.    Buffer[0]=0XFF;
  60.    Buffer[1]=type;
  61.    Buffer[2]=cmd;
  62.    Buffer[3]=dat;
  63.    Buffer[4]=0XFF;     
  64.   while(1)
  65.      {
  66.       if(*p==0XFF)
  67.         {
  68.          Send_Count++;  //0XFF標(biāo)志統(tǒng)計(jì)位
  69.         }
  70.       SBUF = *p;  //發(fā)送
  71.       while(!TI)  //如果發(fā)送完畢,硬件會(huì)置位TI,等待發(fā)送完畢
  72.            {
  73.              _nop_();
  74.            }
  75.       p++;
  76.       TI = 0;
  77.       if(Send_Count == 2)  //當(dāng)統(tǒng)計(jì)到兩次出現(xiàn)0XFF,則認(rèn)為一個(gè)數(shù)據(jù)包發(fā)送完畢,跳出循環(huán)
  78.         {
  79.          TI = 0;
  80.          break;
  81.         }  
  82.      }
  83. }
  84. /********************************************************************
  85. 協(xié)議規(guī)定:
  86. 包頭  類(lèi)型位  數(shù)據(jù)位 數(shù)據(jù)位   結(jié)束位
  87. 0XFF   0X**   OX**   0X**      0XFF
  88. 各命令說(shuō)明:
  89. 類(lèi)型位   數(shù)據(jù)位  數(shù)據(jù)位  功能

  90. 0X00       0X02  0X00    前進(jìn)
  91. 0X00       0X01  0X00    后退
  92. 0X00       0X03  0X00    左轉(zhuǎn)
  93. 0X00       0X04  0X00    右轉(zhuǎn)
  94. 0X00       0X00  0X00    停止

  95. 0X01       0X01  角度    舵機(jī)1
  96. 0X01       0X02    .     舵機(jī)2
  97. 0X01       0X01    .     舵機(jī)3
  98. 0X01       0X02    .     舵機(jī)4
  99. 0X01       0X01    .     舵機(jī)5
  100. 0X01       0X02    .     舵機(jī)6
  101. 0X01       0X01    .     舵機(jī)7
  102. 0X01       0X02  數(shù)據(jù)    舵機(jī)8

  103. 0X02       0X01     車(chē)燈亮
  104. 0X02       0X02     車(chē)燈滅

  105. 0X03      雷達(dá)數(shù)據(jù)   發(fā)送雷達(dá)數(shù)據(jù)
  106. ***********************************************************************/
  107. /********************************************************************
  108. * 名稱(chēng) : Com_Int()
  109. * 功能 : 串口中斷子函數(shù)
  110. ***********************************************************************/
  111. void Com_Int(void) interrupt 4
  112. {
  113. uchar temp;
  114. ES=0; //關(guān)串口中斷
  115. RI=0; //軟件清除接收中斷
  116. temp=SBUF;
  117.   if(temp==0XFF && URTAReceivedCount<3)
  118.      {
  119.        Tempdatatable[0]==0XFF;  //包頭
  120.        URTAReceivedCount++;
  121.      }
  122.   else
  123.      {
  124.        Tempdatatable[n]=temp;
  125.        n++;
  126.            if(URTAReceivedCount==0&&n==2)
  127.            n=1;
  128.      }

  129.   if(URTAReceivedCount==2)//包尾
  130.     {
  131.        Tempdatatable[0]=0XFF;
  132.        Tempdatatable[4]=0XFF;
  133.        n=1;
  134.        URTAReceivedCount=0;  //組包完畢
  135.        temp="";
  136.       // Send_Data(Tempdatatable[1],Tempdatatable[2],Tempdatatable[3]);  //發(fā)送組成的數(shù)據(jù)包回去
  137.     }

  138.   CommandDatatable[0]=Tempdatatable[0];
  139.   CommandDatatable[1]=Tempdatatable[1];
  140.   CommandDatatable[2]=Tempdatatable[2];
  141.   CommandDatatable[3]=Tempdatatable[3];
  142.   CommandDatatable[4]=Tempdatatable[4];

  143.   ES=1;//開(kāi)串口中斷
  144.   

  145. }

  146. /********************************************************************
  147. * 名稱(chēng) : Com_Init()
  148. * 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中斷
  149. ***********************************************************************/
  150. void Com_Init(void)
  151. {
  152.      TMOD = 0x21;
  153.      PCON = 0x00;
  154.      SCON = 0x50;   
  155.      TH1 = 0xFd;    //設(shè)置波特率 9600
  156.      TL1 = 0xFd;
  157.      TR1 = 1;  //啟動(dòng)定時(shí)器1
  158.      ES = 1;  //開(kāi)串口中斷
  159.      EA = 1;  //開(kāi)總中斷
  160.      IT0=0;
  161.      EX0=1;
  162. }

  163. /********************************************************************
  164. * 名稱(chēng) :Moto_Forward()
  165. * 功能 : 電機(jī)1、2啟動(dòng),都是前進(jìn),整車(chē)表現(xiàn)為前進(jìn)。
  166. ***********************************************************************/
  167. void Moto_Forward()
  168. {  
  169.    P1_0=0;
  170.    P1_1=1;
  171.    P1_2=1;
  172.    P1_3=0;
  173.    Delay_1ms(100);
  174. }
  175. /********************************************************************
  176. * 名稱(chēng) :Moto_Backward()
  177. * 功能 : 電機(jī)1、2啟動(dòng),都是后退,整車(chē)表現(xiàn)為后退。
  178. ***********************************************************************/
  179. void Moto_Backward()
  180. {
  181.   P1_0=1;
  182.   P1_1=0;
  183.   P1_2=0;
  184.   P1_3=1;
  185.   Delay_1ms(100);
  186. }

  187. /********************************************************************
  188. * 名稱(chēng) :Moto_TurnLeft()
  189. * 功能 : 前輪左轉(zhuǎn),后輪停止,整車(chē)表現(xiàn)為左轉(zhuǎn)。
  190. ***********************************************************************/
  191. void Moto_TurnLeft()
  192. {
  193.    P1_0=1;
  194.    P1_1=0;
  195.    P1_2=1;
  196.    P1_3=0;
  197.    Delay_1ms(100);
  198. }
  199. /********************************************************************
  200. * 名稱(chēng) :Moto_TurnRight()
  201. * 功能 : 前輪右轉(zhuǎn),后輪停止,整車(chē)表現(xiàn)為右轉(zhuǎn)。
  202. ***********************************************************************/
  203. void Moto_TurnRight()
  204. {
  205.   P1_0=0;
  206.   P1_1=1;
  207.   P1_2=0;
  208.   P1_3=1;
  209.   Delay_1ms(100);
  210. }
  211. /********************************************************************
  212. * 名稱(chēng) :Moto_L_F()
  213. * 功能 : 前輪左轉(zhuǎn),后輪前進(jìn),整車(chē)表現(xiàn)為左前。
  214. ***********************************************************************/
  215. void Moto_L_F()
  216. {
  217.   P1_0=0;
  218.   P1_1=1;
  219.   Delay_1ms(100);
  220. }
  221. /********************************************************************
  222. * 名稱(chēng) :Moto_R_F()
  223. * 功能 : 前輪右轉(zhuǎn),后輪前進(jìn),整車(chē)右前
  224. ***********************************************************************/
  225. void Moto_R_F()
  226. {
  227.   P1_2=1;
  228.   P1_3=0;
  229.   Delay_1ms(100);
  230. }
  231. /********************************************************************
  232. * 名稱(chēng) :Moto_L_B()
  233. * 功能 :前輪左轉(zhuǎn),后輪后退,整車(chē)左后
  234. ***********************************************************************/
  235. void Moto_L_B()
  236. {
  237.   P1_0=1;
  238.   P1_1=0;
  239.   Delay_1ms(100);
  240. }
  241. /********************************************************************
  242. * 名稱(chēng) :Moto_R_B()
  243. * 功能 : 前輪右轉(zhuǎn),后輪后退,整車(chē)右后
  244. ***********************************************************************/
  245. void Moto_R_B()
  246. {
  247.   P1_2=0;
  248.   P1_3=1;
  249.   Delay_1ms(100);
  250. }
  251. /********************************************************************
  252. * 名稱(chēng) :Moto_Stop()
  253. * 功能 : 電機(jī)1停止,電機(jī)2停止,整車(chē)表現(xiàn)為停止。
  254. ***********************************************************************/
  255. void Moto_Stop()
  256. {

  257.    P1_0=1;
  258.    P1_1=1;
  259.    P1_2=1;
  260.    P1_3=1;
  261.    Delay_1ms(100);
  262. }
  263. /********************************************************************
  264. * 功能 : 舵機(jī)PWM中斷初始化
  265. ***********************************************************************/
  266. void Timer0Init()
  267.   {
  268.       /*0度=0.5ms, 45度=1ms, 90度=1.5ms, 135度=2ms, 180度=2.5ms
  269.       /.5 ms初始值 F700, (12n/11059200=2.5/1000, n=2304, X=65536-2304=63232 > F700)*/  
  270.         TMOD |= 0x01;          //使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響               
  271.         TH0=-ms2_5Con>>8;              //給定初值,17ms中斷
  272.         TL0=-ms2_5Con;
  273.         EA=1;            //總中斷打開(kāi)
  274.         ET0=1;           //定時(shí)器0中斷打開(kāi)
  275.         TR0=1;           //定時(shí)器0開(kāi)關(guān)打開(kāi)                                   
  276.   }
  277. /********************************************************************
  278. * 功能 : 舵機(jī)PWM中斷, //舵機(jī)控制函數(shù) 周期為20ms 一個(gè)循環(huán)20MS  = 8*2.5ms
  279. ***********************************************************************/
  280. void SteeringGear() interrupt 1
  281. {
  282.     switch(pwm_flag)
  283.     {
  284.         case 1:  servo0=1; TH0=-pwm[0]>>8; TL0=-pwm[0]; break;
  285.         case 2:  servo0=0; TH0=-(ms2_5Con-pwm[0])>>8; TL0=-(ms2_5Con-pwm[0]); break;
  286.                 case 3:  servo1=1; TH0=-pwm[1]>>8; TL0=-pwm[1]; break;
  287.         case 4:  servo1=0; TH0=-(ms2_5Con-pwm[1])>>8; TL0=-(ms2_5Con-pwm[1]); break;   
  288.                 case 5:  servo2=1; TH0=-pwm[2]>>8; TL0=-pwm[2]; break;
  289.         case 6:  servo2=0; TH0=-(ms2_5Con-pwm[2])>>8; TL0=-(ms2_5Con-pwm[2]); break;
  290.                 case 7:  servo3=1; TH0=-pwm[3]>>8; TL0=-pwm[3]; break;
  291.         case 8:  servo3=0; TH0=-(ms2_5Con-pwm[3])>>8; TL0=-(ms2_5Con-pwm[3]); break;
  292.                 case 9:  servo4=1; TH0=-pwm[4]>>8; TL0=-pwm[4]; break;
  293.         case 10: servo4=0; TH0=-(ms2_5Con-pwm[4])>>8; TL0=-(ms2_5Con-pwm[4]); break;
  294.         case 11: servo5=1; TH0=-pwm[5]>>8; TL0=-pwm[5]; break;
  295.         case 12: servo5=0; TH0=-(ms2_5Con-pwm[5])>>8; TL0=-(ms2_5Con-pwm[5]); break;
  296.                 case 13: servo6=1;TH0=-pwm[6]>>8; TL0=-pwm[6]; break;                     
  297.         case 14: servo6=0;TH0=-(ms2_5Con-pwm[6])>>8; TL0=-(ms2_5Con-pwm[6]); break;  
  298.         case 15: servo7=1;TH0=-pwm[7]>>8;  TL0=-pwm[7]; break;      
  299.         case 16: servo7=0;TH0=-(ms2_5Con-pwm[7])>>8; TL0=-(ms2_5Con-pwm[7]); break;
  300.                 default: TH0=0xff; TL0=0x80; pwm_flag=0;         
  301.   }
  302.     pwm_flag++;
  303. }

  304.   void SetSteeringGear(uchar i, uchar val)
  305. {
  306.         uint a = (val+46)*10;
  307.     if(a<ms0_5Con)
  308.                 a=ms0_5Con;
  309.         if(a>ms2_5Con)
  310.                 a=ms2_5Con;
  311.         pwm[i]=a;
  312.         CommandDatatable[2]=0xff; //清除緩存
  313. }

  314. /********************************************************************
  315. * 功能 : 串口中斷接收數(shù)據(jù)
  316. ***********************************************************************/


  317. /*********************************************************************************
  318. ** 函數(shù)功能 : 主函數(shù)
  319. *********************************************************************************/

  320. void main()
  321. {   
  322.   
  323.     MainLight=0;
  324.     Delay_1ms(6000);
  325.     Com_Init();//串口初始化
  326.     Timer0Init();//舵機(jī)PWM中斷初始化   
  327.   while(1)
  328.   {
  329.   
  330.    if(CommandDatatable[0]==0XFF && CommandDatatable[4]==0XFF)
  331.       {
  332.            switch (CommandDatatable[1])      //根據(jù)鍵值不同,執(zhí)行不同的內(nèi)容
  333.              {
  334.               case 0X00:  //類(lèi)型位0X00,表明是控制數(shù)據(jù)包,進(jìn)入控制數(shù)據(jù)case
  335.                   switch(CommandDatatable[2])  //根據(jù)數(shù)據(jù)位的值來(lái)進(jìn)行選擇執(zhí)行不同的動(dòng)作
  336.                            {
  337.                              case 0X00:Moto_Stop();break;
  338.                              case 0X01:Moto_Forward();break;
  339.                              case 0X02:Moto_Backward();break;
  340.                              case 0X03:Moto_TurnLeft();break;
  341.                              case 0X04:Moto_TurnRight();break;
  342.                                                          case 0X05:Moto_R_F();break;
  343.                                                          case 0X06:Moto_L_F();break;
  344.                                                          case 0X07:Moto_R_B();break;
  345.                                                          case 0X08:M0to_L_B();break;
  346.                                                          default :  break;
  347.                            }
  348.                          break;
  349.               case 0X01:    //類(lèi)型位0X01,表明是舵機(jī)數(shù)據(jù)包,進(jìn)入舵機(jī)case  
  350.                   switch(CommandDatatable[2])
  351.                  {         
  352.                         case 0x01:SetSteeringGear(0,CommandDatatable[3]);break;
  353.                             case 0x02:SetSteeringGear(1,CommandDatatable[3]);break;
  354.                             case 0x03:SetSteeringGear(2,CommandDatatable[3]);break;
  355.                             case 0x04:SetSteeringGear(3,CommandDatatable[3]);break;
  356.                             case 0x05:SetSteeringGear(4,CommandDatatable[3]);break;
  357.                             case 0x06:SetSteeringGear(5,CommandDatatable[3]);break;
  358.                                         case 0x07:SetSteeringGear(6,CommandDatatable[3]);break;
  359.                             case 0x08:SetSteeringGear(7,CommandDatatable[3]);break;
  360.                                          default :  break;
  361.                       }
  362.                      break;
  363.               case 0X02:  //類(lèi)型位0X02,表明是大燈數(shù)據(jù)包,進(jìn)入大燈case
  364.                   switch(CommandDatatable[2])
  365.                            

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

下載:
51版wifi小車(chē)程序.rar (3.46 KB, 下載次數(shù): 44)


作者: gjf    時(shí)間: 2019-3-25 21:47
謝謝分享




歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1