该【舵机控制C程序 】是由【MX01】上传分享,文档一共【6】页,该文档可以免费在线阅读,需要了解更多关于【舵机控制C程序 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。Documentnumber:NOCG-YUNOO-BUYTT-UU986-1986UT
舵机控制C程序
舵机控制C程序
#include<>
#defineucharunsignedchar
#defineuintunsignedint
/*
变量定义
*/
ucharkey_stime_counter,hight_votage=15,timeT_counter;
bitkey_stime_ok;
/*
引脚定义
*/
sbitcontrol_signal=P0^0;
sbitturn_left=P3^4;
sbitturn_right=P3^5;
/*****************************************************************
名称:定时器0初始化
功能:20ms定时,晶振
初值20ms
初值
*****************************************************************/
voidTimerInit()
{
control_signal=0;
TMOD=0x01;//设置定时器0为工作方式1
EA=1;//开总中断
ET0=1;//定时器0中断允许
TH0=0xFF;//定时器装初值
TL0=0xA3;
TR0=1;//启动定时器0
}
/**********************************************
定时器0中断服务函数
***********************************************/
voidtimer0(void)interrupt1using0
{
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*到
}
}
/*********************************************
名称:键盘扫描
功能:在按键稳定期内判断键值,并返回键值
**********************************************/
ucharkeyscan(void)
{
staticcharkey_state=0;
staticcharkey_value=0;
ucharkey_press,key_return=0;
key_press=turn_left&turn_right;//读按键I/O电平
switch(key_state)
{
case0://按键初始态
if(key_press==0)key_state=1;//键被按下,但需要确认是否是干扰
break;
case1://按键确认态
if(key_press==0)//如有键按下则不是干扰,判断键值
{
if(turn_left==0)//判断是哪一个按键被按下
key_value=1;//按键较多时可采用switch选择结构
elseif(turn_right==0)
key_value=2;
else
key_value=0;
key_state=2;//状态转换到键释放态
}
else
key_state=0;//按键已抬起,属于干扰,转换到按键初始态
break;
case2:
if(key_press==1)
{
key_return=key_value;//按键释放后再输出键值,如果按下键就输出则可省略key_value
key_value=0;
key_state=0;//如果按键释放,转换到按键初始态
}
break;
}
returnkey_return;//返回键值
}
/*********************************************
名称:按键处理
功能:
**********************************************/
voidkey_operation(void)
{
switch(keyscan())//根据键值不同,执行不同的内容
{
case1:
hight_votage-=1;
if(hight_votage<5)
hight_votage=5;
break;
case2:
hight_votage+=1;
if(hight_votage>25)
hight_votage=25;
break;
default:
break;
}
}
//LED显示函数
voiddiplay()
{
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灯亮,舵机接近或到达左转极限位置
}
/*主程序*/
voidmain(void)
{
TimerInit();
while(1)
{
key_operation();
diplay();
}
}
舵机控制C程序 来自淘豆网m.daumloan.com转载请标明出处.