永发信息网

单片机控制电调的程序

答案:1  悬赏:70  手机版
解决时间 2021-12-25 20:05
http://www.amobbs.com/forum.php?mod=viewthread&tid=5484303&highlight=%E6%97%A0%E5%88%B7%E7%94%B5%E6%9C%BA
此链接的控制程序,跪求了,阿莫的大神们
最佳答案
做舵机信号测试一下用可以51的定时器中断实现。舵机信号一般脉宽为0.5ms~2.5ms的PWM方波周期20ms。
做四轴的话还是建议采用ARM,国外有个关于四轴的开源网站可以参考。
了解舵机信号可以参考 百度文库搜:航模舵机控制原详解

#include <reg51.h> 
#define uchar unsigned char 
#define uint unsigned int


uchar key_stime_counter,hight_votage=15,timeT_counter; 
bit key_stime_ok;

 
sbit control_signal=P0^0; 
sbit turn_left=P3^4;
sbit turn_right=P3^5;


void TimerInit()
{     
control_signal=0;
TMOD=0x01;                               //设置定时器0为工作方式1
EA=1;                                   //开总中断
ET0=1;                                   //定时器0中断允许
    TH0 = 0xFF;                        //定时器装初值
    TL0 = 0xA3;
TR0=1;          //启动定时器0                                
}

 
void timer0(void) interrupt 1 using 0 
{
    TH0=0xFF;
    TL0=0xA3; //定时器0重新装入数值

if (++key_stime_counter>=200)
{
     key_stime_counter=0;
   control_signal=1;
   key_stime_ok = 1;               // 20ms到 
      timeT_counter=0;
}

if (key_stime_ok&&(++timeT_counter>=hight_votage))
{
   key_stime_ok=0;
     timeT_counter=0;
   control_signal=0;              // hight_votage*0.1ms到 
}
}


uchar keyscan(void)
{
static char key_state = 0;
    static char key_value = 0;
uchar key_press, key_return = 0;
key_press=turn_left&turn_right;     //读按键I/O电平

switch (key_state) 
{
   case 0 :     // 按键初始态
    if (key_press==0) key_state = 1; // 键被按下,但需要确认是否是干扰
    break;
   case 1 :     // 按键确认态
    if (key_press==0)//如有键按下则不是干扰,判断键值
    {                   
                if(turn_left==0)               //判断是哪一个按键被按下
                 key_value=1;       //按键较多时可采用switch选择结构
             else if(turn_right==0)
                 key_value=2;
             else
                 key_value=0;

     key_state = 2; // 状态转换到键释放态
    }
    else
     key_state = 0; // 按键已抬起,属于干扰,转换到按键初始态
    break;
   case 2 :
    if (key_press==1) 
    {
        key_return=key_value;//按键释放后再输出键值,如果按下键就输出则可省略key_value
     key_value=0;
       key_state = 0; //如果按键释放,转换到按键初始态
    }
    break;
}

return key_return; //返回键值
}


void key_operation(void)
{    
    switch (keyscan())      //根据键值不同,执行不同的内容
    {
        case 1:
    hight_votage-=1;
    if(hight_votage<5)
     hight_votage=5;
         break;
        case 2:
    hight_votage+=1;
    if(hight_votage>25)
     hight_votage=25;
         break;
        default :
         break;
    } 
}


//LED显示函数
void diplay()
{
if(hight_votage>=5&&hight_votage<=7) P1=0xFD;   //1灯亮,舵机接近或到达右转极限位置
if(hight_votage>7&&hight_votage<=10) P1=0xFB;    //2灯亮
if(hight_votage>10&&hight_votage<=13) P1=0xF7;    //3灯亮
if(hight_votage>13&&hight_votage<=16) P1=0xEF;    //4灯亮,舵机到达中间位置
if(hight_votage>16&&hight_votage<=19) P1=0xDF;   //5灯亮
if(hight_votage>19&&hight_votage<=22) P1=0xBF;   //6灯亮
if(hight_votage>22&&hight_votage<=25) P1=0x7F;   //7灯亮,舵机接近或到达左转极限位置
}

 
void main(void)
{
TimerInit();
    while(1)
{
   key_operation(); 
   diplay();
}
}以上代码我也是在网上下来的没做测试(现在在玩STM32。51的东西都收拾起来了)可以供你参考。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
中国网球明星都有谁
单选题My father and his te
自信自强,使人走向成功,跨跃难关,自信自强
4岁小孩一天几次大便是怎么回事
年月支有寅,印绶带煞,可化凶为吉。这句话是
户籍制度阅读答案
老婆恶意伤人离婚要走那些程序
我的新奥拓的保养灯一直在亮,那么关闭嘛?
请问,20尺柜,40尺柜和40尺高柜可以装多少件
飙山狼牌运动鞋好吗?耐穿吗?
如图所示的装置中,夹子处于关闭状态.给左边
网易邮箱可以修改安全问题么
夏天出汗多穿什么衣服
人生地不熟,一个人去上海找什么工作? 进工
On the third floor there are two rooms, i
推荐资讯
Ihaveafriend__________Millie.A.callB.tocal
冬季,我国南北方温差大,除了纬度这一主导因
陆游原名叫什么?
千米网是做什么的
单选题下列有关文学常识及课文内容的表述,有
花盆里加沙对植物好吗?
为什么我总感觉17k的点击率是假的?每天都有
个十百千万十万百万千万亿后面是什么
成都青年志愿者注册
菲拉格慕什么档次
五月搬家好日子
京剧猫傀儡师是什么宗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?