找回密码
 立即注册

QQ登录

只需一步,快速开始

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

蓝牙控制舵机的单片机源码与APP下载

  [复制链接]
跳转到指定楼层
楼主
蓝牙控制舵机;
通过APP发送数据控制舵机的方向,
设置发送的数字为 11,12,13,14,15,16

单片机源程序如下:
  1. #include <reg52.h>
  2. unsigned char count;      //0.5ms次数标识
  3. sbit pwm =P1^0 ;          //PWM信号输出
  4. sbit jia =P3^0;           //角度增加按键检测IO口
  5. sbit jian =P3^1;           //角度减少按键检测IO口
  6. unsigned char jd;         //角度标识
  7. #define uint unsigned int
  8. #define uchar unsigned char
  9. //引脚定义
  10. sbit led1=P2^0;
  11. sbit led2=P2^1;
  12. sbit led3=P2^2;
  13. void delay(unsigned char i)//延时
  14. {
  15.   unsigned char j,k;
  16.   for(j=i;j>0;j--)
  17.     for(k=125;k>0;k--);
  18. }
  19. void init()        
  20. {

  21. SCON=0x50;
  22. TMOD|=0x20;
  23. TH1=0xfd;
  24. TL1=0xfd;
  25. TCON|=0x40;
  26. TR1=1;
  27. ES = 1;
  28. EA=1;
  29. }
  30. void Time0_Init()          //定时器初始化
  31. {
  32. TMOD|= 0x01;           //定时器0工作在方式1   
  33. IE|= 0x82;
  34. TH0  = 0xff;
  35. TL0  = 0x9c;     //11.0592MZ晶振,0.5ms
  36. TR0=1;                 //定时器开始
  37. }
  38. void Time0_Int() interrupt 1 //中断程序
  39. {
  40. TH0  = 0xff;             //重新赋值
  41. TL0  = 0x9c;
  42.     if(count<jd)              //判断0.5ms次数是否小于角度标识
  43.       pwm=1;                  //确实小于,PWM输出高电平
  44.     else
  45.       pwm=0;                  //大于则输出低电平
  46.     count=(count+1);          //0.5ms次数加1
  47.     count=count%200;     //次数始终保持为40 即保持周期为20ms
  48. }
  49. void keyscan()              //按键扫描
  50. {
  51.    if(jia==0)               //角度增加按键是否按下
  52.   {
  53.     delay(10);              //按下延时,消抖
  54.     if(jia==0)              //确实按下
  55.      {
  56.         jd=1;               //角度标识加1
  57.       count=0;              //按键按下 则20ms周期从新开始
  58.                    //已经是180度,则保持
  59.       while(jia==0);        //等待按键放开
  60.      }
  61.   }
  62.   if(jian==0)                //角度减小按键是否按下
  63.   {
  64.     delay(10);
  65.     if(jian==0)
  66.      {
  67.        jd=2;               //角度标识减1
  68.       count=0;
  69.                   //已经是0度,则保持
  70.       while(jian==0);
  71.      }
  72.   }
  73. }
  74. void main()
  75. {

  76. count=0;
  77. Time0_Init();
  78. init();
  79.             
  80. while(1)
  81. {
  82.   keyscan();               //按键扫描
  83.   
  84. }
  85. }
  86. void time() interrupt 4
  87. {
  88.         unsigned char receiveData;

  89.         receiveData=SBUF;//出去接收到的数据
  90.         RI = 0;//清除接收中断标志位
  91.         SBUF=receiveData;//将接收到的数据放入到发送寄存器
  92.         while(!TI);                         //等待发送数据完成
  93.         TI=0;        
  94. switch(SBUF)
  95. {
  96. case '1':jd=15;break;//接收到安卓端的'1'字符
  97. case '2':jd=16;break;//接收到安卓端的'2'字符

  98. case '3':jd=7;break;//接收到安卓端的'3'字符
  99. case '4':jd=8;break;//接收到安卓端的'4'字符

  100. case '5':led3=0;break;//接收到安卓端的'5'字符
  101. case '6':led3=1;break;//接收到安卓端的'6'字符
  102. }                                                                                                         
  103. }
复制代码

所有资料51hei提供下载:
app.zip (54.61 KB, 下载次数: 104)
蓝牙控制舵机.zip (21.26 KB, 下载次数: 130)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:313015 发表于 2018-5-25 11:32 | 只看该作者
请问使用的是什么舵机和驱动器,然后是如何接线的,求告知,感激!!!!!!1
回复

使用道具 举报

板凳
ID:292882 发表于 2018-8-24 09:42 | 只看该作者
这个不是用按键控制舵机的吗
回复

使用道具 举报

地板
ID:514746 发表于 2019-4-18 21:57 来自手机 | 只看该作者
请问为什么我使用手机发送字符蓝牙无法控制呢
回复

使用道具 举报

5#
ID:501687 发表于 2019-5-20 13:10 来自手机 | 只看该作者
请问大神,有用蓝牙控制一个电机和一个舵机的程序吗?
回复

使用道具 举报

6#
ID:366895 发表于 2019-10-29 16:33 | 只看该作者
好厉害的样子
回复

使用道具 举报

7#
ID:615262 发表于 2019-11-28 01:32 来自手机 | 只看该作者
可以请教一下吗
回复

使用道具 举报

8#
ID:588581 发表于 2019-12-19 18:50 来自手机 | 只看该作者
你好,我想问一下这个SG90的舵机可以使用嘛
回复

使用道具 举报

9#
ID:770413 发表于 2020-6-13 16:57 | 只看该作者
这是什么舵机和什么蓝牙模块呢?
回复

使用道具 举报

10#
ID:900662 发表于 2021-4-15 10:39 | 只看该作者
我觉得蓝牙控制和舵机控制还是有一定区别的,因为我用按键控制完全没问题,但一用蓝牙就出问题了,太难了
回复

使用道具 举报

11#
ID:917960 发表于 2021-5-9 11:05 | 只看该作者
switch(SBUF)
{
case '1':jd=15;break;//接收到安卓端的'1'字符
case '2':jd=16;break;//接收到安卓端的'2'字符

case '3':jd=7;break;//接收到安卓端的'3'字符
case '4':jd=8;break;//接收到安卓端的'4'字符

case '5':led3=0;break;//接收到安卓端的'5'字符
case '6':led3=1;break;//接收到安卓端的'6'字符
}      
case后面我加不了延时函数,求解,我想发送字符后,舵机转动一定角度,隔两秒在转回来,咋咋整,它不给我延时
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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