找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4046|回复: 11
收起左侧

我想做一个单片机控制的小车

[复制链接]
ID:200257 发表于 2017-5-13 13:18 | 显示全部楼层 |阅读模式
我对之间电路还不是很了解,比如各个模块之间的衔接,难一点的我想通过一个wifi模块来基于socket编程来控制小车,简单点就搞个巡线算了,有没有电路原理给我参考参考,谢谢哈
回复

使用道具 举报

ID:200335 发表于 2017-5-13 16:27 | 显示全部楼层
你打算用什么控制器呀   wifi串口现在很多呀
回复

使用道具 举报

ID:79544 发表于 2017-5-13 18:44 | 显示全部楼层
简单的就是单片机加红外寻迹模块加电机驱动模块再就是小车底盘。这样就搞定。
回复

使用道具 举报

ID:200415 发表于 2017-5-13 20:37 | 显示全部楼层
可以用蓝牙控制啊,相比无线要简单一点
回复

使用道具 举报

ID:197508 发表于 2017-5-13 21:19 | 显示全部楼层
if(flag==2)                         {                                 write_com(0x80+0x40+8)                         }
回复

使用道具 举报

ID:155507 发表于 2017-5-14 14:23 | 显示全部楼层
  1. #ifndef __STC15F2K60S2_H_
  2. #define __STC15F2K60S2_H_

  3. /////////////////////////////////////////////////
  4. //注意: STC15W4K32S4系列的芯片,上电后所有与PWM相关的IO口均为
  5. //      高阻态,需将这些口设置为准双向口或强推挽模式方可正常使用
  6. //相关IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
  7. //        P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
  8. /////////////////////////////////////////////////

  9. /////////////////////////////////////////////////

  10. //包含本头文件后,不用另外再包含"REG51.H"

  11. //内核特殊功能寄存器        // 复位值   描述
  12. sfr ACC         =   0xE0;   //0000,0000 累加器Accumulator
  13. sfr B           =   0xF0;   //0000,0000 B寄存器
  14. sfr PSW         =   0xD0;   //0000,0000 程序状态字
  15. sbit CY         =   PSW^7;
  16. sbit AC         =   PSW^6;
  17. sbit F0         =   PSW^5;
  18. sbit RS1        =   PSW^4;
  19. sbit RS0        =   PSW^3;
  20. sbit OV         =   PSW^2;
  21. sbit P          =   PSW^0;
  22. sfr SP          =   0x81;   //0000,0111 堆栈指针
  23. sfr DPL         =   0x82;   //0000,0000 数据指针低字节
  24. sfr DPH         =   0x83;   //0000,0000 数据指针高字节

  25. //I/O 口特殊功能寄存器
  26. sfr P0          =   0x80;   //1111,1111 端口0
  27. sbit P00        =   P0^0;
  28. sbit P01        =   P0^1;
  29. sbit P02        =   P0^2;
  30. sbit P03        =   P0^3;
  31. sbit P04        =   P0^4;
  32. sbit P05        =   P0^5;
  33. sbit P06        =   P0^6;
  34. sbit P07        =   P0^7;
  35. sfr P1          =   0x90;   //1111,1111 端口1
  36. sbit P10        =   P1^0;
  37. sbit P11        =   P1^1;
  38. sbit P12        =   P1^2;
  39. sbit P13        =   P1^3;
  40. sbit P14        =   P1^4;
  41. sbit P15        =   P1^5;
  42. sbit P16        =   P1^6;
  43. sbit P17        =   P1^7;
  44. sfr P2          =   0xA0;   //1111,1111 端口2
  45. sbit P20        =   P2^0;
  46. sbit P21        =   P2^1;
  47. sbit P22        =   P2^2;
  48. sbit P23        =   P2^3;
  49. sbit P24        =   P2^4;
  50. sbit P25        =   P2^5;
  51. sbit P26        =   P2^6;
  52. sbit P27        =   P2^7;
  53. sfr P3          =   0xB0;   //1111,1111 端口3
  54. sbit P30        =   P3^0;
  55. sbit P31        =   P3^1;
  56. sbit P32        =   P3^2;
  57. sbit P33        =   P3^3;
  58. sbit P34        =   P3^4;
  59. sbit P35        =   P3^5;
  60. sbit P36        =   P3^6;
  61. sbit P37        =   P3^7;
  62. sfr P4          =   0xC0;   //1111,1111 端口4
  63. sbit P40        =   P4^0;
  64. sbit P41        =   P4^1;
  65. sbit P42        =   P4^2;
  66. sbit P43        =   P4^3;
  67. sbit P44        =   P4^4;
  68. sbit P45        =   P4^5;
  69. sbit P46        =   P4^6;
  70. sbit P47        =   P4^7;
  71. sfr P5          =   0xC8;   //xxxx,1111 端口5
  72. sbit P50        =   P5^0;
  73. sbit P51        =   P5^1;
  74. sbit P52        =   P5^2;
  75. sbit P53        =   P5^3;
  76. sbit P54        =   P5^4;
  77. sbit P55        =   P5^5;
  78. sbit P56        =   P5^6;
  79. sbit P57        =   P5^7;
  80. sfr P6          =   0xE8;   //0000,0000 端口6
  81. sbit P60        =   P6^0;
  82. sbit P61        =   P6^1;
  83. sbit P62        =   P6^2;
  84. sbit P63        =   P6^3;
  85. sbit P64        =   P6^4;
  86. sbit P65        =   P6^5;
  87. sbit P66        =   P6^6;
  88. sbit P67        =   P6^7;
  89. sfr P7          =   0xF8;   //0000,0000 端口7
  90. sbit P70        =   P7^0;
  91. sbit P71        =   P7^1;
  92. sbit P72        =   P7^2;
  93. sbit P73        =   P7^3;
  94. sbit P74        =   P7^4;
  95. sbit P75        =   P7^5;
  96. sbit P76        =   P7^6;
  97. sbit P77        =   P7^7;
  98. sfr P0M0        =   0x94;   //0000,0000 端口0模式寄存器0
  99. sfr P0M1        =   0x93;   //0000,0000 端口0模式寄存器1
  100. sfr P1M0        =   0x92;   //0000,0000 端口1模式寄存器0
  101. sfr P1M1        =   0x91;   //0000,0000 端口1模式寄存器1
  102. sfr P2M0        =   0x96;   //0000,0000 端口2模式寄存器0
  103. sfr P2M1        =   0x95;   //0000,0000 端口2模式寄存器1
  104. sfr P3M0        =   0xB2;   //0000,0000 端口3模式寄存器0
  105. sfr P3M1        =   0xB1;   //0000,0000 端口3模式寄存器1
  106. sfr P4M0        =   0xB4;   //0000,0000 端口4模式寄存器0
  107. sfr P4M1        =   0xB3;   //0000,0000 端口4模式寄存器1
  108. sfr P5M0        =   0xCA;   //0000,0000 端口5模式寄存器0
  109. sfr P5M1        =   0xC9;   //0000,0000 端口5模式寄存器1
  110. sfr P6M0        =   0xCC;   //0000,0000 端口6模式寄存器0
  111. sfr P6M1        =   0xCB;   //0000,0000 端口6模式寄存器1
  112. sfr P7M0        =   0xE2;   //0000,0000 端口7模式寄存器0
  113. sfr P7M1        =   0xE1;   //0000,0000 端口7模式寄存器1

  114. //系统管理特殊功能寄存器
  115. sfr PCON        =   0x87;   //0001,0000 电源控制寄存器
  116. sfr AUXR        =   0x8E;   //0000,0000 辅助寄存器
  117. sfr AUXR1       =   0xA2;   //0000,0000 辅助寄存器1
  118. sfr P_SW1       =   0xA2;   //0000,0000 外设端口切换寄存器1
  119. sfr CLK_DIV     =   0x97;   //0000,0000 时钟分频控制寄存器
  120. sfr BUS_SPEED   =   0xA1;   //xx10,x011 总线速度控制寄存器
  121. sfr P1ASF       =   0x9D;   //0000,0000 端口1模拟功能配置寄存器
  122. sfr P_SW2       =   0xBA;   //0xxx,x000 外设端口切换寄存器

  123. //中断特殊功能寄存器
  124. sfr IE          =   0xA8;   //0000,0000 中断控制寄存器
  125. sbit EA         =   IE^7;
  126. sbit ELVD       =   IE^6;
  127. sbit EADC       =   IE^5;
  128. sbit ES         =   IE^4;
  129. sbit ET1        =   IE^3;
  130. sbit EX1        =   IE^2;
  131. sbit ET0        =   IE^1;
  132. sbit EX0        =   IE^0;
  133. sfr IP          =   0xB8;   //0000,0000 中断优先级寄存器
  134. sbit PPCA       =   IP^7;
  135. sbit PLVD       =   IP^6;
  136. sbit PADC       =   IP^5;
  137. sbit PS         =   IP^4;
  138. sbit PT1        =   IP^3;
  139. sbit PX1        =   IP^2;
  140. sbit PT0        =   IP^1;
  141. sbit PX0        =   IP^0;
  142. sfr IE2         =   0xAF;   //0000,0000 中断控制寄存器2
  143. sfr IP2         =   0xB5;   //xxxx,xx00 中断优先级寄存器2
  144. sfr INT_CLKO    =   0x8F;   //0000,0000 外部中断与时钟输出控制寄存器

  145. //定时器特殊功能寄存器
  146. sfr TCON        =   0x88;   //0000,0000 T0/T1控制寄存器
  147. sbit TF1        =   TCON^7;
  148. sbit TR1        =   TCON^6;
  149. sbit TF0        =   TCON^5;
  150. sbit TR0        =   TCON^4;
  151. sbit IE1        =   TCON^3;
  152. sbit IT1        =   TCON^2;
  153. sbit IE0        =   TCON^1;
  154. sbit IT0        =   TCON^0;
  155. sfr TMOD        =   0x89;   //0000,0000 T0/T1模式寄存器
  156. sfr TL0         =   0x8A;   //0000,0000 T0低字节
  157. sfr TL1         =   0x8B;   //0000,0000 T1低字节
  158. sfr TH0         =   0x8C;   //0000,0000 T0高字节
  159. sfr TH1         =   0x8D;   //0000,0000 T1高字节
  160. sfr T4T3M       =   0xD1;   //0000,0000 T3/T4模式寄存器
  161. sfr T3T4M       =   0xD1;   //0000,0000 T3/T4模式寄存器
  162. sfr T4H         =   0xD2;   //0000,0000 T4高字节
  163. sfr T4L         =   0xD3;   //0000,0000 T4低字节
  164. sfr T3H         =   0xD4;   //0000,0000 T3高字节
  165. sfr T3L         =   0xD5;   //0000,0000 T3低字节
  166. sfr T2H         =   0xD6;   //0000,0000 T2高字节
  167. sfr T2L         =   0xD7;   //0000,0000 T2低字节
  168. sfr WKTCL       =   0xAA;   //0000,0000 掉电唤醒定时器低字节
  169. sfr WKTCH       =   0xAB;   //0000,0000 掉电唤醒定时器高字节
  170. sfr WDT_CONTR   =   0xC1;   //0000,0000 看门狗控制寄存器

  171. //串行口特殊功能寄存器
  172. sfr SCON        =   0x98;   //0000,0000 串口1控制寄存器
  173. sbit SM0        =   SCON^7;
  174. sbit SM1        =   SCON^6;
  175. sbit SM2        =   SCON^5;
  176. sbit REN        =   SCON^4;
  177. sbit TB8        =   SCON^3;
  178. sbit RB8        =   SCON^2;
  179. sbit TI         =   SCON^1;
  180. sbit RI         =   SCON^0;
  181. sfr SBUF        =   0x99;   //xxxx,xxxx 串口1数据寄存器
  182. sfr S2CON       =   0x9A;   //0000,0000 串口2控制寄存器
  183. sfr S2BUF       =   0x9B;   //xxxx,xxxx 串口2数据寄存器
  184. sfr S3CON       =   0xAC;   //0000,0000 串口3控制寄存器
  185. sfr S3BUF       =   0xAD;   //xxxx,xxxx 串口3数据寄存器
  186. sfr S4CON       =   0x84;   //0000,0000 串口4控制寄存器
  187. sfr S4BUF       =   0x85;   //xxxx,xxxx 串口4数据寄存器
  188. sfr SADDR       =   0xA9;   //0000,0000 从机地址寄存器
  189. sfr SADEN       =   0xB9;   //0000,0000 从机地址屏蔽寄存器

  190. //ADC 特殊功能寄存器
  191. sfr ADC_CONTR   =   0xBC;   //0000,0000 A/D转换控制寄存器
  192. sfr ADC_RES     =   0xBD;   //0000,0000 A/D转换结果高8位
  193. sfr ADC_RESL    =   0xBE;   //0000,0000 A/D转换结果低2位

  194. //SPI 特殊功能寄存器
  195. sfr SPSTAT      =   0xCD;   //00xx,xxxx SPI状态寄存器
  196. sfr SPCTL       =   0xCE;   //0000,0100 SPI控制寄存器
  197. sfr SPDAT       =   0xCF;   //0000,0000 SPI数据寄存器

  198. //IAP/ISP 特殊功能寄存器
  199. sfr IAP_DATA    =   0xC2;   //0000,0000 EEPROM数据寄存器
  200. sfr IAP_ADDRH   =   0xC3;   //0000,0000 EEPROM地址高字节
  201. sfr IAP_ADDRL   =   0xC4;   //0000,0000 EEPROM地址第字节
  202. sfr IAP_CMD     =   0xC5;   //xxxx,xx00 EEPROM命令寄存器
  203. sfr IAP_TRIG    =   0xC6;   //0000,0000 EEPRPM命令触发寄存器
  204. sfr IAP_CONTR   =   0xC7;   //0000,x000 EEPROM控制寄存器

  205. //PCA/PWM 特殊功能寄存器
  206. sfr CCON        =   0xD8;   //00xx,xx00 PCA控制寄存器
  207. sbit CF         =   CCON^7;
  208. sbit CR         =   CCON^6;
  209. sbit CCF2       =   CCON^2;
  210. sbit CCF1       =   CCON^1;
  211. sbit CCF0       =   CCON^0;
  212. sfr CMOD        =   0xD9;   //0xxx,x000 PCA 工作模式寄存器
  213. sfr CL          =   0xE9;   //0000,0000 PCA计数器低字节
  214. sfr CH          =   0xF9;   //0000,0000 PCA计数器高字节
  215. sfr CCAPM0      =   0xDA;   //0000,0000 PCA模块0的PWM寄存器
  216. sfr CCAPM1      =   0xDB;   //0000,0000 PCA模块1的PWM寄存器
  217. sfr CCAPM2      =   0xDC;   //0000,0000 PCA模块2的PWM 寄存器
  218. sfr CCAP0L      =   0xEA;   //0000,0000 PCA模块0的捕捉/比较寄存器低字节
  219. sfr CCAP1L      =   0xEB;   //0000,0000 PCA模块1的捕捉/比较寄存器低字节
  220. sfr CCAP2L      =   0xEC;   //0000,0000 PCA模块2的捕捉/比较寄存器低字节
  221. sfr PCA_PWM0    =   0xF2;   //xxxx,xx00 PCA模块0的PWM寄存器
  222. sfr PCA_PWM1    =   0xF3;   //xxxx,xx00 PCA模块1的PWM寄存器
  223. sfr PCA_PWM2    =   0xF4;   //xxxx,xx00 PCA模块1的PWM寄存器
  224. sfr CCAP0H      =   0xFA;   //0000,0000 PCA模块0的捕捉/比较寄存器高字节
  225. sfr CCAP1H      =   0xFB;   //0000,0000 PCA模块1的捕捉/比较寄存器高字节
  226. sfr CCAP2H      =   0xFC;   //0000,0000 PCA模块2的捕捉/比较寄存器高字节

  227. //比较器特殊功能寄存器
  228. sfr CMPCR1      =   0xE6;   //0000,0000 比较器控制寄存器1
  229. sfr CMPCR2      =   0xE7;   //0000,0000 比较器控制寄存器2

  230. //增强型PWM波形发生器特殊功能寄存器
  231. sfr PWMCFG      =   0xf1;   //x000,0000 PWM配置寄存器
  232. sfr PWMCR       =   0xf5;   //0000,0000 PWM控制寄存器
  233. sfr PWMIF       =   0xf6;   //x000,0000 PWM中断标志寄存器
  234. sfr PWMFDCR     =   0xf7;   //xx00,0000 PWM外部异常检测控制寄存器

  235. //如下特殊功能寄存器位于扩展RAM区域
  236. //访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
  237. #define PWMC        (*(unsigned int  volatile xdata *)0xfff0)
  238. #define PWMCH       (*(unsigned char volatile xdata *)0xfff0)
  239. #define PWMCL       (*(unsigned char volatile xdata *)0xfff1)
  240. #define PWMCKS      (*(unsigned char volatile xdata *)0xfff2)
  241. #define PWM2T1      (*(unsigned int  volatile xdata *)0xff00)
  242. #define PWM2T1H     (*(unsigned char volatile xdata *)0xff00)
  243. #define PWM2T1L     (*(unsigned char volatile xdata *)0xff01)
  244. #define PWM2T2      (*(unsigned int  volatile xdata *)0xff02)
  245. #define PWM2T2H     (*(unsigned char volatile xdata *)0xff02)
  246. #define PWM2T2L     (*(unsigned char volatile xdata *)0xff03)
  247. #define PWM2CR      (*(unsigned char volatile xdata *)0xff04)
  248. #define PWM3T1      (*(unsigned int  volatile xdata *)0xff10)
  249. #define PWM3T1H     (*(unsigned char volatile xdata *)0xff10)
  250. #define PWM3T1L     (*(unsigned char volatile xdata *)0xff11)
  251. #define PWM3T2      (*(unsigned int  volatile xdata *)0xff12)
  252. #define PWM3T2H     (*(unsigned char volatile xdata *)0xff12)
  253. #define PWM3T2L     (*(unsigned char volatile xdata *)0xff13)
  254. #define PWM3CR      (*(unsigned char volatile xdata *)0xff14)
  255. #define PWM4T1      (*(unsigned int  volatile xdata *)0xff20)
  256. #define PWM4T1H     (*(unsigned char volatile xdata *)0xff20)
  257. #define PWM4T1L     (*(unsigned char volatile xdata *)0xff21)
  258. #define PWM4T2      (*(unsigned int  volatile xdata *)0xff22)
  259. #define PWM4T2H     (*(unsigned char volatile xdata *)0xff22)
  260. #define PWM4T2L     (*(unsigned char volatile xdata *)0xff23)
  261. #define PWM4CR      (*(unsigned char volatile xdata *)0xff24)
  262. #define PWM5T1      (*(unsigned int  volatile xdata *)0xff30)
  263. #define PWM5T1H     (*(unsigned char volatile xdata *)0xff30)
  264. #define PWM5T1L     (*(unsigned char volatile xdata *)0xff31)
  265. #define PWM5T2      (*(unsigned int  volatile xdata *)0xff32)
  266. #define PWM5T2H     (*(unsigned char volatile xdata *)0xff32)
  267. #define PWM5T2L     (*(unsigned char volatile xdata *)0xff33)
  268. #define PWM5CR      (*(unsigned char volatile xdata *)0xff34)
  269. #define PWM6T1      (*(unsigned int  volatile xdata *)0xff40)
  270. #define PWM6T1H     (*(unsigned char volatile xdata *)0xff40)
  271. #define PWM6T1L     (*(unsigned char volatile xdata *)0xff41)
  272. #define PWM6T2      (*(unsigned int  volatile xdata *)0xff42)
  273. #define PWM6T2H     (*(unsigned char volatile xdata *)0xff42)
  274. #define PWM6T2L     (*(unsigned char volatile xdata *)0xff43)
  275. #define PWM6CR      (*(unsigned char volatile xdata *)0xff44)
  276. #define PWM7T1      (*(unsigned int  volatile xdata *)0xff50)        
  277. #define PWM7T1H     (*(unsigned char volatile xdata *)0xff50)        
  278. #define PWM7T1L     (*(unsigned char volatile xdata *)0xff51)
  279. #define PWM7T2      (*(unsigned int  volatile xdata *)0xff52)
  280. #define PWM7T2H     (*(unsigned char volatile xdata *)0xff52)
  281. #define PWM7T2L     (*(unsigned char volatile xdata *)0xff53)
  282. #define PWM7CR      (*(unsigned char volatile xdata *)0xff54)

  283. /////////////////////////////////////////////////

  284. #endif
