找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机舵机控制程序求助

[复制链接]
跳转到指定楼层
楼主
ID:343797 发表于 2020-3-15 15:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
51下载的程序,想做成按键按下旋转90度,按键松开舵机归零,如此反复。 修改了但是控制会有问题,大神求解

单片机源程序如下:
#include<reg52.h>
sbit SG_PWM=P3^2;
sbit Key_1=P1^1;
unsigned char count=0;
unsigned char PWM_count=1;         //1--0度,2--45度,3--90度,4--135度,5--180度
void delay(unsigned char i)          //延时
{
  unsigned char j,k;
  for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}
void Timer_Init()
{
  TMOD=0X01;      //T0定时方式1
  TH0=0Xfe;
  TL0=0X33;       //计数初值设置为0.5ms      每0.5ms进入一次中断,晶振频率:11.0592MHZ
  ET0=1;          //打开定时器0的中断
  TR0=1;          //打开定时器0
  EA=1;           //开总中断
}
void Timer() interrupt 1      //特别注意此处,0--外部中断0,1--定时器中断0,2--外部中断1,3--定时器中断1,4--串行口中断1
{
  TR0=0;
  TH0=0Xfe;
  TL0=0X33;       //重新赋计数初值为0.5ms
  if(count<=PWM_count)
  {
    SG_PWM=1;
  }
  else
  {
    SG_PWM=0;
  }
  count++;
  if(count>=40)
  {
    count=0;
  }
  TR0=1;
}
void main()
{
  Timer_Init();
  while(1)
  {
   if(Key_1==0)
   {
     delay(10);
     EA=0;
     if(Key_1==0)
     {
      PWM_count=3;
      count=0;
      EA=1;
     }
     while(!Key_1);
     PWM_count=1;
   }
  }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:384109 发表于 2020-3-15 19:47 | 只看该作者
while(!Key_1);
     PWM_count=1;
while后面少了大括号吧
回复

使用道具 举报

板凳
ID:423511 发表于 2020-3-15 20:34 | 只看该作者
程序没问题啊,我用你的程序拷入板子,能正常控制舵机。我用的SG90舵机。
回复

使用道具 举报

地板
ID:423511 发表于 2020-3-15 20:41 | 只看该作者
你的计数初值有点大,改成0.1试试,我试了一下效果不错。
回复

使用道具 举报

5#
ID:423511 发表于 2020-3-15 20:55 | 只看该作者
主程序中把EA=0和EA=1注释掉就好了。
void main()
{
  Timer_Init();
  while(1)
  {
   if(Key_1==0)
   {
     delay(1);
//     EA=0;
     if(Key_1==0)
     {
      PWM_count=15;
      count=0;
//      EA=1;
     }
   }
         while(!Key_1);
   PWM_count=1;
  }
}               
回复

使用道具 举报

6#
ID:343797 发表于 2020-3-15 21:48 来自手机 | 只看该作者
weiweimao1 发表于 2020-3-15 20:55
主程序中把EA=0和EA=1注释掉就好了。
void main()
{

谢谢  我试试
回复

使用道具 举报

7#
ID:343797 发表于 2020-3-16 10:44 来自手机 | 只看该作者
weiweimao1 发表于 2020-3-15 20:55
主程序中把EA=0和EA=1注释掉就好了。
void main()
{

用的是12m晶振吗
回复

使用道具 举报

8#
ID:423511 发表于 2020-3-21 13:49 | 只看该作者
嗯  普中的板子  89C51
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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