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

標(biāo)題: WiFi智能小車程序 [打印本頁(yè)]

作者: jiejie1111    時(shí)間: 2021-5-29 09:39
標(biāo)題: WiFi智能小車程序
  1. #include<reg52.h>
  2. #include<math.h>
  3. #include<intrins.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. uchar Buffer =0; // 從串口接收的數(shù)據(jù)
  7. uint URTAReceivedCount=0,n=1;
  8. uchar dataTempdatatable[5],CommandDatatable[5];// 數(shù)據(jù)包
  9. uchar serVal[2];
  10. uintpwm[]={1120,1190,1382,1382,1382,1382,1382,1382}; // 初始 90 度 , (實(shí)際是 1382.4 ,取整得 1382 )
  11. uchar pwm_flag=0;
  12. uint code ms0_5Con=461; //0.5ms 計(jì)數(shù)   (實(shí)際是 460.8 ,取整得 461 )
  13. uint code ms2_5Con=2304; //2.5ms 計(jì)數(shù)
  14. bit key_stime_ok;
  15. sbit StatusLight=P2^0; // 狀態(tài)燈
  16. sbit MainLight=P2^1; // 主大燈
  17. sbit servo0=P0^0; // 舵機(jī)控制
  18. sbit servo1=P0^1;
  19. sbit servo2=P0^2;
  20. sbit servo3=P0^3;
  21. sbit servo4=P0^4;
  22. sbit servo5=P0^5;
  23. sbit servo6=P0^6;
  24. sbit servo7=P0^7;
  25.    // 定義智能小車驅(qū)動(dòng)模塊輸入 IO
  26. sbit IN1 = P1^0; //  高電平 1  后退(反轉(zhuǎn))
  27. sbit IN2 = P1^1; //  高電平 1  前進(jìn)(正轉(zhuǎn))
  28. sbit IN3 = P1^2; //  高電平 1  前進(jìn)(正轉(zhuǎn))
  29. sbit IN4 = P1^3; //  高電平 1  后退(反轉(zhuǎn))
  30. sbit EN1 = P1^4; //  高電平使能  
  31. sbit EN2 = P1^5;  //  高電平使能  
  32. /********************************************************************
  33. *  名稱  : Delay_1ms()
  34. *  功能  :  延時(shí)子程序,延時(shí)時(shí)間為  1ms * x
  35. *  輸入  : x ( 延時(shí)一毫秒的個(gè)數(shù) )
  36. *  輸出  :  無(wú)
  37. ***********************************************************************/
  38. void Delay_1ms(uint i)//1ms 延時(shí)
  39. {
  40. uchar x,j;
  41. for(j=0;j<i;j++)
  42. for(x=0;x<=148;x++);
  43. }
  44. void TurnOnStatusLight()
  45. {
  46. StatusLight=0;
  47. }
  48. /********************************************************************
  49. *  名稱  : Send_Data()
  50. *  功能  :  向上位機(jī)傳送字符
  51. *  輸入  :  無(wú)
  52. *  輸出  :  無(wú)
  53. ***********************************************************************/
  54. void Send_Data(uchar type,uchar cmd,uchardat)
  55. {
  56. uchardata Buffer[5];// 構(gòu)建數(shù)據(jù)包
  57. uchar*p;
  58. uintSend_Count=0;
  59. p =Buffer;
  60. Buffer[0]=0XFF;
  61. Buffer[1]=type;
  62. Buffer[2]=cmd;
  63. Buffer[3]=dat;
  64. Buffer[4]=0XFF;
  65. while(1)
  66. {
  67. if(*p==0XFF)
  68. {
  69. Send_Count++; //0XFF 標(biāo)志統(tǒng)計(jì)位
  70. }
  71. SBUF= *p; // 發(fā)送
  72. while(!TI) // 如果發(fā)送完畢,硬件會(huì)置位 TI ,等待發(fā)送完畢
  73. {
  74. _nop_();
  75. }
  76. p++;
  77. TI =0;
  78. if(Send_Count == 2) // 當(dāng)統(tǒng)計(jì)到兩次出現(xiàn) 0XFF ,則認(rèn)為一個(gè)數(shù)據(jù)包發(fā)送完畢,跳出循環(huán)
  79. {
  80. TI =0;
  81. break;
  82. }
  83. }
  84. }
  85. /********************************************************************
  86. 協(xié)議規(guī)定:
  87. 包頭   類型位   數(shù)據(jù)位   數(shù)據(jù)位   結(jié)束位
  88. 0XFF 0X** OX** 0X** 0XFF
  89. 各命令說(shuō)明:
  90. 類型位   數(shù)據(jù)位   數(shù)據(jù)位   功能
  91. 0X00 0X02 0X00  前進(jìn)
  92. 0X00 0X01 0X00  后退
  93. 0X00 0X03 0X00  左轉(zhuǎn)
  94. 0X00 0X04 0X00  右轉(zhuǎn)
  95. 0X00 0X00 0X00  停止
  96. 0X01 0X01 角度   舵機(jī) 1
  97. 0X01 0X02 . 舵機(jī) 2
  98. 0X01 0X01 . 舵機(jī) 3
  99. 0X01 0X02 . 舵機(jī) 4
  100. 0X01 0X01 . 舵機(jī) 5
  101. 0X01 0X02 . 舵機(jī) 6
  102. 0X01 0X01 . 舵機(jī) 7
  103. 0X01 0X02 數(shù)據(jù)   舵機(jī) 8
  104. 0X02 0X01 車燈亮
  105. 0X02 0X02 車燈滅
  106. 0X03  雷達(dá)數(shù)據(jù)   發(fā)送雷達(dá)數(shù)據(jù)  
  107. ***********************************************************************/
  108. /********************************************************************
  109. *  名稱  : Com_Int()
  110. *  功能  :  串口中斷子函數(shù)
  111. ***********************************************************************/
  112. void Com_Int(void) interrupt 4
  113. {
  114. uchar temp;
  115. ES=0; // 關(guān)串口中斷
  116. RI=0; // 軟件清除接收中斷
  117. temp=SBUF;
  118. if(temp==0XFF &&URTAReceivedCount<3)
  119. {
  120. Tempdatatable[0]==0XFF; // 包頭
  121. URTAReceivedCount++;
  122. }
  123. else
  124. {
  125. Tempdatatable[n]=temp;
  126. n++;
  127. if(URTAReceivedCount==0&&n==2)
  128. n=1;
  129. }
  130. if(URTAReceivedCount==2)// 包尾
  131. {
  132. Tempdatatable[0]=0XFF;
  133. Tempdatatable[4]=0XFF;
  134. n=1;
  135. URTAReceivedCount=0; // 組包完畢
  136. temp="";
  137. //Send_Data(Tempdatatable[1],Tempdatatable[2],Tempdatatable[3]); // 發(fā)送組成的數(shù)據(jù)包回去
  138. }
  139. CommandDatatable[0]=Tempdatatable[0];
  140. CommandDatatable[1]=Tempdatatable[1];
  141. CommandDatatable[2]=Tempdatatable[2];
  142. CommandDatatable[3]=Tempdatatable[3];
  143. CommandDatatable[4]=Tempdatatable[4];
  144. ES=1;// 開(kāi)串口中斷

  145. }
  146. /********************************************************************
  147. *  名稱  : 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. *  名稱  :Moto_Forward()
  165. *  功能  :  電機(jī) 1 、 2 啟動(dòng),都是前進(jìn),整車表現(xiàn)為前進(jìn)。
  166. ***********************************************************************/
  167. void Moto_Forward()
  168. {
  169. IN1=0;   // 左電機(jī)
  170. IN2=1;
  171. IN3=1;    // 右電機(jī)
  172. IN4=0;
  173. EN1=1;
  174. EN2=1;
  175. Delay_1ms(100);
  176. }
  177. /********************************************************************
  178. *  名稱  :Moto_Backward()
  179. *  功能  :  電機(jī) 1 、 2 啟動(dòng),都是后退,整車表現(xiàn)為后退。
  180. ***********************************************************************/
  181. void Moto_Backward()
  182. {

  183. IN1=1;   // 左電機(jī)
  184. IN2=0;
  185. IN3=0;   // 右電機(jī)
  186. IN4=1;
  187. EN1=1;
  188. EN2=1;
  189. Delay_1ms(100);
  190. }
  191. /********************************************************************
  192. *  名稱  :Moto_TurnLeft()
  193. *  功能  :  電機(jī) 1 后退,電機(jī) 2 前進(jìn),整車表現(xiàn)為左轉(zhuǎn)。
  194. ***********************************************************************/
  195. void Moto_TurnLeft()
  196. {
  197. IN1=0;   // 左電機(jī)
  198. IN2=0;
  199. IN3=1;   // 右電機(jī)
  200. IN4=0;
  201. EN1=1;
  202. EN2=1;
  203. Delay_1ms(100);
  204. }
  205. /********************************************************************
  206. *  名稱  :Moto_TurnRight()
  207. *  功能  :  電機(jī) 1 前進(jìn),電機(jī) 2 后退,整車表現(xiàn)為右轉(zhuǎn)。
  208. ***********************************************************************/
  209. void Moto_TurnRight()
  210. {
  211. IN1=0;   // 左電機(jī)
  212. IN2=1;
  213. IN3=0;   // 右電機(jī)
  214. IN4=0;
  215. EN1=1;
  216. EN2=1;
  217. Delay_1ms(100);
  218. }
  219. /********************************************************************
  220. *  名稱  :Moto_Stop()
  221. *  功能  :  電機(jī) 1 停止,電機(jī) 2 停止,整車表現(xiàn)為停止。
  222. ***********************************************************************/
  223. void Moto_Stop()
  224. {

  225. IN1=0;   // 左電機(jī)
  226. IN2=0;
  227. IN3=0;   // 右電機(jī)
  228. IN4=0;
  229. EN1=1;
  230. EN2=1;
  231. Delay_1ms(100);
  232. }
  233. /********************************************************************
  234. *  功能  :  舵機(jī) PWM 中斷初始化
  235. ***********************************************************************/
  236. void Timer0Init()
  237. {
  238. /*0 度 =0.5ms, 45 度 =1ms, 90 度 =1.5ms, 135 度 =2ms, 180 度 =2.5ms
  239. /.5ms 初始值  F700, (12n/11059200=2.5/1000,n=2304, X=65536-2304=63232 > F700)*/
  240. TMOD|= 0x01;  // 使用模式 1 , 16 位定時(shí)器,使用 "|" 符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響   
  241. TH0=-ms2_5Con>>8;  // 給定初值, 17ms 中斷
  242. TL0=-ms2_5Con;
  243. EA=1;// 總中斷打開(kāi)
  244. ET0=1; // 定時(shí)器 0 中斷打開(kāi)
  245. TR0=1; // 定時(shí)器 0 開(kāi)關(guān)打開(kāi)  
  246. }
  247. /********************************************************************
  248. *  功能  :  舵機(jī) PWM 中斷 , // 舵機(jī)控制函數(shù)   周期為 20ms  一個(gè)循環(huán) 20MS = 8*2.5ms
  249. ***********************************************************************/
  250. void SteeringGear() interrupt 1
  251. {
  252. switch(pwm_flag)
  253. {
  254. case1: servo0=1; TH0=-pwm[0]>>8; TL0=-pwm[0]; break;
  255. case2: servo0=0; TH0=-(ms2_5Con-pwm[0])>>8; TL0=-(ms2_5Con-pwm[0]); break;
  256. case3: servo1=1; TH0=-pwm[1]>>8; TL0=-pwm[1]; break;
  257. case4: servo1=0; TH0=-(ms2_5Con-pwm[1])>>8; TL0=-(ms2_5Con-pwm[1]); break;
  258. case5: servo2=1; TH0=-pwm[2]>>8; TL0=-pwm[2]; break;
  259. case6: servo2=0; TH0=-(ms2_5Con-pwm[2])>>8; TL0=-(ms2_5Con-pwm[2]); break;
  260. case7: servo3=1; TH0=-pwm[3]>>8; TL0=-pwm[3]; break;
  261. case8: servo3=0; TH0=-(ms2_5Con-pwm[3])>>8; TL0=-(ms2_5Con-pwm[3]); break;
  262. case9: servo4=1; TH0=-pwm[4]>>8; TL0=-pwm[4]; break;
  263. case10: servo4=0; TH0=-(ms2_5Con-pwm[4])>>8; TL0=-(ms2_5Con-pwm[4]); break;
  264. case11: servo5=1; TH0=-pwm[5]>>8; TL0=-pwm[5]; break;
  265. case12: servo5=0; TH0=-(ms2_5Con-pwm[5])>>8; TL0=-(ms2_5Con-pwm[5]); break;
  266. case13: servo6=1;TH0=-pwm[6]>>8; TL0=-pwm[6]; break;
  267. case14: servo6=0;TH0=-(ms2_5Con-pwm[6])>>8; TL0=-(ms2_5Con-pwm[6]); break;
  268. case15: servo7=1;TH0=-pwm[7]>>8; TL0=-pwm[7]; break;
  269. case16: servo7=0;TH0=-(ms2_5Con-pwm[7])>>8; TL0=-(ms2_5Con-pwm[7]); break;
  270.   default: TH0=0xff; TL0=0x80; pwm_flag=0;
  271. }
  272. pwm_flag++;
  273. }
  274. voidSetSteeringGear(uchar i, uchar val)
  275. {
  276. uinta = (val+46)*10;
  277. if(a<ms0_5Con)
  278.   a=ms0_5Con;
  279. if(a>ms2_5Con)
  280.   a=ms2_5Con;
  281. pwm[i]=a;
  282. CommandDatatable[2]=0xff; // 清除緩存
  283. }
  284. /********************************************************************
  285. *  功能  :  串口中斷接收數(shù)據(jù)
  286. ***********************************************************************/

  287. /*********************************************************************************
  288. **  函數(shù)功能   :   主函數(shù)
  289. *********************************************************************************/
  290. void main()
  291. {

  292. MainLight=0;
  293. Delay_1ms(200);
  294. Com_Init();// 串口初始化
  295. Timer0Init();// 舵機(jī) PWM 中斷初始化  
  296. while(1)
  297. {

  298. if(CommandDatatable[0]==0XFF &&CommandDatatable[4]==0XFF)
  299. {
  300. switch (CommandDatatable[1]) // 根據(jù)鍵值不同,執(zhí)行不同的內(nèi)容
  301. {
  302. case0X00: // 類型位 0X00 ,表明是控制數(shù)據(jù)包,進(jìn)入控制數(shù)據(jù) case
  303. switch(CommandDatatable[2]) // 根據(jù)數(shù)據(jù)位的值來(lái)進(jìn)行選擇執(zhí)行不同的動(dòng)作
  304. {
  305. case0X00:Moto_Stop();break;
  306. case0X01:Moto_Forward();break;
  307. case0X02:Moto_Backward();break;
  308. case0X03:Moto_TurnLeft();break;
  309. case0X04:Moto_TurnRight();break;
  310.             default : break;
  311. }
  312. break;
  313. case0X01: // 類型位 0X01 ,表明是舵機(jī)數(shù)據(jù)包,進(jìn)入舵機(jī) case
  314. switch(CommandDatatable[2])
  315. {
  316. case0x01:SetSteeringGear(0,CommandDatatable[3]);break;
  317.   case 0x02:SetSteeringGear(1,CommandDatatable[3]);break;
  318.   case 0x03:SetSteeringGear(2,CommandDatatable[3]);break;
  319.   case 0x04:SetSteeringGear(3,CommandDatatable[3]);break;
  320.   case 0x05:SetSteeringGear(4,CommandDatatable[3]);break;
  321.   case 0x06:SetSteeringGear(5,CommandDatatable[3]);break;
  322.     case 0x07:SetSteeringGear(6,CommandDatatable[3]);break;
  323.   case 0x08:SetSteeringGear(7,CommandDatatable[3]);break;
  324.         default : break;
  325. }
  326. break;
  327. case0X02: // 類型位 0X02 ,表明是大燈數(shù)據(jù)包,進(jìn)入大燈 case
  328. switch(CommandDatatable[2])
  329. {
  330. case0X01:MainLight=1;break;
  331. case0X02:MainLight=0;break;
  332.             default : break;
  333. }
  334. break;
  335. default : break;
  336. }
  337. }
  338. }
  339. }
