找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8933|回复: 6
打印 上一主题 下一主题
收起左侧

蓝牙遥控小车程序

[复制链接]
跳转到指定楼层
楼主
ID:166747 发表于 2017-2-26 15:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文描述基于单片机的手机蓝牙遥控小车设计,该系统是以89C51单片机为核心控制器,包含了电机驱动模块、主控制器模块、蓝牙通信模块、键盘模块、电源模块等。该系统通过2.4GHz蓝牙通信模块实现小车在手机遥控的控制下转向、前进、倒退、自动定位、小车精确转弯、等功能。文中首先描述了课题的研究背景、目的、意义、内容及对开发工具做了简单介绍;其次描述了系统功能,并根据系统功能进行了总体设计;再次详细描述各模块的设计,主要包括主控制器模块、电机驱动模块、蓝牙控制模块等,蓝牙模块有小车上的蓝牙和手机蓝牙,根据手机蓝牙的功能在手机上开发遥控设置进行短距离的无线遥控,手机Android系统是一种基于Linux的自由源代码开发系统,手机界面的设计是在Eclipse集成开发环境下完成的;最后描述系统的仿真与调试
  1. void uart_init()
  2. {
  3. TMOD = 0X20;
  4. TH1 = 0XFD;//晶振11.0592,波特率9600
  5. TL1 = 0XFD;
  6. SCON = 0XD0;
  7. PCON = 0X00;
  8. IE = 0X90;
  9. TR1 = 1;
  10. TI=1;}
  11. 中断接收函数只要是负责接受蓝牙发送过来的数据,函数原型如下:
  12. void serial () interrupt 4 using 3
  13. { if (RI)// 接收中断标志位
  14. { RI = 0 ;
  15. uart_char=SBUF;//读取}
  16. }
  17. (3)由于无线接收器和单片机通信的方式是串口,为了小车能够接受主控制器发来的无线信号,所以单片机最好使用串口中断的方式,在main 函数里面主要就是处理中断接收到的数据,并控制电机的转动,处理函数如下:
  18. #include<reg52.h>//声明头文件
  19. #define uchar unsigned char//宏定义
  20. #define uint unsigned int//宏定义
  21. #define aa 35//左轮速度调节值
  22. #define bb 35//右轮速度调节值
  23. sbit deng=P2^0;//前车灯
  24. sbit y=P2^1;//右转向灯
  25. sbit z=P2^2;//左转向灯sbit you1=P0^3;//右轮正转信号端
  26. sbit you2=P0^2;//右轮倒转信号端
  27. sbit zuo1=P0^1;//左轮正转信号端
  28. sbit zuo2=P0^0;//左轮倒转信号端

  29. uchar a=0;//定义一个变量a,用来读取串口的数据

  30. void delay(uint z)//一个带参数的延时程序
  31. {
  32.         int i,j;//定义两个变量
  33.         for(i=10;i>0;i--)
  34.         for(j=z;j>0;j--);//将参数z赋值给j
  35. }

  36. void init()//初始化子程序
  37. {
  38.         TMOD=0x20;//设置定时器T1为工作方式2
  39.         TH1=0xfd;
  40.         TL1=0xfd;//T1定时器装初值
  41.         TR1=1;//启动定时器T1
  42.         REN=1;//允许串口接收
  43.         SM0=0;
  44.         SM1=1;//设置串口工作方式1
  45.         EA=1;//开总中断
  46.         ES=1;//开串口中断
  47. }

  48. void go1()//前进子程序
  49. {
  50.         zuo1=1;
  51.         zuo2=0;//左边轮子正转
  52. delay(aa);
  53.         zuo2=1;//关闭左边轮子

  54.         you1=1;
  55.         you2=0;        //右边轮子正转
  56.         delay(bb);
  57.         you2=1;//关闭右边轮子

  58.         delay(100);
  59.         z=1;
  60.         y=1;//关闭转向灯
  61. }

  62. void go2()//前进子程序
  63. {
  64.         zuo1=1;
  65.         zuo2=0;//左边轮子正转delay(aa);
  66.         zuo2=1;//关闭左边轮子

  67.         you1=1;
  68.         you2=0;        //右边轮子正转
  69.         delay(bb);
  70.         you2=1;//关闭右边轮子

  71.         delay(80);
  72.         z=1;
  73.         y=1;//关闭转向灯
  74. }

  75. void go3()//前进子程序
  76. {
  77.         zuo1=1;
  78.         zuo2=0;//左边轮子正转
  79.         delay(aa);
  80.         zuo2=1;//关闭左边轮子

  81.         you1=1;
  82.         you2=0;        //右边轮子正转
  83.         delay(bb);
  84.         you2=1;//关闭右边轮子

  85.         delay(60);
  86.         z=1;
  87.         y=1;//关闭转向灯
  88. }

  89. void go4()//前进子程序
  90. {
  91.         zuo1=1;
  92.         zuo2=0;//左边轮子正转
  93.         delay(aa);
  94.         zuo2=1;//关闭左边轮子

  95.         you1=1;
  96.         you2=0;        //右边轮子正转
  97.         delay(bb);
  98.         you2=1;//关闭右边轮子

  99.         delay(40);
  100.         z=1;
  101.         y=1;//关闭转向灯
  102. }

  103. void go5()//前进子程序
  104. {
  105.         zuo1=1;
  106.         zuo2=0;//左边轮子正转
  107.         delay(aa);
  108.         zuo2=1;//关闭左边轮子

  109.         you1=1;
  110.         you2=0;        //右边轮子正转
  111.         delay(bb);
  112.         you2=1;//关闭右边轮子

  113.         delay(20);
  114.         z=1;
  115.         y=1;//关闭转向灯
  116. }

  117. void go6()//前进子程序
  118. {
  119.         zuo1=1;
  120.         zuo2=0;//左边轮子正转
  121.         delay(aa);
  122.         zuo2=1;//关闭左边轮子

  123.         you1=1;
  124.         you2=0;        //右边轮子正转
  125.         delay(bb);
  126.         you2=1;//关闭右边轮子

  127.         z=1;
  128.         y=1;//关闭转向灯
  129. }

  130. void hui1()//小车后退的子程序
  131. {
  132.         zuo1=0;
  133.         zuo2=1;//左边轮子倒转
  134.         delay(aa);
  135.         zuo1=1;//关闭左边轮子

  136.         you1=0;
  137.         you2=1;        //右边轮子倒转
  138.         delay(bb);
  139.         you1=1;//关闭右边轮子

  140.         delay(100);
  141.         z=1;
  142.         y=1;//关闭转向灯
  143. }

  144. void hui2()//小车后退的子程序
  145. {
  146.         zuo1=0;
  147.         zuo2=1;//左边轮子倒转
  148.         delay(aa);
  149.         zuo1=1;//关闭左边轮子
  150.         you1=0;
  151.         you2=1;        //右边轮子倒转
  152.         delay(bb);
  153.         you1=1;//关闭右边轮子
  154.         delay(80);
  155.         z=1;
  156.         y=1;//关闭转向灯
  157. }

  158. void hui3()//小车后退的子程序
  159. {
  160.         zuo1=0;
  161.         zuo2=1;//左边轮子倒转
  162.         delay(aa);
  163.         zuo1=1;//关闭左边轮子

  164.         you1=0;
  165.         you2=1;        //右边轮子倒转
  166.         delay(bb);
  167.         you1=1;//关闭右边轮子

  168.         delay(60);
  169.         z=1;
  170.         y=1;//关闭转向灯
  171. }

  172. void hui4()//小车后退的子程序
  173. {
  174.         zuo1=0;
  175.         zuo2=1;//左边轮子倒转
  176.         delay(aa);
  177.         zuo1=1;//关闭左边轮子
  178.         you1=0;
  179.         you2=1;        //右边轮子倒转
  180.         delay(bb);
  181.         you1=1;//关闭右边轮子

  182.         delay(40);
  183.         z=1;
  184.         y=1;//关闭转向灯
  185. }
  186. void hui5()//小车后退的子程序
  187. {
  188.         zuo1=0;
  189.         zuo2=1;//左边轮子倒转
  190.         delay(aa);
  191.         zuo1=1;//关闭左边轮子
  192.         you1=0;
  193.         you2=1;        //右边轮子倒转
  194.         delay(bb);
  195.         you1=1;//关闭右边轮子

  196.         delay(20);        z=1;
  197.         y=1;//关闭转向灯
  198. }
  199. void hui6()//小车后退的子程序
  200. {
  201.         zuo1=0;zuo2=1;//左边轮子倒转delay(aa);
  202.         zuo1=1;//关闭左边轮子
  203. you1=0;you2=1;        //右边轮子倒转delay(bb);
  204.         you1=1;//关闭右边轮子

  205.         z=1;
  206.         y=1;//关闭转向灯
  207. }

  208. void turnleft()//小车左转弯子程序
  209. {
  210.         
  211.         z=~z;//左转向灯打开 uo1=1;zuo2=1;//左边轮子停止转动you1=1;
  212. you2=0;        //右边轮子正转 elay(bb); you2=1;//右边轮子停止 elay(50);
  213.         z=1;y=1;//关闭转向灯
  214. }

  215. void turnright()//小车右转弯子程序
  216. {
  217.         y=~y;//右转向灯打开 uo1=1;2=0;//左边轮子正转
  218.         delay(aa);
  219.         zuo2=1;//左边轮子停止you1=1;you2=1;        //右边轮子停止
  220.         delay(50);        z=1;y=1;//关闭转向灯
  221. }
  222. void down()//停止子程序
  223. {
  224.         zuo1=1;zuo2=1;you1=1;you2=1;        //左右轮全部停止
  225.         z=1;y=1;//关闭转向灯}
  226. void main()//主程序
  227. {
  228.         init();//调用初始化子程序


  229. while(1)//死循环
  230.         {
  231. if(a==0x14||a==0x15||a==0x54||a==0x55||a==0x64||a==0x65)//如果是就前进
  232.         go1();
  233.         if(a==0x16||a==0x17||a==0x56||a==0x57||a==0x66||a==0x67)//如果是就前进
  234.         go2();
  235.         if(a==0x18||a==0x19||a==0x58||a==0x59||a==0x68||a==0x69)//如果是就前进
  236.         go3();
  237.         if(a==0x1a||a==0x1b||a==0x5a||a==0x5b||a==0x6a||a==0x6b)//如果是就前进
  238.         go4();
  239.         if(a==0x1c||a==0x1d||a==0x5c||a==0x5d||a==0x6c||a==0x6d)//如果是就前进
  240.         go5();
  241.         if(a==0x1e||a==0x1f||a==0x5e||a==0x5f||a==0x6e||a==0x6f)//如果是就前进
  242.         go6();
  243.         if(a==0x24||a==0x25||a==0x74||a==0x75||a==0x84||a==0x85)//如果是就后退
  244.         hui1();
  245.         if(a==0x26||a==0x27||a==0x76||a==0x77||a==0x86||a==0x87)//如果是就后退
  246.         hui2();
  247.         if(a==0x28||a==0x29||a==0x78||a==0x79||a==0x88||a==0x89)//如果是就后退
  248.         hui3();
  249.         if(a==0x2a||a==0x2b||a==0x7a||a==0x7b||a==0x8a||a==0x8b)//如果是就后退
  250.         hui4();
  251.         if(a==0x2c||a==0x2d||a==0x7c||a==0x7d||a==0x8c||a==0x8d)//如果是就后退
  252.         hui5();
  253.         if(a==0x2e||a==0x2f||a==0x7e||a==0x7d||a==0x8e||a==0x8f)//如果是就后退
  254.         hui6();
  255. if(a==0x3f)//如果是0x3f就左转
  256.                         turnleft();
  257.                         if(a==0x4f)//如果是0x4f就右转
  258.                         turnright();
  259.                         if(a==0x00)//如果是0x00就停止
  260.                         down();
  261.                         if(a==0xa0)//如果是0xa0车灯打开
  262.                         deng=0;
  263.                         if(a==0xb0)//如果是0xb0车灯关闭
  264.                         deng=1;
  265.                         else
  266.                         down();
  267.                 }        
  268. }        
  269. void chuan() interrupt 4//串口中断服务程序
  270. {
  271.         RI=0;//软件清除串口响应
  272.         a=SBUF;//读取单片机串口接受的蓝牙模块发送的数据
  273. }
复制代码


评分

参与人数 2黑币 +13 收起 理由
莫德尔 + 8 赞一个!
1205693382 + 5 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:166893 发表于 2017-3-16 20:44 | 只看该作者
兄弟我做了个小车  但是还没有程序  我是用两个L298N的驱动模块并联控制四个轮子  左边驱动模块控制左边两个轮子 右边驱动模块控制右边两个轮子  用的HC-06蓝牙模块  STC89C52单片机    驱动IN口接得P2口  我这个小车能不能用你这个程序呢
回复

使用道具 举报

板凳
ID:190284 发表于 2017-5-10 13:50 | 只看该作者
请问有没有具体的电路图和蓝牙串口的代码
回复

使用道具 举报

地板
ID:317135 发表于 2018-6-1 08:31 | 只看该作者
终于可以看得懂这个程序了,楼主牛逼,点赞,加关注
回复

使用道具 举报

5#
ID:328609 发表于 2018-7-4 22:10 | 只看该作者
小白表示没看懂
回复

使用道具 举报

6#
ID:372705 发表于 2018-7-31 17:50 | 只看该作者
赞一个
回复

使用道具 举报

7#
ID:395600 发表于 2018-9-9 12:54 | 只看该作者
真的非常棒,很有帮助
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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