关于使用PWM控制之路电机。
一个使用51的定时器产生的pwm控制直流电机转动的程序。直流电机的驱动是使用A1015三极管,在调试的时候,每次只能使用一个按键,要使用另一个就得复位,为什么这样,是不是电机的干扰是的单片机失常,奇怪的是,每次只有一个按键可以用,只要不复位,那个按键就可以,其他的不可以。要是真的是干扰,应该接电容,还是怎么呢?我接过电容,木有效果。还是程序出问题呢?//硬件连接: F1 - P3.0 F2 - P3.1 F3 - P3.2 F4 - P3.3
#include < reg52.h >
#define uintunsigned int
sbit out_put = P1^0;
sbit f1=P3^0;
sbit f2=P3^1;
sbit f3=P3^2;
sbit f4=P3^3;
int a = 0;
int k = 20;
/***************一微秒延时子程序******************/
void delayus(uint delay){
while(delay--);
}
/***************一毫秒延时子程序******************/
void delayms(uint delay)
{
while(delay--)
delayus(149);
}
//******定时器2初始化函数*******
void init_time_2_( void )
{
EA = 1;
ET1 = 1;
TCON = 0X01;//设置定时器1工作
TMOD = 0X00;
TL1 = 0;
TH1 = 0;
TR1 = 1;
}
void time_1_( void ) interrupt 3
{
a++;
if( a == 40 ) {a = 0;out_put = 1;}
if( a == k ) out_put = 0;
TL1 = 0xef;
TH1 = 0xff;
}
void get_key( void )
{
if( f1==0 )
{
delayms( 20);
while( f1==1 );
k += 1;
if( k > 40 )k = 0;
if( k == 40 )P2 = 0x55;
}
if( f2==0 )
{
delayms( 20 );
while( f2==1 );
k -= 1;
if( k < 0 ) k = 40;
}
if( f3==0 )
{
delayms( 20 );
while( f3==1 );
EA = 0;
}
if( f4==0 )
{
delayms( 20 );
while( f4==1 );
EA = 1;
}
}
void main ()
{
init_time_2_( );
while ( 1 )
{
get_key();
}
} 看来没有人鸟我,我自己搞好了·······{:tongue:}
页:
[1]