📄 防止乱改找不到源码的副本 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 + -