?? 防止亂改找不到源碼的副本 servo.c
字號:
/******************************************************************************
標題:按鍵控制舵機PWM電路C語言版
說明:AT8951改變脈沖寬度控制舵機正反向(C語言版)
作者:kaka000 論壇:http://www.proteus.com.cn
日期:2007年11月10日
******************************************************************************/
#include"at89x51.h"
unsigned char TL01;
unsigned char TH01;
unsigned char TL02;
unsigned char TH02;
int A,C;
//延時10ms子程序****************************************************************
void delay10ms(void)
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--) ;
}
//延時200ms子程序***************************************************************
void delay02s(void)
{
unsigned char i;
for(i=20;i>0;i--)
delay10ms();
}
//主程序***********************************************************************
void main(void)
{
EA=1; //開總中斷
ET0=1; //允許T0中斷
P3_7=0; //脈沖波形起始狀態
TMOD=0x01; //定時,方式0
F0=0; //清標志位
TR0=1; //啟動T0
TL01=0x2E; //舵機0 位,1.5ms定時初始值
TH01=0x0FA;
TL02=0x0B2; //8.5ms定時初始值
TH02=0x0B7;
while(1)
{
if(P1_0==0)
{
delay10ms(); //按下,延時,防抖
if(P1_0==0)
{ //等待釋放
delay02s();
A=TL01;
if(A!=0xFF) //判斷是否到+90°
{
C=0;
A=A-20;
if(A<=0)
{A+=255;C=1;}
if(C==0)
{
TL01=A;
C=0;
A=TL02;
A=A+20;
if(A>=255)
{A-=255;C=1;}
if(C==0)
{TL02=A;}
else
{TH02++;TL02=A;C=0;}
}
else
{
TH01--;
TL01=A;
C=0;
A=TL02;
A=A+20;
if(A>=255)
{A-=255;C=1;}
if(C==0)
{TL02=A;}
else
{TH02++;TL02=A;C=0;}
}
}
}
}
if(P1_1==0)
{
delay10ms(); //按下,延時,防抖
if(P1_1==0)
{ //等待釋放
delay02s();
A=TL01;
if(A!=0x22) //判斷是否到-90°
{
C=0;
A=A+20;
if(A>=255)
{A-=255;C=1;}
if(C==0)
{
TL01=A;
C=0;
A=TL02;
A=A-20;
if(A<=0)
{A+=255;C=1;}
if(C==0)
{TL02=A;}
else
{TH02--;TL02=A;C=0;}
}
·· else
{
TH01++;
TL01=A;
C=0;
A=TL02;
A=A-20;
if(A<=0)
{A+=255;C=1;}
if(C==0)
{TL02=A;}
else
{TH02--;TL02=A;C=0;}
}
}
}
}
if(P1_2==0)
{
delay10ms(); //按下,延時,防抖
if(P1_2==0)
{ //等待釋放
delay02s();
TL01=0x2E;
TH01=0x0FA;
TL02=0x0B2;
TH02=0x0B7;
}
}
}
}
//中斷服務程序*************************************************************
void timer0() interrupt 1 using 1
{
F0=~F0;
P3_7=~P3_7; //輸出高、低電平脈沖
if(F0==1)
{
TL0=TL01; //高電平脈沖定時常數
TH0=TH01;
}
else
{
TL0=TL02; //低電平脈沖定時常數
TH0=TH02;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -