/*******************************************************
*****************************************************
StC80C51 控制舵机驱动程序
******************************************************/
#include //STC80C51 单片机头文件
sbit LED_0=P2^0; //0度指示灯
sbit LED_45=P2^1; //45度指示灯
sbit LED_90=P2^2; //90度指示灯
sbit LED_135=P2^3; //135度指示灯
sbit LED_180=P2^4; //180度指示灯
sbit PWM_JIA=P3^6; //角度加按键
sbit PWM_JIAN=P3^7; //角度减按键
sbit MOTOR_IN=P1^7; //舵机信号输入角
unsigned char count; //定时器中断次数
unsigned char jiaodu;//角度参数
/************************************
*********毫秒延时函数************
************************************/
void Delay(unsigned char xms)
{
unsigned char i,j;
for(i=xms;i>0;i--)
for(j=125;j>0;j--);
}
/************************************
*********定时器0初始化函数***********
************************************/
void Time0_init()
{
TMOD=0X01; //定时器工作在方式1
IE=0X82;
TH0=0XFE;
TL0=0X33; //定时0.5毫秒中断一次
TR0=1; //打开定时器
}
/************************************
*********按键扫描函数***********
************************************/
void KeyScan()
{
if(PWM_JIA==0) //角度增加按键是否按下
{
Delay(10); //延时10毫秒消抖
if(PWM_JIA==0) //确定按键按下
{
jiaodu++;
count=0;
if(jiaodu ==6) //如果角度参数为6
jiaodu =5; //如果角度参数复位为5
while(PWM_JIA==0); //等待按键松开
}
}
if(PWM_JIAN==0)//角度减少按键是否按下
{
Delay(10); //延时10毫秒消抖
if(PWM_JIAN==0)//确定按键按下
{
jiaodu--;
count=0;
if(jiaodu ==0)//如果角度参数为0
jiaodu =1;//如果角度参数复位为1
while(PWM_JIAN==0);//等待按键松开
}
}
}
/************************************
*********LED显示函数***********
************************************/
void Display()
{
switch(jiaodu)
{
case 1: //如果角度参数为1,LED1亮
P2=0XFF;
LED_0=0;
break;
case 2: //如果角度参数为2,LED2亮
P2=0XFF;
LED_45=0;
break;
case 3: //如果角度参数为3,LED3亮
P2=0XFF;
LED_90=0;
break;
case 4: //如果角度参数为4,LED4亮
P2=0XFF;
LED_135=0;
break;
case 5: //如果角度参数为5,LED5亮
P2=0XFF;
LED_180=0;
break;
}
}
/************************************
*********主函数***********
************************************/
void main()
{
jiaodu=1; //初始化角度参数为1
count=0; //初始化定时器中断次数为0
Time0_init(); //调用定时器0初始化函数
while(1)
{
KeyScan(); //调用按键扫描函数
Display(); //调用LED显示函数
}
}
/************************************
*********定时器0中断服务函数***********
************************************/
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………