|
好像你的程序是一個(gè)固定的PWM啊,這不對嘛。
舵機(jī)是針對不同的PWM轉(zhuǎn)到對應(yīng)的角度,你的程序只有一個(gè)PWM,則轉(zhuǎn)動(dòng)到相應(yīng)位置,就不會(huì)動(dòng)了。
我有個(gè)試驗(yàn)程序,你可以看看,參考一下。#include<reg51.h>
#define GPIO_KEY P1//矩陣鍵盤
sbit DJ=P2^7;//SG90舵機(jī)的數(shù)據(jù)口
unsigned char KeyValue,GT,DT;
bit KeyState;
void KeyDown();
void DJZD (void);
void Delay10ms(unsigned int c)
{
unsigned char a,b;
for(c;c>0;c--)
{
for(b=44;b>0;b--)
{
for (a=112;a>0;a--)
{
}
}
}
}
void main(void)//主函數(shù)
{
KeyState=0;
GT=30;DT=350;DJ=1;
Delay10ms(1);
DJ=0;
while (1)//主循環(huán)
{
KeyDown();
if(KeyState==1)
{
switch (KeyValue)
{
case (0):GT=10;DT=390;DJZD ();break;//轉(zhuǎn)動(dòng)到0度
case (2):GT=20;DT=380;DJZD ();break;//轉(zhuǎn)動(dòng)到45度
case (4):GT=30;DT=370;DJZD ();break;//轉(zhuǎn)動(dòng)到90度
case (6):GT=40;DT=360;DJZD ();break;//轉(zhuǎn)動(dòng)到135度
case (8):GT=50;DT=350;DJZD ();break;//轉(zhuǎn)動(dòng)到180度
}
KeyState=0;
}
}
}
void DJZD (void)
{
unsigned char i;
for (i=0;i<75;i++)
{
DJ=1;
Delay50us(GT);
DJ=0;
Delay50us(DT);
}
DJ=0;
}
void KeyDown(void)
{
unsigned char a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)
{
Delay10ms(1);
if(GPIO_KEY!=0x0f)
{
KeyState=1;
switch(GPIO_KEY)
{
case(0X07): KeyValue=0;break;
case(0X0b): KeyValue=1;break;
case(0X0d): KeyValue=2;break;
case(0X0e): KeyValue=3;break;
}
GPIO_KEY=0Xf0;
switch(GPIO_KEY)
{
case(0X70): KeyValue=KeyValue;break;
case(0Xb0): KeyValue=KeyValue+4;break;
case(0Xd0): KeyValue=KeyValue+8;break;
case(0Xe0): KeyValue=KeyValue+12;break;
}
for (a=0;(a<25)&&(GPIO_KEY!=0xf0);a++)
{
Delay10ms(1);
}
}
}
}
|
-
1.jpg
(37.34 KB, 下載次數(shù): 31)
下載附件
2018-4-20 08:29 上傳
|