欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
舵機控制程序
[打印本頁]
作者:
nigang
時間:
2018-1-12 08:33
標題:
舵機控制程序
//
// dji.c
//
//
// Created by 倪剛 on 2018/1/12.
//
#include <reg52.h>
#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; //0.25ms
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 )
{
ControlPort = 1;
} else {
ControlPort = 0;
}
break;
} case 1 : //為1時,舵機左轉,脈寬1ms(理論值),實際可以調試得出
{
if( TimeOutCounter <= 2 )
{
ControlPort = 1;
} else {
ControlPort = 0;
}
break;
} case 2 : //為2時,舵機右轉,脈寬2ms(理論值),實際可以調試得出
{
if( TimeOutCounter <= 10 )
{
ControlPort = 1;
} else {
ControlPort = 0;
} break;
}
default : break;
}
if( TimeOutCounter == 80 ) //周期20ms(理論值),比較可靠,最好不要修改
{
TimeOutCounter = 0;
}
}}
復制代碼
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1