微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 基于51单片机制作的智能小车

基于51单片机制作的智能小车

时间:10-02 整理:3721RD 点击:
你们好,我用51单片机制作了一个小车,目前只是前进后退水平(用手机蓝牙控制),但是现在遇到了一些问题,代码上的设计问题:我想让它按下前进键的时候前进松开的时候停止,同理,其余的键也是一样。但是我按照这个思路设计出来的代码却不尽人意!现在我把我的代码贴在下面,请各位帮忙看看,指教一下,哪里出了问题?在这先谢谢了
#include<reg52.h>
#define uchar unsigned char
sbit IN1=P1^1;
sbit IN2=P1^2;
sbit IN3=P0^0;
sbit IN4=P0^1;
void delay(uchar XMS)
{
    uchar i,j;
    for(i=XMS;i>0;i--)
        for(j=110;j>0;j--);
}
void init()
{
    TMOD=0x20;
    TH1=0xfd;
    TL1=0xfd;
    SM0=0;
    SM1=1;
    REN=1;
    TR1=1;
    SM2=0;
    PCON=0x00;
    EA=1;
    ES=1;
    IN1=1;
    IN2=1;
    IN3=1;
    IN4=1;
}
void qianjin()
{
    IN1=0;
    IN2=1;
    IN3=0;
    IN4=1;
}
void houtui()
{
    IN1=1;
    IN2=0;
    IN3=1;
    IN4=0;
}
void zuozhuan()
{
    IN1=1;
    IN2=0;
    IN3=0;
    IN4=1;
}
void youzhuan()
{
    IN1=0;
    IN2=1;
    IN3=1;
    IN4=0;
}
void tingzhi()
{
    IN1=0;
    IN2=0;
    IN3=0;
    IN4=0;
}
void main()
{
    init();
    while(1)
    {
        tingzhi();
    }
}
void timer0()interrupt 4
{
    unsigned char shuju;
    RI=0;
    shuju=SBUF;
    if(shuju==65)
        {qianjin();}
    if(shuju==66)
        {houtui();}
    if(shuju==67)
        {zuozhuan();}
    if(shuju==68)
        {youzhuan();}
    if(shuju==69)
        {tingzhi();}
}

可以参照这个程序自己适当修改下
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
int buffer[3];
int rec_flag=0;
/*-------------------------------------------------------------*/
//串口初始化
void UART_Init(void)
{
TMOD = 0x21;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd; //设置波特率 9600
TL1 = 0xFd;
TR1 = 1; //启动定时器1
ES = 1; //开串口中断
EA = 1; //开总中断
IT0=0;
EX0=1;
}
/*-------------------------------------------------------------*/
//主函数
void main(void)
{
UART_Init(); //初始化串口
while(1)
{
}
}
void Communication_Decode(void)
{
if(buffer[0]==0x00)
{
switch(buffer[1])
{
case 0x01:P1=0xF6; return;
case 0x02:P1=0xF9; return;
case 0x03:P1=0xF5; return;
case 0x04:P1=0xFA; return;
case 0x00:P1=0x00; return;
default: return;
}
}
else
{
return;
}
}
/*-------------------------------------------------------------*/
//串口接收中断函数
void INT_UartRcv(void) interrupt 4
{
static int i;

if(RI==1)
{
RI = 0;
if(rec_flag==0)
{
if(SBUF==0xff)
{
rec_flag=1;
i=0;
}
}
else
{
if(SBUF==0xff)
{
rec_flag=0;
if(i==3)
{
Communication_Decode();
}
i=0;
}
else
{
buffer[i]=SBUF;
i++;
}
}
}
else
{
TI = 0;
}
}

这个协议是 FF00XX00FF   停止是FF000000FF 前进FF000100FF 后退FF000200FF以此类推,自己定义P1=多少就好

看看                 

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top