標(biāo)題:
51單片機(jī)控制舵機(jī) 按鍵實(shí)現(xiàn)左轉(zhuǎn)、右轉(zhuǎn)及歸位源碼
[打印本頁(yè)]
作者:
逍遙游啊游
時(shí)間:
2018-6-20 08:43
標(biāo)題:
51單片機(jī)控制舵機(jī) 按鍵實(shí)現(xiàn)左轉(zhuǎn)、右轉(zhuǎn)及歸位源碼
51單片機(jī)控制舵機(jī)源程序如下:
/***********************************************************
版權(quán)所有 :河池學(xué)院創(chuàng)新實(shí)訓(xùn)中心(2/3),劉歡(1/3)
程序功能。憾鏅C(jī)控制
生成日期。2009年10月30日 星期五
作 者。簞g
說(shuō) 明。51單片機(jī)控制舵機(jī),按鍵實(shí)現(xiàn)左轉(zhuǎn)、右轉(zhuǎn)及歸位
占用定時(shí)/計(jì)數(shù)器1
************************************************************/
#include <reg52.h>
#define Stop 0 //宏定義,停止
#define Left 1 //宏定義,左轉(zhuǎn)
#define Right 2 //宏定義,右轉(zhuǎn)
sbit ControlPort = P1^0; //舵機(jī)信號(hào)端口
sbit KeyLeft = P1^1; //左轉(zhuǎn)按鍵端口
sbit KeyRight = P1^2; //右轉(zhuǎn)按鍵端口
sbit KeyStop = P1^3; //歸位按鍵端口
unsigned char TimeOutCounter = 0,LeftOrRight = 0; //TimeOutCounter:定時(shí)器溢出計(jì)數(shù) LeftOrRight:舵機(jī)左右旋轉(zhuǎn)標(biāo)志
void InitialTimer ( void )
{
TMOD=0x10; //定時(shí)/計(jì)數(shù)器1工作于方式1
TH1 = ( 65535 - 500 ) / 256; //0.25ms
TL1 = ( 65535 - 500 ) % 256;
EA=1; //開總中斷
ET1=1; //允許定時(shí)/計(jì)數(shù)器1 中斷
TR1=1; //啟動(dòng)定時(shí)/計(jì)數(shù)器1 中斷
}
void ControlLeftOrRight ( void ) //控制舵機(jī)函數(shù)
{
if( KeyStop == 0 )
{
while ( !KeyStop ); //使標(biāo)志等于Stop(0),在中斷函數(shù)中將用到
LeftOrRight = Stop;
}
if( KeyLeft == 0 )
{
while ( !KeyLeft ); //使標(biāo)志等于Left(1),在中斷函數(shù)中將用到
LeftOrRight = Left;
}
if( KeyRight == 0 )
{
while ( !KeyRight ); //使標(biāo)志等于Right(2),在中斷函數(shù)中將用到
LeftOrRight = Right;
}
}
void main ( void ) //主函數(shù)
{
InitialTimer();
for(;;)
{
ControlLeftOrRight();
}
}
void Timer1 ( void ) interrupt 3 //定時(shí)器中斷函數(shù)
{
TH1 = ( 65535 - 500 ) / 256;
TL1 = ( 65535 - 500 ) % 256;
TimeOutCounter ++;
switch ( LeftOrRight )
{
case 0 : //為0時(shí),舵機(jī)歸位,脈寬1.5ms
{
if( TimeOutCounter <= 6 )
{
ControlPort = 1;
}
else
{
ControlPort = 0;
}
break;
}
case 1 : //為1時(shí),舵機(jī)左轉(zhuǎn),脈寬1ms(理論值),實(shí)際可以調(diào)試得出
{
if( TimeOutCounter <= 2 )
{
ControlPort = 1;
}
else
{
ControlPort = 0;
}
break;
}
case 2 : //為2時(shí),舵機(jī)右轉(zhuǎn),脈寬2ms(理論值),實(shí)際可以調(diào)試得出
{
if( TimeOutCounter <= 10 )
{
ControlPort = 1;
}
else
{
ControlPort = 0;
}
break;
}
default : break;
}
if( TimeOutCounter == 80 ) //周期20ms(理論值),比較可靠,最好不要修改
{
TimeOutCounter = 0;
}
}
復(fù)制代碼
所有資料51hei提供下載:
51單片機(jī)控制舵機(jī)程序.rar
(16.79 KB, 下載次數(shù): 94)
2018-6-20 08:42 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
鬼推磨
時(shí)間:
2021-1-2 20:46
測(cè)試了,在我的板子上好像沒(méi)反應(yīng)啊
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1