单片机按键控制舵机转动
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#define Sevro_moto_pwm P1_0//接舵机信号端输入PWM信号调节速度
#define k1 P2_5//按键控制舵机左转
#define k2 P2_6//按键控制舵机右转
unsigned char pwm_val_left = 0;//变量定义
unsigned char push_val_left;// =14;//舵机归中,产生约,1.5MS信号
忆飞工作室
http://yfsmdz.taobao.com
忆飞电子淘宝店欢迎进入
设计者:曾传辉
时间2012年8月13号
手机:13400662495
QQ:36439133
旺旺:epiapl_cn
程序名称:按键控制舵机控制
程序效果:单片机两个按键控制左右转,转角90度单片
#include<AT89x51.H>
//push_val_left=5;//舵机向左转90度
//push_val_left=14;//舵机归中
push_val_left=23;//舵机向右转90度
while(1) //大循环
{
if(k1==0) //判定向左转按键是否按下
{
val++;//变量++
}
if(fl1==1)//判定标记位是否为真
void cpuint()
{
TMOD=0X11;
TH1=(65536-100)/256;//100US定时
TL1=(65536-100)%256;
TH0=0;
TL0=0;
TR1= 1;
ET1= 1;
ET0= 1;
EA = 1;
}
v百度文库id main()
{
cpuint();
delay(100);
fl1=1;
fl2=1;//打开向右移按键开关
val=0;//按键变量清零
}
}
if(k2==0) //判定向右转按键是否按下
{
val2++;//变量++
}
if(fl2==1) //判定标记位是否为真
{
if(val2==1)//判定按键变量是否==1
{
push_val_left=14;//舵机归中
delay(100);//延时函数
{
if(val==1) //判定按键变量是否==1
{
push_val_left=14;//舵机归中
delay(100);//延时函数
}
if(val==2)//判定按键变量是否==2
{
push_val_left=5;//舵机向左转90度
delay(100);//延时函数
fl1=0;//标记位清零表时向右到位
void delay(unsigned int k)//延时函数
{
unsigned int x,y;
for(x=0;x<k;x++)
for(y=0;y<2000;y++);
}
/************************************************************************/
///*TIMER1中断服务子函数产生PWM信号*/
void time1()interrupt 3 using 2
{
TH1=(65536-100)/256;//100US定时
TL1=(65536-100)%256;
pwm_val_left++;
pwm_Servomoto();
}
/***************************************************/
void pwm_Servomoto(void)
{
if(pwm_val_left<=push_val_left)
Sevro_moto_pwm=1;
else
Sevro_moto_pwm=0;
if(pwm_val_left>=500)
{
pwm_val_left=0;
}
}
/***************************************************/
unsigned int timer=0;//延时基准变量
unsigned char timer1=0;//扫描时间变量
void pwm_Servomoto(void); //函数申明
unsigned int val,val2,fl1,fl2; //变量申明
/************************************************************************/
}
if(val2==2)//判定按键变量是否==2
{
push_val_left=23;//舵机向右转90度
delay(100);//延时函数
fl1=1;//标记位清零表时向左到位
fl2=0;//打开向左移按键开关
val2=0;//按键变量清零
}
}
}
}
/*调节push_val_left的值改变电机转速,占空比*/
#define k1 P2_5//按键控制舵机左转
#define k2 P2_6//按键控制舵机右转
unsigned char pwm_val_left = 0;//变量定义
unsigned char push_val_left;// =14;//舵机归中,产生约,1.5MS信号
忆飞工作室
http://yfsmdz.taobao.com
忆飞电子淘宝店欢迎进入
设计者:曾传辉
时间2012年8月13号
手机:13400662495
QQ:36439133
旺旺:epiapl_cn
程序名称:按键控制舵机控制
程序效果:单片机两个按键控制左右转,转角90度单片
#include<AT89x51.H>
//push_val_left=5;//舵机向左转90度
//push_val_left=14;//舵机归中
push_val_left=23;//舵机向右转90度
while(1) //大循环
{
if(k1==0) //判定向左转按键是否按下
{
val++;//变量++
}
if(fl1==1)//判定标记位是否为真
void cpuint()
{
TMOD=0X11;
TH1=(65536-100)/256;//100US定时
TL1=(65536-100)%256;
TH0=0;
TL0=0;
TR1= 1;
ET1= 1;
ET0= 1;
EA = 1;
}
v百度文库id main()
{
cpuint();
delay(100);
fl1=1;
fl2=1;//打开向右移按键开关
val=0;//按键变量清零
}
}
if(k2==0) //判定向右转按键是否按下
{
val2++;//变量++
}
if(fl2==1) //判定标记位是否为真
{
if(val2==1)//判定按键变量是否==1
{
push_val_left=14;//舵机归中
delay(100);//延时函数
{
if(val==1) //判定按键变量是否==1
{
push_val_left=14;//舵机归中
delay(100);//延时函数
}
if(val==2)//判定按键变量是否==2
{
push_val_left=5;//舵机向左转90度
delay(100);//延时函数
fl1=0;//标记位清零表时向右到位
void delay(unsigned int k)//延时函数
{
unsigned int x,y;
for(x=0;x<k;x++)
for(y=0;y<2000;y++);
}
/************************************************************************/
///*TIMER1中断服务子函数产生PWM信号*/
void time1()interrupt 3 using 2
{
TH1=(65536-100)/256;//100US定时
TL1=(65536-100)%256;
pwm_val_left++;
pwm_Servomoto();
}
/***************************************************/
void pwm_Servomoto(void)
{
if(pwm_val_left<=push_val_left)
Sevro_moto_pwm=1;
else
Sevro_moto_pwm=0;
if(pwm_val_left>=500)
{
pwm_val_left=0;
}
}
/***************************************************/
unsigned int timer=0;//延时基准变量
unsigned char timer1=0;//扫描时间变量
void pwm_Servomoto(void); //函数申明
unsigned int val,val2,fl1,fl2; //变量申明
/************************************************************************/
}
if(val2==2)//判定按键变量是否==2
{
push_val_left=23;//舵机向右转90度
delay(100);//延时函数
fl1=1;//标记位清零表时向左到位
fl2=0;//打开向左移按键开关
val2=0;//按键变量清零
}
}
}
}
/*调节push_val_left的值改变电机转速,占空比*/