找回密码
 立即注册

QQ登录

只需一步,快速开始

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

蓝牙单片机控制小车地盘源程序

[复制链接]
跳转到指定楼层
楼主
ID:360610 发表于 2018-7-3 17:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  1. /************************************
  2. 课题:蓝牙控制小车
  3. 效果:小车能与手机蓝牙连接,实现前进、后退、左转、右转、开灯、鸣笛、转向灯、重力感应控制等功能。
  4. 作者:change
  5. 店铺:穿山乙电子
  6. 硬件链接:
  7.         左电机控制端口:P0.0、P0.1
  8.         右电机控制端口:P0.2、P0.3                     
  9. *************************************/

  10. #include<reg52.h>//声明头文件
  11. #define uchar unsigned char//宏定义
  12. #define uint unsigned int//宏定义
  13. #define aa 35//左轮速度调节值
  14. #define bb 35//右轮速度调节值

  15. sbit deng=P2^0;//前车灯
  16. sbit y=P2^1;//右转向灯
  17. sbit z=P2^2;//左转向灯
  18. sbit BEEP=P2^3;//蜂鸣器

  19. sbit you1=P0^3;//右轮正转信号端
  20. sbit you2=P0^2;//右轮倒转信号端
  21. sbit zuo1=P0^1;//左轮正转信号端
  22. sbit zuo2=P0^0;//左轮倒转信号端

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

  24. void delay(uint z)//一个带参数的延时程序
  25. {
  26.         int i,j;//定义两个变量
  27.         for(i=10;i>0;i--)
  28.         for(j=z;j>0;j--);//将参数z赋值给j
  29. }

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

  42. void go1()//前进子程序
  43. {
  44.         zuo1=1;
  45.         zuo2=0;//左边轮子正转
  46.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  47.         zuo2=1;//关闭左边轮子

  48.         you1=1;
  49.         you2=0;        //右边轮子正转
  50.         delay(bb);//pwm有用值,越大右边的轮子越快
  51.         you2=1;//关闭右边轮子

  52.         delay(100);//pwm无用值,越大,小车跑的越慢
  53.         z=1;
  54.         y=1;//关闭转向灯
  55. }

  56. void go2()//前进子程序
  57. {
  58.         zuo1=1;
  59.         zuo2=0;//左边轮子正转
  60.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  61.         zuo2=1;//关闭左边轮子

  62.         you1=1;
  63.         you2=0;        //右边轮子正转
  64.         delay(bb);//pwm有用值,越大右边的轮子越快
  65.         you2=1;//关闭右边轮子

  66.         delay(80);//pwm无用值,越大,小车跑的越慢
  67.         z=1;
  68.         y=1;//关闭转向灯
  69. }

  70. void go3()//前进子程序
  71. {
  72.         zuo1=1;
  73.         zuo2=0;//左边轮子正转
  74.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  75.         zuo2=1;//关闭左边轮子

  76.         you1=1;
  77.         you2=0;        //右边轮子正转
  78.         delay(bb);//pwm有用值,越大右边的轮子越快
  79.         you2=1;//关闭右边轮子

  80.         delay(60);//pwm无用值,越大,小车跑的越慢
  81.         z=1;
  82.         y=1;//关闭转向灯
  83. }

  84. void go4()//前进子程序
  85. {
  86.         zuo1=1;
  87.         zuo2=0;//左边轮子正转
  88.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  89.         zuo2=1;//关闭左边轮子

  90.         you1=1;
  91.         you2=0;        //右边轮子正转
  92.         delay(bb);//pwm有用值,越大右边的轮子越快
  93.         you2=1;//关闭右边轮子

  94.         delay(40);//pwm无用值,越大,小车跑的越慢
  95.         z=1;
  96.         y=1;//关闭转向灯
  97. }

  98. void go5()//前进子程序
  99. {
  100.         zuo1=1;
  101.         zuo2=0;//左边轮子正转
  102.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  103.         zuo2=1;//关闭左边轮子

  104.         you1=1;
  105.         you2=0;        //右边轮子正转
  106.         delay(bb);//pwm有用值,越大右边的轮子越快
  107.         you2=1;//关闭右边轮子

  108.         delay(20);//pwm无用值,越大,小车跑的越慢
  109.         z=1;
  110.         y=1;//关闭转向灯
  111. }

  112. void go6()//前进子程序
  113. {
  114.         zuo1=1;
  115.         zuo2=0;//左边轮子正转
  116.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  117.         zuo2=1;//关闭左边轮子

  118.         you1=1;
  119.         you2=0;        //右边轮子正转
  120.         delay(bb);//pwm有用值,越大右边的轮子越快
  121.         you2=1;//关闭右边轮子

  122.         z=1;
  123.         y=1;//关闭转向灯
  124. }

  125. void hui1()//小车后退的子程序
  126. {
  127.         zuo1=0;
  128.         zuo2=1;//左边轮子倒转
  129.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  130.         zuo1=1;//关闭左边轮子

  131.         you1=0;
  132.         you2=1;        //右边轮子倒转
  133.         delay(bb);//pwm有用值,越大右边的轮子越快
  134.         you1=1;//关闭右边轮子

  135.         delay(100);//pwm无用值,越大,小车跑的越慢
  136.         z=1;
  137.         y=1;//关闭转向灯
  138. }

  139. void hui2()//小车后退的子程序
  140. {
  141.         zuo1=0;
  142.         zuo2=1;//左边轮子倒转
  143.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  144.         zuo1=1;//关闭左边轮子

  145.         you1=0;
  146.         you2=1;        //右边轮子倒转
  147.         delay(bb);//pwm有用值,越大右边的轮子越快
  148.         you1=1;//关闭右边轮子

  149.         delay(80);//pwm无用值,越大,小车跑的越慢
  150.         z=1;
  151.         y=1;//关闭转向灯
  152. }

  153. void hui3()//小车后退的子程序
  154. {
  155.         zuo1=0;
  156.         zuo2=1;//左边轮子倒转
  157.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  158.         zuo1=1;//关闭左边轮子

  159.         you1=0;
  160.         you2=1;        //右边轮子倒转
  161.         delay(bb);//pwm有用值,越大右边的轮子越快
  162.         you1=1;//关闭右边轮子

  163.         delay(60);//pwm无用值,越大,小车跑的越慢
  164.         z=1;
  165.         y=1;//关闭转向灯
  166. }

  167. void hui4()//小车后退的子程序
  168. {
  169.         zuo1=0;
  170.         zuo2=1;//左边轮子倒转
  171.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  172.         zuo1=1;//关闭左边轮子

  173.         you1=0;
  174.         you2=1;        //右边轮子倒转
  175.         delay(bb);//pwm有用值,越大右边的轮子越快
  176.         you1=1;//关闭右边轮子

  177.         delay(40);//pwm无用值,越大,小车跑的越慢
  178.         z=1;
  179.         y=1;//关闭转向灯
  180. }
  181. void hui5()//小车后退的子程序
  182. {
  183.         zuo1=0;
  184.         zuo2=1;//左边轮子倒转
  185.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  186.         zuo1=1;//关闭左边轮子

  187.         you1=0;
  188.         you2=1;        //右边轮子倒转
  189.         delay(bb);//pwm有用值,越大右边的轮子越快
  190.         you1=1;//关闭右边轮子

  191.         delay(20);//pwm无用值,越大,小车跑的越慢
  192.         z=1;
  193.         y=1;//关闭转向灯
  194. }
  195. void hui6()//小车后退的子程序
  196. {
  197.         zuo1=0;
  198.         zuo2=1;//左边轮子倒转
  199.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  200.         zuo1=1;//关闭左边轮子

  201.         you1=0;
  202.         you2=1;        //右边轮子倒转
  203.         delay(bb);//pwm有用值,越大右边的轮子越快
  204.         you1=1;//关闭右边轮子

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

  208. void turnleft()//小车左转弯子程序
  209. {
  210.         
  211.         z=~z;//左转向灯打开

  212.         zuo1=1;
  213.         zuo2=1;//左边轮子停止转动
  214.         you1=1;
  215.         you2=0;        //右边轮子正转
  216.         delay(bb);//pwm有用值,越大右边的轮子越快
  217.         you2=1;//右边轮子停止
  218.         delay(50);//pwm无用值,越大,小车跑的越慢
  219.         
  220.         z=1;
  221.         y=1;//关闭转向灯
  222. }

  223. void turnright()//小车右转弯子程序
  224. {
  225.         y=~y;//右转向灯打开

  226.         zuo1=1;
  227.         zuo2=0;//左边轮子正转
  228.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  229.         zuo2=1;//左边轮子停止

  230.         you1=1;
  231.         you2=1;        //右边轮子停止
  232.         delay(50);//pwm无用值,越大,小车跑的越慢
  233.         z=1;
  234.         y=1;//关闭转向灯
  235.         
  236. }
  237. void down()//停止子程序
  238. {
  239.         zuo1=1;
  240.         zuo2=1;
  241.         you1=1;
  242.         you2=1;        //左右轮全部停止
  243.         z=1;
  244.         y=1;//关闭转向灯
  245. }

  246. void main()//主程序
  247. {
  248.         init();//调用初始化子程序
  249.         while(1)//死循环
  250.         {
  251.                     if(a==0x14||a==0x15||a==0x54||a==0x55||a==0x64||a==0x65)//如果是就前进
  252.                         go1();
  253.                         if(a==0x16||a==0x17||a==0x56||a==0x57||a==0x66||a==0x67)//如果是就前进
  254.                         go2();
  255.                         if(a==0x18||a==0x19||a==0x58||a==0x59||a==0x68||a==0x69)//如果是就前进
  256.                         go3();
  257.                         if(a==0x1a||a==0x1b||a==0x5a||a==0x5b||a==0x6a||a==0x6b)//如果是就前进
  258.                         go4();
  259.                         if(a==0x1c||a==0x1d||a==0x5c||a==0x5d||a==0x6c||a==0x6d)//如果是就前进
  260.                         go5();
  261.                         if(a==0x1e||a==0x1f||a==0x5e||a==0x5f||a==0x6e||a==0x6f)//如果是就前进
  262.                         go6();

  263.                     if(a==0x24||a==0x25||a==0x74||a==0x75||a==0x84||a==0x85)//如果是就后退
  264.                         hui1();
  265.                         if(a==0x26||a==0x27||a==0x76||a==0x77||a==0x86||a==0x87)//如果是就后退
  266.                         hui2();
  267.                         if(a==0x28||a==0x29||a==0x78||a==0x79||a==0x88||a==0x89)//如果是就后退
  268.                         hui3();
  269.                         if(a==0x2a||a==0x2b||a==0x7a||a==0x7b||a==0x8a||a==0x8b)//如果是就后退
  270.                         hui4();
  271.                         if(a==0x2c||a==0x2d||a==0x7c||a==0x7d||a==0x8c||a==0x8d)//如果是就后退
  272.                         hui5();
  273.                         if(a==0x2e||a==0x2f||a==0x7e||a==0x7d||a==0x8e||a==0x8f)//如果是就后退
  274.                         hui6();

  275.                         if(a==0x3f)//如果是0x3f就左转
  276.                         turnleft();
  277.                         if(a==0x4f)//如果是0x4f就右转
  278.                         turnright();
  279.                         if(a==0x00)//如果是0x00就停止
  280.                         down();
  281.                         if(a==0xa0)//如果是0xa0车灯打开
  282.                         deng=0;
  283.                         if(a==0xb0)//如果是0xb0车灯关闭
  284.                         deng=1;
  285.                         if(a==0xc0)//如果是0xc0蜂鸣器鸣响
  286.                         BEEP=0;                        
  287.                         if(a==0xd0)//如果是0xd0蜂鸣器关
  288.                         BEEP=1;
  289.                         
  290.                         else
  291.                         down();
  292.                 }        
  293. }        

  294. void chuan() interrupt 4//串口中断服务程序
  295. {
  296.         RI=0;//软件清除串口响应
  297.         a=SBUF;//读取单片机串口接受的蓝牙模块发送的数据
  298. }
  299. /******************************************

  300. 知识产权声明:本程序为穿山乙电子原创作品,
  301. 拥有绝对的知识产权。未经授权,任何单位和个
  302. 人不得公开发布或用于任何商业用途,特此声明!

  303. *******************************************/

复制代码

评分

参与人数 1黑币 +5 收起 理由
组织者组织啊 + 5

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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