單片機源程序如下:
//按鍵控制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;
}
}
}
}
|