用遥控器的一个三档开关控制舵机的程序怎么写?
大师们 ,小弟刚刚学习51,很多地方不是很明白,比如说怎么用 ”一个三档开关“控制舵机的角度?这个不太懂
坐等大师指点
路过帮顶
在输出PWM脉宽设置为1MS1.5MS 2 MS 就可以了 具体怎么设置,大师可以把这个代码写出来讲解一下吗,拜托了 STC
检测IO设置为高阻输入模式 (可以多个) (cio1)
另加一个IO(挽推) 串个10K到检测IO用作上拉和下拉 (c3s)
开关中脚接检测IO 另外两脚分别接正负极
程序上 :
c3s=1 读flag1=cio1
延时一下
c3s=0 读flag2=cio1
两次都低 输出0
两次都高 输出1
不一样 输出2
三挡开关在遥控接收器上输出的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++;
} 不懂帮顶,不是模拟信号的 大神就是大神啊!顶起 顶起来{:1_1:}
页:
[1]