51单片机控制舵机程序.doc

上传人:b****3 文档编号:2486334 上传时间:2022-10-30 格式:DOC 页数:3 大小:31.50KB
下载 相关 举报
51单片机控制舵机程序.doc_第1页
第1页 / 共3页
51单片机控制舵机程序.doc_第2页
第2页 / 共3页
51单片机控制舵机程序.doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

51单片机控制舵机程序.doc

《51单片机控制舵机程序.doc》由会员分享,可在线阅读,更多相关《51单片机控制舵机程序.doc(3页珍藏版)》请在冰豆网上搜索。

51单片机控制舵机程序.doc

#include

#defineStop0//宏定义,停止

#defineLeft1 //宏定义,左转

#defineRight2 //宏定义,右转

sbitControlPort=P2^0;//舵机信号端口

sbitKeyLeft=P1^0; //左转按键端口

sbitKeyRight=P1^1; //右转按键端口

sbitKeyStop=P1^2; //归位按键端口

unsignedcharTimeOutCounter=0,LeftOrRight=0;//TimeOutCounter:

定时器溢出计数 LeftOrRight:

舵机左右旋转标志

voidInitialTimer(void)

{

TMOD=0x10;//定时/计数器1工作于方式1

TH1=(65535-500)/256; //0.25ms

TL1=(65535-500)%256;

EA=1;//开总中断

ET1=1;//允许定时/计数器1中断

TR1=1;//启动定时/计数器1中断

}

voidControlLeftOrRight(void)//控制舵机函数

{

if(KeyStop==0)

{

//while(!

KeyStop); //使标志等于Stop(0),在中断函数中将用到

LeftOrRight=Stop;

}

if(KeyLeft==0)

{

//while(!

KeyLeft); //使标志等于Left

(1),在中断函数中将用到

LeftOrRight=Left;

}

if(KeyRight==0)

{

//while(!

KeyRight);//使标志等于Right

(2),在中断函数中将用到

LeftOrRight=Right;

}

}

voidmain(void) //主函数

{

InitialTimer();

for(;;)

{

ControlLeftOrRight();

}

}

voidTimer1(void)interrupt3//定时器中断函数

{

TH1=(65535-500)/256;

TL1=(65535-500)%256;

TimeOutCounter++;

switch(LeftOrRight)

{

case0:

//为0时,舵机归位,脉宽1.5ms

{

if(TimeOutCounter<=6)

{

ControlPort=1;

}

else

{

ControlPort=0;

}

break;

}

case1:

//为1时,舵机左转,脉宽1ms(理论值),实际可以调试得出

{

if(TimeOutCounter<=2)

{

ControlPort=1;

}

else

{

ControlPort=0;

}

break;

}

case2:

//为2时,舵机右转,脉宽2ms(理论值),实际可以调试得出

{

if(TimeOutCounter<=10)

{

ControlPort=1;

}

else

{

ControlPort=0;

}

break;

}

default:

break;

}

if(TimeOutCounter==80) //周期20ms(理论值),比较可靠,最好不要修改

{

TimeOutCounter=0;

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1