单片机源程序如下:
//按键控制SG90舵机转动成功
//按下按键舵机正转,松开按键舵机回位,按键扫描去掉后,直接高地电平检测也可以控制舵机运动
#include <reg52.h>
sbit SG_PWM=P2^7;//接舵机
sbit jia=P2^0; // 按键检测I/O口
unsigned char count=0;
unsigned char PWM_count=3; //1--0度,2--45度,3--90度,4--135度,5--180度
unsigned char a=0;
void delay(unsigned char z)
{
unsigned char x,y;
for(x=125;x>0;x--)
for(y=z;y>0;y--);
}
void Timer_Init()
{
TMOD|=0X01; //T0定时方式1
TH0=0Xfe;
TL0=0X33; //计数初值设置为0.5ms
ET0=1; //打开定时器0的中断
TR0=1; //打开定时器0
EA=1; //开总中断
}
void Timer() interrupt 1 //特别注意此处,0--外部中断0,1--定时器中断0,2--外部中断1,3--定时器中断1,4--串行口中断1
{
TR0=0;
TH0=0Xfe;
TL0=0X33; //重新赋计数初值为0.5ms
if(count<=PWM_count)
{
SG_PWM=1;
}
else
{
SG_PWM=0;
}
count++;
if(count>=40)
{
count=0;
a++;
}
TR0=1;
}
void main()
{
PWM_count=4;
Timer_Init();
while(1)
{
if(jia==0) //角度增加按键是否按下
{
delay(30); //按下延时,消抖
if(jia==0) //确实按下
{
a==20;
PWM_count=1;
while(jia==0); //等待按键放开
a==32;
PWM_count=4;
a=0;
}
}
}
}