復(fù)制代碼







歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久88 | 欧美日韩在线视频观看 | www.99精品 | 午夜欧美一区二区三区在线播放 | 亚洲欧美在线观看 | 精品小视频 | 亚洲视频一区二区三区四区 | 亚洲欧美在线免费观看 | 久久久久久久久久久高潮一区二区 | 久久一起草 | 精品国产欧美一区二区三区成人 | 很黄很污的网站 | 亚洲成网站 | 亚洲91视频 | 欧美日韩精品一区二区三区视频 | 羞羞网站免费观看 | 欧美一级久久 | 国产在线观看免费 | 亚洲一区国产 | 欧美网址在线观看 | 日韩高清中文字幕 | 高清一区二区视频 | 一区二区三区四区在线视频 | 日本不卡一区二区三区在线观看 | 日韩成人精品一区 | 91精品国产色综合久久不卡98口 | 欧美国产日韩一区 | 亚洲视频三 | 亚洲精品国产a久久久久久 中文字幕一区二区三区四区五区 | 国产精品视频一二三区 | 久久国产一区二区三区 | 久久亚洲欧美日韩精品专区 | 欧美日韩在线视频观看 | 欧美国产日韩在线观看成人 | 亚洲欧美一区二区三区在线 | www视频在线观看 | 狠狠干影院 | 免费一级做a爰片久久毛片潮喷 | 中文字幕乱码一区二区三区 | 国产精品美女久久久久久久久久久 | 深夜福利影院 |