找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机程序 蓝牙控制舵机角度

[复制链接]
跳转到指定楼层
楼主
ID:580450 发表于 2019-7-24 10:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include <reg52.h>
  2. unsigned char count;      //0.5ms次数标识
  3. sbit pwm =P2^7 ;          //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 dj1=P1^3;
  11. sbit dj2=P1^4;
  12. void Go()
  13. {
  14.         dj1=0;
  15.         dj2=1;
  16. }
  17. void Back()
  18. {
  19.         dj1=1;
  20.         dj2=0;
  21. }
  22. void Stop()
  23. {
  24.         dj1=1;
  25.         dj2=1;
  26. }
  27. void delay(unsigned char i)//延时
  28. {
  29.   unsigned char j,k;
  30.   for(j=i;j>0;j--)
  31.     for(k=125;k>0;k--);
  32. }
  33. void init()        
  34. {

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

  93. count=0;
  94. Time0_Init();
  95. init();
  96.             
  97. while(1)
  98. {
  99.   keyscan();               //按键扫描
  100.   
  101. }
  102. }
  103. void time() interrupt 4
  104. {
  105.         unsigned char receiveData;

  106.         receiveData=SBUF;//出去接收到的数据
  107.         RI = 0;//清除接收中断标志位
  108.         SBUF=receiveData;//将接收到的数据放入到发送寄存器
  109.         while(!TI);                         //等待发送数据完成
  110.         TI=0;        
  111. switch(SBUF)
  112. {
  113. case '1':jd=10;break;//接收到安卓端的'1'字符
  114. case '3':jd=6;break;//接收到安卓端的'2'字符

  115. case '4':jd=11;break;//接收到安卓端的'3'字符
  116. case '6':jd=5;break;//接收到安卓端的'4'字符

  117. case 'A':
  118.         Go();
  119.         break;//接收到安卓端的'5'字符
  120. case '5':jd=8;break;//接收到安卓端的'6'字符
  121. case 'B':
  122.         Back();
  123.         break;
  124. case 'D':
  125.         Stop();
  126.         break;


  127. }                                                                                                         
  128. }
复制代码

全部资料51hei下载地址:
蓝牙 舵机.zip (28 KB, 下载次数: 47)

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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