《舵机控制C程序》由会员分享,可在线阅读,更多相关《舵机控制C程序(4页珍藏版)》请在金锄头文库上搜索。
1、 舵机控制C程序#include #define uchar unsigned char #define uint unsigned int/*变量定义*/uchar key_stime_counter,hight_votage=15,timeT_counter; bit key_stime_ok;/*引脚定义*/ sbit control_signal=P00; sbit turn_left=P34;sbit turn_right=P35;/*名称:定时器0初始化功能:20ms定时,11.0592M晶振初值=65536-11059200*0.02/12=65536-18432=47104=0
2、xB800 20ms初值=65536-11059200*0.0001/12=65536-92.16=64430=0xFFA3 0.1ms*/void TimerInit() control_signal=0;TMOD=0x01; /设置定时器0为工作方式1EA=1; /开总中断ET0=1; /定时器0中断允许 TH0 = 0xFF; /定时器装初值 TL0 = 0xA3;TR0=1; /启动定时器0 /*定时器0中断服务函数*/void timer0(void) interrupt 1 using 0 TH0=0xFF; TL0=0xA3; /定时器0重新装入数值if (+key_stime_
3、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*0.1ms到 /*名称:键盘扫描功能:在按键稳定期内判断键值,并返回键值*/uchar keyscan(void)static char key_state = 0; static ch
4、ar key_value = 0;uchar key_press, key_return = 0;key_press=turn_left&turn_right; /读按键I/O电平 switch (key_state) case 0 : / 按键初始态 if (key_press=0) key_state = 1; / 键被按下,但需要确认是否是干扰break; case 1 : / 按键确认态 if (key_press=0)/如有键按下则不是干扰,判断键值 if(turn_left=0) /判断是哪一个按键被按下 key_value=1; /按键较多时可采用switch选择结构 else
5、if(turn_right=0) key_value=2; else key_value=0; key_state = 2; / 状态转换到键释放态 else key_state = 0; / 按键已抬起,属于干扰,转换到按键初始态 break; case 2 : if (key_press=1) key_return=key_value;/按键释放后再输出键值,如果按下键就输出则可省略key_value key_value=0; key_state = 0; /如果按键释放,转换到按键初始态 break;return key_return; /返回键值/*名称:按键处理功能:*/void k
6、ey_operation(void) switch (keyscan() /根据键值不同,执行不同的内容 case 1: hight_votage-=1; if(hight_votage25) hight_votage=25; break; default : break; /LED显示函数void diplay()if(hight_votage=5&hight_votage7&hight_votage10&hight_votage13&hight_votage16&hight_votage19&hight_votage22&hight_votage=25) P1=0x7F; /7灯亮,舵机接近或到达左转极限位置/*主程序*/ void main(void)TimerInit(); while(1) key_operation(); diplay();