这是我以前写的用51单片机控制舵机的程序,也是调PWM的,两按键,一个开始一个暂停,自己去琢磨吧,希望对你有帮助
int main(void)
{
P2=0XFF;
P0=0XFF;
// P3=0X00;
// P1=0X00;
lcd1602_init();
TMOD=0x01; //方式1,16位计数器方式
TH0=0xff;
TL0=0xab; //定时0.1ms
IE=0x82; //开定时器中断
ET0=1;
TR0=1;
EA=1;
while(1)
{
keyscan();
if(keyvalue&m_start)
{
lcd1602_nwd(0x00,1,disply1,13);
if(high_flag)
{
high_flag=0;
if(i_d_flag)
{
hight_votage--;
if(hight_votage<=5)
{
i_d_flag=0;
delays(m_05s);
// delayms(1000);
// hight_votage=5;
}
}
else
{
hight_votage++;
if(hight_votage>=25)
{
i_d_flag=1;
cont_flag=1;
delays(m_05s);
// delayms(1000);
// high_votage=25;
}
}
}
if(cont_flag)
{
cont_flag=0; //圈数计数标志位
date_inc(disply);
lcd1602_nwd(0x00,2,disply,5);
}
if(keyvalue&m_stop)
{
keyvalue=keyvalue&0xe7;
}
}
}
}
void timer0() interrupt 1
{
// TH0=0xfe;
// TL0=0x0b;
TH0=0xff;
TL0=0xa9;
// flag_01ms=1;
t_num++;
// engine_pwm=~engine_pwm;
if(t_num>=200)
{
time_20ms++;
f_keytime=1;
t_num=0;
engine_pwm=1;
flag_pwm=1;
}
if(flag_pwm)t_cont++;
if(flag_pwm&&(t_cont>hight_votage))
{
high_flag=1;
flag_pwm=0;
t_cont=0;
engine_pwm=0;
}
if(f_buzzle)buzzle=~buzzle;
}
温馨提示:答案为网友推荐,仅供参考