复制代码


  1. #include "STC15W201S.h"
  2. #include "intrins.h"

  3. typedef unsigned char BYTE;
  4. typedef unsigned int WORD;

  5. sbit D1 = P1^4;  //用于控制左边发光二极管
  6. sbit D2 = P3^7;   //用于控制右边发光二极管

  7. bit busy;

  8. bit l9110s_1 ;
  9. bit l9110s_2 ;

  10. bit R9110s_1 ;
  11. bit R9110s_2 ;

  12. unsigned char func;

  13. void Delay500ms()                //@11.0592MHz
  14. {
  15.         unsigned char i, j, k;

  16.         _nop_();
  17.         _nop_();
  18.         i = 2;
  19.         j = 2;
  20.         k = 2;
  21.         do
  22.         {
  23.                 do
  24.                 {
  25.                         while (--k);
  26.                 } while (--j);
  27.         } while (--i);
  28. }

  29. BYTE usart_recv;

  30. /*----------------------------
  31. UART 中断处理函数
  32. -----------------------------*/
  33. void Uart() interrupt 4 using 1
  34. {
  35.     if (RI)
  36.     {
  37.         RI = 0;                 //??RI?
  38.         usart_recv = SBUF;
  39.     }
  40.     if (TI)
  41.     {
  42.         TI = 0;                 //??TI?
  43.         busy = 0;               //????
  44.     }
  45. }

  46. //串口初始化为9600波特率
  47. void Usart_init(void)
  48. {
  49.         SCON = 0x50;       
  50.         T2L = 0xE0;               
  51.         T2H = 0xFE;               
  52.         AUXR |= 0x01;               
  53.         AUXR |= 0x4;               
  54.         AUXR |= 0x10;               
  55.         ES = 1;
  56.         EA = 1;
  57. }


  58. //电机PWM方式驱动

  59. void PWM_Init(void)                //100??@11.0592MHz
  60. {
  61.         AUXR |= 0x80;               
  62.         TMOD = 0x02;       
  63.         TL0 = 0x00;               
  64.         TH0 = 0x00;               
  65.         TF0 = 0;               
  66.         TR0 = 1;               
  67.         ET0 = 1;
  68.         EA  = 1;
  69. }

  70. unsigned char R_PWM,L_PWM;
  71. unsigned char count;
  72. void timer0_int (void) interrupt 1
  73. {
  74.         count++;
  75.         if(count > 100)
  76.         {
  77.                 P32 = l9110s_1;
  78.                 P33 = l9110s_2;
  79.                 P54 = R9110s_1;
  80.                 P55 = R9110s_2;
  81.                 count = 0;
  82.         }
  83.        
  84.         if(count == L_PWM)
  85.         {
  86.                 P54 = 0;
  87.                 P55 = 0;
  88.         }
  89.        
  90.         if(count == R_PWM)
  91.         {
  92.                 P32 = 0;
  93.                 P33 = 0;
  94.         }
  95.        
  96. }


  97. void SendData(BYTE dat)
  98. {
  99.     while (busy);               //???????????
  100.     busy = 1;
  101.     SBUF = dat;                 //????UART?????
  102. }


  103. //电机控制,注意电机驱动芯片9110两个控制端只能有一个为高电平,
  104. //若同时为高电平则芯片内部短路,危险,极易损坏芯片。
  105. void stop(void);
  106. void front(void);
  107. void back(void);
  108. void right(void);
  109. void left(void);

  110. //停止
  111. void stop(void)
  112. {
  113.         l9110s_1 = 0;
  114.         l9110s_2 = 0;
  115.         R9110s_1 = 0;
  116.         R9110s_2 = 0;
  117. }

  118. //前进
  119. void front(void)
  120. {
  121.                 l9110s_1 = 0;
  122.                 l9110s_2 = 1;
  123.                 R9110s_1 = 0;
  124.                 R9110s_2 = 1;
  125. }

  126. //倒退
  127. void back(void)
  128. {
  129.                 l9110s_1 = 1;
  130.                 l9110s_2 = 0;
  131.                 R9110s_1 = 1;
  132.                 R9110s_2 = 0;
  133. }


  134. //右转
  135. void right(void)
  136. {
  137.                 l9110s_1 = 1;
  138.                 l9110s_2 = 0;
  139.                 R9110s_1 = 0;
  140.                 R9110s_2 = 1;
  141. }

  142. //左转
  143. void left(void)
  144. {
  145.                 l9110s_1 = 0;
  146.                 l9110s_2 = 1;
  147.                 R9110s_1 = 1;
  148.                 R9110s_2 = 0;
  149. }




  150. //循迹避障 蓝牙控制功能选择
  151. unsigned char func_sel(void)
  152. {
  153.         unsigned long c;
  154.         unsigned char i;
  155.         i = 0;
  156.         c = 0;
  157.         D1 = D2 = 1;
  158.         stop();
  159.         Delay500ms();Delay500ms();Delay500ms();Delay500ms();
  160.         while((P15 == 0)&& (c <0x3ffff))
  161.         {
  162.                 c++;
  163.                 if((c > 0xffff) && (c < 0x1ffff))
  164.                 {
  165.                         D1 = 0;
  166.                         i = 1;
  167.                 }
  168.                
  169.                 if((c > 0x1ffff) && (c < 0x2ffff))
  170.                 {
  171.                         D1 = 1; D2 = 0;
  172.                         i = 2;
  173.                 }
  174.                
  175.                 if((c > 0x2ffff) && (c < 0x3ffff))
  176.                 {
  177.                         D1 = 0; D2 = 0;
  178.                         i = 3;
  179.                 }
  180.         }
  181.        
  182.          if(c < 0xffff)
  183.                 {
  184.                         return func;
  185.                 }
  186.                 return i;
  187. }



  188. void main(void)
  189. {
  190.         BYTE last_recv;
  191.        
  192.         P32 = P33 = P54 = P55 = 0;
  193.         l9110s_1 = l9110s_2 = R9110s_1 = R9110s_2 = 0;
  194.        
  195.         R_PWM = 99;
  196.         L_PWM = 99;
  197.         P3M1 = 0;
  198.         P3M0 = 0x0C;
  199.         P5M1 = 0;
  200.         P5M0 = 0x30;
  201.         P1M1 = 0xf;
  202.         P1M0 = 0;
  203.         IP =0x10;
  204.         PWM_Init();
  205.   Usart_init();
  206.         D1 = D2 = 1;
  207.         P15 = 1;
  208.         func = 1;
  209.    
  210.         while(func == 1)   //功能1:循迹
  211.         {
  212.                         while((P11 == 1)&& (P13 == 0))
  213.                         {
  214.                                         right(); D2 = 0;D1 = 1;
  215.                         }
  216.                         while((P13 == 1)&&(P11 == 0))
  217.                         {
  218.                                  left();D1 = 0;D2 =1;
  219.                         }
  220.                        
  221.                         while((P13 == 0)&&(P11 == 0))
  222.                         {
  223.                                  front();D1 = 0;D2 =0;
  224.                         }
  225.                         front();Delay500ms();
  226.                         if(P15 == 0)
  227.                         {
  228.                                 func = func_sel();
  229.                         }
  230.         }

  231.         while(func == 2)  //功能2:避障
  232.         {
  233.                 if(P15 == 0)
  234.                 {
  235.                         func = func_sel();
  236.                 }
  237.                
  238.                 while((P12 == 1)&& (P10 == 0))
  239.                 {
  240.                         left(); D2 = 0;D1 = 1;
  241.                 }
  242.                
  243.                 while((P12 == 0)&& (P10 == 1))
  244.                 {
  245.                         right(); D2 = 1;D1 = 0;
  246.                 }
  247.                
  248.                 while((P12 == 1)&& (P10 == 1))
  249.                 {
  250.                         front(); D2 = 0;D1 = 0;
  251.                 }
  252.                
  253.                 while((P12 == 0)&& (P10 == 0))
  254.                 {
  255.                         back(); D2 = 1;D1 = 1;
  256.                 }
  257.         }

  258.        
  259.         while(func == 3)    //功能3:蓝牙遥控
  260.         {
  261.                 if(P15 == 0)
  262.                 {
  263.                         func = func_sel();
  264.                 }
  265.                
  266.                 if(last_recv != usart_recv)
  267.                 {
  268.                         last_recv = usart_recv;
  269.                         switch(usart_recv)
  270.                         {
  271.                                 case 0x14:
  272.                                 case 0x15:
  273.                                 case 0x16:
  274.                                 case 0x17:
  275.                                 case 0x18:
  276.                                 case 0x19:
  277.                                 case 0x1a:
  278.                                 case 0x1b:
  279.                                 case 0x1c:
  280.                                 case 0x1d:
  281.                                 case 0x1e:
  282.                                 case 0x1f:       
  283.                                         front();
  284.                                         R_PWM = 69+(usart_recv-0x10)*2;
  285.                                         L_PWM = 69+(usart_recv-0x10)*2;
  286.                                         D1 = D2 = 0;
  287.                                         break;
  288.                                
  289.                                 case 0x24:
  290.                                 case 0x25:
  291.                                 case 0x26:
  292.                                 case 0x27:
  293.                                 case 0x28:
  294.                                 case 0x29:
  295.                                 case 0x2a:
  296.                                 case 0x2b:
  297.                                 case 0x2c:
  298.                                 case 0x2d:
  299.                                 case 0x2e:
  300.                                 case 0x2f:       
  301.                                         back();
  302.                                         R_PWM = 69+(usart_recv-0x20)*2;
  303.                                         L_PWM = 69+(usart_recv-0x20)*2;
  304.                                         D1 = D2 = 1;
  305.                                         break;
  306.                                
  307.                                 case 0x34:
  308.                                 case 0x35:
  309.                                 case 0x36:
  310.                                 case 0x37:
  311.                                 case 0x38:
  312.                                 case 0x39:
  313.                                 case 0x3a:
  314.                                 case 0x3b:
  315.                                 case 0x3c:
  316.                                 case 0x3d:
  317.                                 case 0x3e:
  318.                                 case 0x3f:       
  319.                                         left();
  320.                                         R_PWM = 69+(usart_recv-0x30)*2;
  321.                                         L_PWM = 69+(usart_recv-0x30)*2;
  322.                                         D1 = 0; D2 = 1;
  323.                                         break;               
  324.                                
  325.                                
  326.                                 case 0x44:
  327.                                 case 0x45:
  328.                                 case 0x46:
  329.                                 case 0x47:
  330.                                 case 0x48:
  331.                                 case 0x49:
  332.                                 case 0x4a:
  333.                                 case 0x4b:
  334.                                 case 0x4c:
  335.                                 case 0x4d:
  336.                                 case 0x4e:
  337.                                 case 0x4f:       
  338.                                         right();
  339.                                         R_PWM = 69+(usart_recv-0x40)*2;
  340.                                         L_PWM = 69+(usart_recv-0x40)*2;
  341.                                         D1 = 1; D2 = 0;
  342.                                         break;                       
  343.                                
  344.                                 case 0x54:
  345.                                 case 0x55:
  346.                                 case 0x56:
  347.                                 case 0x57:
  348.                                 case 0x58:
  349.                                 case 0x59:
  350.                                 case 0x5a:
  351.                                 case 0x5b:
  352.                                 case 0x5c:
  353.                                 case 0x5d:
  354.                                 case 0x5e:
  355.                                 case 0x5f:       
  356.                                         front();
  357.                                         R_PWM = 99;
  358.                                         L_PWM = 100-(usart_recv-0x50)*2;
  359.                                   D1 = 1; D2 = 0;
  360.                                         break;                                       
  361.                                

  362.                                 case 0x64:
  363.                                 case 0x65:
  364.                                 case 0x66:
  365.                                 case 0x67:
  366.                                 case 0x68:
  367.                                 case 0x69:
  368.                                 case 0x6a:
  369.                                 case 0x6b:
  370.                                 case 0x6c:
  371.                                 case 0x6d:
  372.                                 case 0x6e:
  373.                                 case 0x6f:       
  374.                                         front();
  375.                                         R_PWM = 100-(usart_recv-0x60)*2;
  376.                                         L_PWM = 99;
  377.                                   D1 = 0; D2 = 1;
  378.                                         break;                                       
  379.                                
  380.        
  381.                                 case 0x74:
  382.                                 case 0x75:
  383.                                 case 0x76:
  384.                                 case 0x77:
  385.                                 case 0x78:
  386.                                 case 0x79:
  387.                                 case 0x7a:
  388.                                 case 0x7b:
  389.                                 case 0x7c:
  390.                                 case 0x7d:
  391.                                 case 0x7e:
  392.                                 case 0x7f:       
  393.                                         back();
  394.                                         R_PWM = 99;
  395.                                         L_PWM = 100-(usart_recv-0x70)*2;
  396.                                         D1 = 1; D2 = 1;
  397.                                         break;               
  398.                                
  399.                                 case 0x84:
  400.                                 case 0x85:
  401.                                 case 0x86:
  402.                                 case 0x87:
  403.                                 case 0x88:
  404.                                 case 0x89:
  405.                                 case 0x8a:
  406.                                 case 0x8b:
  407.                                 case 0x8c:
  408.                                 case 0x8d:
  409.                                 case 0x8e:
  410.                                 case 0x8f:       
  411.                                         back();
  412.                                         R_PWM = 100-(usart_recv-0x80)*2;
  413.                                         L_PWM = 99;
  414.                                   D1 = 1; D2 = 1;
  415.                                         break;                                       
  416.                        
  417.                                 case 0:
  418.                                         stop();
  419.                                   D1 = 1; D2 = 1;
  420.                                         break;
  421.                         }
  422.                 }
  423.         }
  424. }

