|
本人單片機新手,做了一個履帶車,必須七個遙控功能,前進(jìn),后退,加速,減速,左轉(zhuǎn),右轉(zhuǎn)還有停車。使用PT2272M6最多六個通道,設(shè)想在pt2262遙控的前進(jìn)鍵用軟件(51單片機)實現(xiàn)按一下前進(jìn),再按一下停車,按說很簡單的程序我就是弄不好,哪位專業(yè)師傅給幫我弄一下,不勝感謝。下面是源程序,K1是前進(jìn)鍵,K5是停止鍵。
單片機源程序如下:
#include <reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
//L298N????
sbit ena = P0^0;
sbit in1 = P0^1;
sbit in2 = P0^2;
sbit in3 = P0^3;
sbit in4 = P0^4;
sbit enb = P0^5;
//??
sbit key1 = P3^3; //????
sbit key2 = P3^4; //????
sbit key3 = P3^6; //????
sbit key4 = P3^7;
sbit key5 = P2^0;
sbit key6 = P2^1;
sbit key7 = P2^2;
sbit key8 = P2^3;
sbit relay = P2^4;//????
u16 MA = 0,MB = 0; //pwm???
u16 SpeedA = 20; //50%???
u16 SpeedB = 20;
u8 flag; //??,1????,0????
//???????sbuf
void delay(u16 z); //??????
//??
void forward()
{
flag = 1; //??????
in1=1; //l298n??
in2=0;
in3=1;
in4=0;
}
//??
void fallback()
{
flag = 0; //??????
in1=0;
in2=1;
in3=0;
in4=1;
}
//??
void quick()
{
SpeedA += 1; //???1
if(SpeedA >= 40) //??40
{
SpeedA = 40;
}
SpeedB += 1;
if(SpeedB >= 40)
{
SpeedB = 40;
}
}
//??
void slow()
{
SpeedA -= 1; //???1
if(SpeedA <= 5)//??5
{
SpeedA = 5;
}
SpeedB -= 1;
if(SpeedB <= 5)
{
SpeedB = 5;
}
}
//??
void move_left()
{
in1=1;
in2=0;
in3=0;
in4=0;
}
void move_right()
{
in1=0;
in2=0;
in3=1;
in4=0;
}
//??
void stop()
{
in1=0;
in2=0;
in3=0;
in4=0;
}
void delay(u16 z)
{
u16 x,y;
for(x=z;x>0;x--)
for(y=125;y>0;y--);
}
void main()
{
//????? ???T0
TMOD = 0x21; //T0?????????,T1?????????
//PCON = 0x00; //???????,???
//SCON = 0x50; //???????,???????,????
TH1 = 0xFD; //????
TL1 = 0xFD; //????
//TR1 = 1; //?????T1
TH0 = 0xF4; //????
TL0 = 0x48; //????
TR0 = 1; //?????T0
//ES = 1;//??????
//PS = 1; //??????
//PT0 = 1; //???0????
ET0 = 1;//?????T0??
EA = 1;//?????
//??????
while(1)
{
if(key1 == 0)
{
delay(10);
if(key1 == 0)
{
forward();
}
while(key1 == 0);
}
if(key2 == 0)
{
delay(10);
if(key2 == 0)
{
fallback();
}
while(key2 == 0);
}
if(key3 == 0)
{
delay(10);
if(key3 == 0)
{
quick();
}
while(key3 == 0);
}
if(key4 == 0)
{
delay(10);
if(key4 == 0)
{
slow();
}
while(key4 == 0);
}
if(key5 == 0)
{
delay(10);
if(key5 == 0)
{
stop();
}
while(key5 == 0);
}
if(key6 == 0)
{
delay(10);
if(key6 == 0)
{
move_left();
}
while(key6 == 0);
}
if(key7 == 0)
{
delay(10);
if(key7 == 0)
{
move_right();
}
while(key7 == 0);
}
if(key8 == 0)
{
delay(10);
if(key8 == 0)
{
relay=~relay;
}
while(!key8);
}
}
}
void time0_int() interrupt 1 //T = 3ms * 40 = 120ms
{
TR0 = 0;
TH0 = 0xF4;
TL0 = 0x48; //3000; 3ms
MA++;
if(MA < SpeedA)
{
ena = 1;
}
else
ena = 0;
if(MA == 40)
{
MA = 0;
}
MB++;
if(MB < SpeedB)
{
enb = 1;
}
else
enb = 0;
if(MB == 40)
{
MB = 0;
}
TR0 = 1;
}
|
|