Hi~ 发表于 2018-8-1 23:14:53

用遥控器的一个三档开关控制舵机的程序怎么写?

大师们 ,小弟刚刚学习51,很多地方不是很明白,比如说怎么用 ”一个三档开关“控制舵机的角度?

sc19 发表于 2018-8-2 02:07:02

这个不太懂

ywbsd2017 发表于 2018-8-2 06:53:56

坐等大师指点

leigongdianmu 发表于 2018-8-2 07:54:46

路过帮顶

addison88 发表于 2018-8-2 10:49:22

在输出PWM脉宽设置为1MS1.5MS 2 MS 就可以了

Hi~ 发表于 2018-8-3 16:38:02

具体怎么设置,大师可以把这个代码写出来讲解一下吗,拜托了

芝士蛋糕 发表于 2018-8-3 23:20:33

STC   
检测IO设置为高阻输入模式 (可以多个)   (cio1)
另加一个IO(挽推) 串个10K到检测IO用作上拉和下拉 (c3s)
开关中脚接检测IO 另外两脚分别接正负极
程序上 :
c3s=1 读flag1=cio1
延时一下
c3s=0 读flag2=cio1
两次都低 输出0
两次都高 输出1
不一样   输出2



coolbgo 发表于 2018-8-12 22:21:41

三挡开关在遥控接收器上输出的pwm高电平时间分别是1ms 1.5ms 2ms    对应舵机的0度 45度 90度

用单片机的话,先用一个端口接受pwm数据,然后根据接受的pwm数据选择怎么发出pwm数据
下面发个我写的接收两档遥控信号的灯控程序给你参考一下,我也新学,如果有不对,还请不要见怪
#include<reg51.h>

#define uchar unsigned char
#define uint unsigned int

sfr AUXR=0x8e;

sbit LEDL=P3^3;                //左边LED
sbit LEDR=P3^5;                //右边LED
sbit LEDB=P3^4;                //后边LED
sbit pwm=P3^1;                //pwm信号

uchar mode,time,t1;
uint t0,duty;
bit pwmnow,pwmold;

void init()
{
        EA=1;
        ET0=1;
        AUXR |= 0x80;                //定时器时钟1T模式
        TMOD &= 0xF0;                //设置定时器模式
        TL0 = 0x88;                //设置定时初值        10us
        TH0 = 0xFF;                //设置定时初值
        TR0 = 1;                //定时器0开始计时
       
}

void getpwm()
{
        while(pwm);                        //跳过高电平
        while(!pwm);                //跳过低电平
        t0=0;
        while(pwm);                        //计算高电平时间
        time=t0;
        if(time>70&&time<120)
                pwmnow=0;
        if(time>170&&time<220)
                pwmnow=1;
        if(pwmnow!=pwmold)
                if(++mode==4)
                        mode=0;
        pwmold=pwmnow;
}

main()
{
        init();
       
        while(1)
        {
                while(mode==0)
                {
                        LEDL=LEDR=LEDB=1;
                        while(mode==0)
                        {
                                if(t0>10000)
                                {
                                        getpwm();
                                        t0=0;
                                }
                        }
                }
               
                while(mode==1)
                {
                        LEDL=LEDR=LEDB=0;
                        while(mode==1)
                        {
                                if(t0>10000)
                                {
                                        getpwm();
                                        t0=0;
                                }
                        }
                }
               
                while(mode==2)
                {
                        t0=0;
                        LEDL=0;LEDR=LEDB=1;
                        while(t0!=20000);
                        LEDL=1;LEDR=0;
                        while(t0!=40000);
                        LEDR=1;LEDB=0;
                        while(t0!=60000);
                        LEDB=1;
                       
                        t0=0;
                        getpwm();
                        if(mode!=2)
                                break;
                        while(t0!=20000);
                       
                        for(t1=0;t1<3;t1++)
                        {
                                t0=0;
                                LEDL=LEDR=LEDB=0;
                                while(t0!=50000);
                               
                                t0=0;
                                LEDL=LEDR=LEDB=1;
                                getpwm();
                                if(mode!=2)
                                        break;
                                while(t0!=20000);
                        }
                }
               
                while(mode==3)
                {
                        while(duty!=100)
                        {
                                t0=0;
                                LEDL=LEDR=LEDB=0;
                                while(t0<duty);
                                LEDL=LEDR=LEDB=1;
                                while(t0<100);
                                if(++t1==10)
                                {
                                        t1=0;
                                        duty++;
                                }
                        }
                       
                        LEDL=LEDR=LEDB=0;
                        getpwm();
                        LEDL=LEDR=LEDB=1;
                        if(mode!=3)
                                break;
                       
                        while(duty!=0)
                        {
                                t0=0;
                                LEDL=LEDR=LEDB=0;
                                while(t0<duty);
                                LEDL=LEDR=LEDB=1;
                                while(t0<100);
                                if(++t1==10)
                                {
                                        t1=0;
                                        duty--;
                                }
                        }
                       
                        getpwm();
                }
        }
}

void Timer0_Toutine() interrupt 1 using 1
{
        t0++;
}

hymaljw 发表于 2018-8-28 12:43:08

不懂帮顶,不是模拟信号的

suyijiang 发表于 2018-9-9 10:06:16

大神就是大神啊!顶起

灵魂无处安放 发表于 2018-9-15 14:42:18

顶起来{:1_1:}
页: [1]
查看完整版本: 用遥控器的一个三档开关控制舵机的程序怎么写?