[mw_shl_code=c,true]/*程序功能:P1.0输出PWM信号,按S19键直流电机加速
?按S20键直流电机减速旋转*/
#include "reg52.h"
sbit P1_0=P1^0;
sbit P1_1=P3^6;
sbit P1_2=P3^7;
unsigned char PWMH; //高电平脉冲的个数
unsigned char PWM; //PWM周期(脉冲宽度调制)
unsigned char COUNTER;
void K1CHECK();
void K2CHECK();
void INTTO() interrupt 1
{
COUNTER++; //计数值加1
if(/*(COUNTER!=PWMH)&&*/(COUNTER==PWM)) //如果等于高电平脉冲数
{
COUNTER=1; //计数器复位
P1_0=1; //P1.0为高电平
}
else if(COUNTER==PWMH)
P1_0=0; //P1.0变为低电平
}
main()
{
PWMH=0x02;//2个
COUNTER=0x01;
PWM=0x15;//21
TMOD=0x02; //定时器0在模式2下工作(8位初值自动重装的8位定时/计数器)
TL0=0x38; //定时器每200us产生一次溢出
TH0=0x38; //自动重装的值
ET0=1; //使能定时器0中断
EA=1; //使能总中断
TR0=1; //开始计时
while(1)
{
if(P1_1==0)
K1CHECK();//扫描KEY1,
if(P1_2==0)
K2CHECK();//扫描KEY2,如果按下KEY2,跳转到KEY2处理程序
}
}
void K1CHECK()//加速程序
{
while(P1_1==0);//松手检查
if(PWMH!=PWM)//0x15=21
{
PWMH++;
if(PWMH==PWM)
{
TR0=0;
P1_0=1;
}
/*else
{
if(PWMH==0x02)
{
TR0=1;
}
}*/
}
}
void K2CHECK()//减速程序
{
unsigned char TEMP;
while(P1_2==0);
if(PWMH!=0x01)
{
PWMH--;
TEMP=PWM;
TEMP--;
if(PWMH==0x01)
{
TR0=0;
P1_0=0;
}
/*else
{
if(PWMH==TEMP)
{
TR0=1;
}
}*/
}
}
[/mw_shl_code]
[mw_shl_code=c,true][/mw_shl_code]
[mw_shl_code=c,true]请问?为什么把下面这段删掉,电机速度减到0之后,按加速键加速不了?[/mw_shl_code]
[mw_shl_code=c,true]/*else
{
if(PWMH==TEMP)
{
TR0=1;
}
}*/
[mw_shl_code=c,true]
[/mw_shl_code]
[/mw_shl_code]
|