我用无线遥控PT2262和无线接收模块PT2272及电机驱动模块,结合单片机做了一个遥控小车,当按下前进也就是遥控器的A时,送开按键,小车还一直跑,而且再按遥控器的左转、右转、后退,小车的状态不变化,用数码管检测到程序运行到左转、右转等状态。还有就是用M4的遥控器如何实现5种行驶状态.
程序如下:
#include <reg52.h>
#include "car_file.h"
void main()
{
P3=0X00;
P1=0xff;
TMOD = 0X02;
TH0 = 256-um;
TL0 = 256-um;
EA = 1;
ET0 = 1;
TR0 = 1;
while(1)
{
keyscan();
// display(1);
}
}
void keyscan()
{
uchar num;
num = P1&0X0f;
{
if(num == 0x01)
{
left();
}
else stop();
if(num == 0x02)
{
go();
}
else stop();
if(num == 0x04)
{
right();
}
else stop();
if(num == 0x08)
{
back();
}
else stop();
}
}
void go()
{
IN1 = pwm(dutyleft);
IN2 =0;
IN3 = pwm(dutyright);
IN4 = 0;
}
void back()
{
IN2 = pwm(dutyleft);
IN1 = 0;
IN4 = pwm(dutyright);
IN3 = 0;
}
void left()
{
IN3 = pwm(dutyright);
IN4 =0;
IN1 = 0;
IN2 = 0;
}
void right()
{
IN1 = pwm(dutyleft);
IN2 = 0;
IN3 = 0;
IN4 = 0;
}
void stop()
{
IN1 = 0;
IN2 = 0;
IN3 = 0;
IN4 = 0;
}
void delay(uint z)
{
uint x,y;
for(x = z;x >0 ;x--)
for(y = 110;y > 0; y--);
}
void timer0() interrupt 1
{
t++;
}
uchar pwm(uchar dj_duty)
{
uchar duty;
if(t<=dj_duty)
{
duty= 1;
}
else
{
duty = 0;
}
if(t==20)
t=0;
return duty;
}
|