找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1380|回复: 0
打印 上一主题 下一主题
收起左侧

大家看一下,为什么单片机小车不能用蓝牙和按键驱动前进,后退?

[复制链接]
跳转到指定楼层
楼主
ID:900384 发表于 2021-4-17 16:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家看一下,为什么小车不能用蓝牙和按键驱动前进,后退

单片机源程序如下:
#include "REG51.h"
#include "oled.h"
#include "bmp.h"
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit S2 = P2^3;
sbit S3 = P2^2;
sbit S4 = P2^1;
sbit S5 = P2^0;
int num;
unsigned int time;
uint w,a,s,d,q,e;
sbit LIN1=P1^5;         
sbit LIN2=P1^4;
sbit LIN3=P1^3;         
sbit LIN4=P1^2;
void delay(uint z)
{
        uint x,y;
        for(x = z; x > 0; x--)
                for(y = 114; y > 0 ; y--);                 
}


void delay_nus(unsigned int i)  
{
  i=i/10;
  while(--i);
}   
void delay_nms(unsigned int n)
{
  n=n+1;
  while(--n)  
  delay_nus(900);         
  
}  
void UsartInit()
{
SCON=0X50;   
TMOD=0X20;   
PCON=0X80;   
TH1=0XF9;   
TL1=0XF9;
ES=1;      
EA=1;      
TR1=1;     
}


char i;
int msy;
void forward()
{
        uchar t;
                OLED_Init();                        
                                t=' ';
LIN1=1;LIN2=0;LIN3=0;LIN4=1;
OLED_ShowCHinese(20,0,0);
OLED_ShowCHinese(40,0,1);
   
}
void back()
{
uchar t;
                OLED_Init();                          
                                t=' ';
LIN1=0;LIN2=1;LIN3=1;LIN4=0;
OLED_ShowCHinese(20,0,2);
OLED_ShowCHinese(40,0,3);
}


void stop()
{


LIN1=1;LIN2=1;LIN3=1;LIN4=1;

}

void left()
{
uchar t;
                OLED_Init();                        
                                t=' ';
LIN1=1;LIN2=1;LIN3=0;LIN4=1;
OLED_ShowCHinese(20,0,4);
OLED_ShowCHinese(40,0,7);
}
void right()
{
uchar t;
                OLED_Init();                        
                                t=' ';
LIN1=1;LIN2=0;LIN3=1;LIN4=1;
OLED_ShowCHinese(20,0,6);
OLED_ShowCHinese(40,0,5);
}
void ControlCar(unsigned char ConType)  


{
  stop();
switch(ConType)
  {
   case 01:forward(); delay(500);break;
   case 02:left(); delay(500);break;
   case 03:right();delay(500);break;
   case 04:back();delay(500);break;
   case 05:stop();delay(500);break;
  }
}


void InitTimer0(void)
{
    TMOD = 0x01;
    TH0 = 0x0D8;
    TL0 = 0x0F0;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}


void sao()
{if(S2 == 0)
                {
                        delay(20);
                        if(S2 == 0)
                        {w=w+1;
                                q=time;

                                while(!S2);
                                
                        }        
                }


if(S3 == 0)
                {
                        delay(20);
                        if(S3 == 0)
                        {a=a+1;

                                while(!S3);
                                
                        }        
                }
if(S4 == 0)
                {
                        delay(20);
                        if(S4 == 0)
                        {
s=s+1;
e=time;               
                                while(!S4);
                                
                        }        
                }
if(S5 == 0)
                {
                        delay(20);
                        if(S5 == 0)
                        {
d=d+1;
                                while(!S5);
                        }        
                }
}

        void Timer0Interrupt(void) interrupt 1
{
    TH0 = 0x0D8;
    TL0 = 0x0F0;
    time++;
         sao();
        if(q!=0||e!=0)
        {switch(msy)
                        {
                 
                 case 0:stop();
                 case 1:if(time==q+3000){time=0;w=0;s=0;stop();msy=0;q=0;}break;
                 case 2:if( time==q+6000){time=0;w=0;s=0;stop();msy=0;q=0;}break;                        
                 case 3:if( time ==q+9000){time=0;w=0;s=0;stop();msy=0;q=0;}break;                        
                 case -1:if( time ==e+3000){time=0;w=0;s=0;stop();msy=0;e=0;}break;               
                 case -2:if( time ==e+6000){time=0;w=0;s=0;stop();msy=0;e=0;}break;
                 case -3:if( time ==e+9000){time=0;w=0;s=0;stop();msy=0;e=0;}break;                        
                   }
    }
}        
void UARTInit()  
{
    EA=1;
        ES=1;
        SM0=0;SM1=1;
        REN=1;
        TR1=1;
        TMOD|=0X20;
        TH1=0xfd;
        TL1=0xfd;
}






void Usart() interrupt 4
{
uchar receiveData;
uint a;
   delay_nms(50);
receiveData=SBUF;

ControlCar(5);
delay_nms(50);
   RI=0;
   a=SBUF;
   a=SBUF%16;
  ControlCar(a);
  delay_nms(50);
SBUF=receiveData;
while(!TI);   
TI=0;      
}
void         main()
{
         w=0;a=0;s=0;d=0;
        msy=0;
        time=0;
        InitTimer0();
         
                                while(1){
   delay_nms (10);
UARTInit();
  delay_nms (10);
msy=w-s;
  if(msy!=0)
               
        {
                if(msy>0)
               
                forward();
                else
                        back();
               }
        
                        if(a>0)
                {right();
                a--;
                delay(2000);
                stop();}
                 if(d>0)
                { left();
                d--;
                delay(2000);
        stop();}
        
}
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表