复制代码


回复

使用道具 举报

ID:182522 发表于 2017-5-14 20:13 | 显示全部楼层
用WiFi模块 ESP8266 然后加红外传感器 单片机 电机 PWM模块 差不多可以实现
回复

使用道具 举报

ID:194034 发表于 2017-5-15 11:57 | 显示全部楼层
智能小车基本不需要电路图,需要电机加上电机驱动模块,加上单片机控制系统,这样就可以跑了,需要什么功能就买什么模块就好,WiFi就买一个WiFi模块,原理图必须按照你买的模块来看原理图,不同模块原理图也不尽相同,程序的话网上好多,这种东西重在自己探索加上请教大神,我刚做一个循迹智能小车也是这么过来的!
回复

使用道具 举报

ID:200257 发表于 2017-5-16 10:23 | 显示全部楼层
蜕变 发表于 2017-5-14 20:13
用WiFi模块 ESP8266 然后加红外传感器 单片机 电机 PWM模块 差不多可以实现

pwm在电机驱动模块上就可以实现吧?还有ESP8266没用过,不熟悉,只对openwrt还有点了解
回复

使用道具 举报

ID:200257 发表于 2017-5-16 10:24 | 显示全部楼层
zhinengxiaoche1 发表于 2017-5-15 11:57
智能小车基本不需要电路图,需要电机加上电机驱动模块,加上单片机控制系统,这样就可以跑了,需要什么功能 ...

我自己设计了了个电路原理图,不知道可不可行,那个需要电源稳压模块吗,我打算搞4节干电池4.8V
回复

使用道具 举报

ID:200257 发表于 2017-5-16 10:25 | 显示全部楼层
huatingxinke 发表于 2017-5-13 16:27
你打算用什么控制器呀   wifi串口现在很多呀

你说wifi模块的控制处理器吗,就ESP8266吧,最常见,也便宜
回复

使用道具 举报

ID:200257 发表于 2017-5-16 10:27 | 显示全部楼层

你这突然的程序让我猝不及防 啊,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表