当前位置:文档之家› 舵机按键控制完整版

舵机按键控制完整版

#include
#define Sevro_moto_pwm P2_7 //接舵机信号端输入PWM信号调节速度
sbit k1=P2^4;
sbit k2=P2^5;
int n;
unsigned char pwm_val_left = 0;//变量定义
unsigned char zhuan =14;//舵机归中,产生约,1.5MS 信号
unsigned int timer=0; //延时基准变量
unsigned char timer1=0; //扫描时间变量
void delay(int x)
{
int i,j;
for(i=x;i>0l;i--)
{
for(j=255;j>0;j--);
}
}
void COMM( void )
{
if(k1==0) //如果第一个按键按下
{
++n;
}
if(k2==0) //如果第二个按键按下
{
--n; //N减1
}

zhuan=n;
if(n>=23)
{
n=23;
}

if(n<=5)
{
n=5;
}
}
void main(void)
{ TMOD=0X11;
TH1=(65536-100)/256; //100US定时
TL1=(65536-100)%256;
TH0=0;
TL0=0;
TR1= 1;
ET1= 1;
ET0= 1;
EA = 1;
n=14;
zhuan=14; //舵机归中
while(1) /*无限循环*/
{
if(timer>=1000) //100MS检测启动检测一次
{
timer=0;
COMM(); //方向函数
}
}
}

void pwm_Servomoto(void)
{
if(pwm_val_left<=zhuan)
Sevro_moto_pwm=1; //信号输出线
else
Sevro_moto_pwm=0;//信号输出线
if(pwm_val_left>=200)
pwm_val_left=0;
}
/*TIMER1中断服务子函数产生PWM信号*/
void time1()interrupt 3 using 2
{
TH1=(65536-100)/256; //100US定时
TL1=(65536-100)%256;
timer++; //定时器100US为准。在这个基础上延时
pwm_val_left++;
pwm_Servomoto(); //调用上边的函数
if(timer1>=20)
{
timer1=0;
}
}

相关主题
文本预览
相关文档 最新文档