#include 〈>
#define Stop 0 //宏定义,停止
#define Left 1 //宏定义,左转
#define Right 2ﻩ //宏定义,右转
sbit ControlPort = P2^0; //舵机信号端口
sbit KeyLeft = P1^0; //左转按键端口
sbit KeyRight = P1^1; //右转按键端口
sbit KeyStop = P1^2;ﻩ //归位按键端口
unsigned char TimeOutCounter = 0,LeftOrRight = 0; //TimeOutCounter:定时器溢出计数 LeftOrRight:舵机左右旋转标志
void InitialTimer ( void )
{
TMOD=0x10; //定时/计数器1工作于方式1
TH1 = ( 65535 — 500 ) / 256; //
TL1 = ( 65535 — 500 ) % 256;
EA=1; //开总中断
ET1=1; //允许定时/计数器1 中断
TR1=1; //启动定时/计数器1 中断
}
void ControlLeftOrRight ( 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;
ﻩ}
}
void main ( void ) //主函数
{
InitialTimer();
for(;;)
ﻩ{
ControlLeftOrRight();
ﻩ}
}
void Timer1 ( void ) interrupt 3 //定时器中断函数
{
TH1 = ( 65535 — 500 ) / 256;
TL1 = ( 65535 - 500 ) % 256;
ﻩTimeOutCounter ++;
ﻩswitch ( LeftOrRight )
ﻩ{
ﻩﻩcase 0 :ﻩ //为0时,舵机归位,脉宽1.5ms
ﻩﻩ{
ﻩ if( TimeOutCounter 〈= 6 )
ﻩﻩﻩ{
单片机控制舵机程序 来自淘豆网m.daumloan.com转载请标明出处.