找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2158|回復(fù): 2
收起左側(cè)

單片機(jī)履帶車(chē)程序求助

[復(fù)制鏈接]
ID:231793 發(fā)表于 2020-7-30 16:35 | 顯示全部樓層 |閱讀模式
本人單片機(jī)新手,做了一個(gè)履帶車(chē),必須七個(gè)遙控功能,前進(jìn),后退,加速,減速,左轉(zhuǎn),右轉(zhuǎn)還有停車(chē)。使用PT2272M6最多六個(gè)通道,設(shè)想在pt2262遙控的前進(jìn)鍵用軟件(51單片機(jī))實(shí)現(xiàn)按一下前進(jìn),再按一下停車(chē),按說(shuō)很簡(jiǎn)單的程序我就是弄不好,哪位專(zhuān)業(yè)師傅給幫我弄一下,不勝感謝。下面是源程序,K1是前進(jìn)鍵,K5是停止鍵。

單片機(jī)源程序如下:
#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;
}
回復(fù)

使用道具 舉報(bào)

ID:808485 發(fā)表于 2020-7-30 17:34 | 顯示全部樓層
我假設(shè)你車(chē)輛控制程序都正常了,只是這個(gè)按鍵邏輯搞不定,給出如下建議:
設(shè)計(jì)檔位概念,共 5 檔:前進(jìn)2檔,前進(jìn)1檔,停車(chē)0檔,后退-1檔,后退-2檔
key1 升檔, key2 降檔,key3/key4空閑,key5停車(chē)保留
可以通過(guò)連續(xù)按 key1 從-2檔一直升到+2檔,key2同理
代碼如下:

while(1)
{
        static char speed=0;
        if(key1 == 0)
        {
                delay(10);
                if(key1 == 0)
                {
                        if(++speed > 2)speed = 2;
                }
                while(key1 == 0);
        }
        if(key2 == 0)
        {
                delay(10);
                if(key2 == 0)
                {
                        if(--speed < -2)speed = -2;
                }
                while(key2 == 0);
        }
        if(key3 == 0)
        {
                delay(10);
                if(key3 == 0)
                {
                }
                while(key3 == 0);
        }
        if(key4 == 0)
        {
                delay(10);
                if(key4 == 0)
                {
                }
                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);
        }
        //根據(jù)速度代碼輸出
        switch( speed )
        {
                case 2:
                //高速前進(jìn)
                        quick();
                break;
                case 1:
                //低速前進(jìn)
                        forward();
                        slow();
                break;
                case 0:
                //停車(chē)
                        stop();
                break;
                case -1:
                //低速后退
                        fallback();
                        slow();
                break;
                case -2:
                //高速后退
                        quick();
                break;
                default:
                        speed=0;
                break;
        }
}
回復(fù)

使用道具 舉報(bào)

ID:231793 發(fā)表于 2020-7-30 20:33 | 顯示全部樓層
gbchang 發(fā)表于 2020-7-30 17:34
我假設(shè)你車(chē)輛控制程序都正常了,只是這個(gè)按鍵邏輯搞不定,給出如下建議:
設(shè)計(jì)檔位概念,共 5 檔:前進(jìn)2檔 ...

謝謝這么快就回復(fù)了,你的這個(gè)思路和程序很好,我馬上調(diào)試程序,再次謝謝!謝謝!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表