数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 384|回复: 0

[C51] 51单片机蓝牙小车程序

[复制链接]
发表于 2024-2-29 21:01:17 | 显示全部楼层 |阅读模式


小车有两种模式可通过蓝牙软件切换
单片机源程序如下:
#include <reg52.h>
#define uc unsigned char
#define ui unsigned int
   
#define  LCDIO     P2   

sbit LCD1602_RS=P1^2;   
sbit LCD1602_RW=P1^1;   
sbit LCD1602_EN=P1^0;

sbit q1=P0^3;
sbit q1_1=P1^3;

sbit q2=P1^5;
sbit q2_2=P1^4;

sbit h1=P0^1;
sbit h1_1=P0^2;

sbit h2=P1^6;
sbit h2_2=P1^7;


sbit yn1=P0^6;
sbit yn2=P0^7;

sbit zn1=P0^4;
sbit zn2=P0^5;

sbit fm=P0^0;

sbit hw1=P3^7;
sbit hw2=P3^6;
sbit hw3=P3^5;
sbit hw4=P3^4;

#define qian  q1=1; q1_1=0; q2=1; q2_2=0; h1=1; h1_1=0; h2=1; h2_2=0;
#define hou   q1=0; q1_1=1; q2=0; q2_2=1; h1=0; h1_1=1; h2=0; h2_2=1;
#define zuo   q1=0; q1_1=1; q2=1; q2_2=0; h1=0; h1_1=1; h2=1; h2_2=0;
#define you   q1=1; q1_1=0; q2=0; q2_2=1; h1=1; h1_1=0; h2=0; h2_2=1;
#define tin   h1=1; h1_1=1; h2=1; h2_2=1; q1=1; q1_1=1; q2=1; q2_2=1;


#define n1k yn1=1; yn2=1;
#define n1g yn1=0; yn2=0;
#define n2k zn1=1; zn2=1;
#define n2g zn1=0; zn2=0;

uc receiveData;
uc jj=0,ll=0;
uc kk=0,mm=0;
uc b=0;
bit h=0;

uc bb=0;

void delay(ui shi)
{
    while(shi--);
}

void LCD_Busy(void) //1602判忙
{

    uc i;
    LCDIO=0xff;
    LCD1602_RS=0;   
    LCD1602_RW=1;
    for(i=0;i<200;i++)
    {
        LCD1602_EN=0;
        LCD1602_EN=1;
        if(!(LCDIO&0x80))break;
    }
    LCD1602_EN=0;
    LCD1602_RW=0;
}

void LCD_en_command(uc command)
{
    LCD_Busy();
    LCD1602_RS=0;   
    LCDIO=command;
    LCD1602_EN=1;
    LCD1602_EN=0;
}

void LCD_en_dat(uc dat)
{
    LCD_Busy();
    LCD1602_RS=1;
    LCDIO=dat;
    LCD1602_EN=1;
    LCD1602_EN=0;
}


void LCD_set_xy( uc x, uc y )
{
    uc address;
    x&=0x0f;
    if (y == 0)
     address = 0x80 + x;
    else
     address = 0xC0 + x;
    LCD_en_command(address);
}


void LCD_write_char( uc x,uc y,uc dat)
{
    LCD_set_xy( x, y );
    LCD_en_dat(dat);
}

void LCD_write_string(uc X,uc Y,uc *s)
{
    LCD_set_xy( X, Y );
    while (*s)   
    {
        LCD_en_dat(*s);  
        s ++;         
    }
}


void LCD_init(void)//1602初始化
{
    LCD1602_EN=0;         
    LCD_en_command(0x38);  
    LCD_en_command(0x0C);   
    LCD_en_command(0x01);   
}

void pwm1()
{
    you;
    n1k;
    delay(8000);
    n1g;
    delay(5000);
}

void pwm2()
{
    zuo;
    n2k;
    delay(8000);
    n2g;
    delay(5000);
}




void pwm3()
{
    qian;
    n1k; n2k;
    delay(500);
    n1g; n2g;
    delay(3000);
}

void pwm4()
{
    hou;
    n1k; n2k;
    delay(500);
    n1g; n2g;
    delay(3000);
}

void pwm5()
{
    you;
    n1k;
    delay(5000);
    n1g;
    delay(4000);
}

void pwm6()
{
    zuo;
    n2k;
    delay(5000);
    n2g;
    delay(4000);
}


void biz()
{
    pwm3();
    if(hw1==0||hw4==0){pwm5();}
    if(hw2==0||hw3==0){pwm6();}
    if(hw1==0&&hw3==0){pwm3();}
    if(hw2==0&&hw4==4){pwm4();}
}

void kongzhi()
{
    switch(bb)
    {
        case 0:if(kk==1){pwm2();} else{n1k;n2k; qian;}  if(mm==1){pwm1();} else{n1k;n2k; qian;} if((jj==0&&kk==0)||(jj==0&&mm==0)){bb=4;} break;
        case 1:if(kk==1){pwm1();} else{n1k;n2k; hou;}   if(mm==1){pwm2();}else{n1k;n2k; hou;}  if((ll==0&&kk==0)||(ll==0&&mm==0)){bb=4;} break;
        case 2:if(jj==1){n1k; n2k;qian;}else{n1k; n2k; zuo;} if(ll==1){n1k; n2k;hou;}else{n1k; n2k; zuo;} if(kk==0) {bb=4;} break;
        case 3:if(jj==1){n1k; n2k;qian;}else{n1k; n2k; you;} if(ll==1){n1k; n2k;hou;}else{n1k; n2k; you;} if(mm==0) {bb=4;} break;
        case 4: tin; break;
    }
            
}
void moshi()
{
    if(h==0){kongzhi();}
    if(h==1){biz();}
}

void tishi()
{
    if(b==1){fm=0; delay(4000); fm=1;delay(40000);fm=0; delay(4000); fm=1;delay(40000); b=0;}
}

void ckinit()
{SCON=0x50;//设定串口工作方式0101 0000

PCON=0x00;

TMOD=0x20;

EA=1;

ES=1;

TL1=0xfd;//波特率9600

TH1=0xfd;

TR1=1;

}


void init()
{
    ckinit();
    LCD_init();
    LCD_write_string(0,0,"inti");
    delay(50000);
    qian;
    LCD_write_string(0,0,"inti.");
    delay(50000);
    LCD_write_string(0,0,"inti..");
    delay(50000);
    LCD_write_string(0,0,"inti...");
    delay(50000);
    LCD_write_string(0,0,"inti....");
    delay(50000);
    LCD_write_string(0,0,"inti.....");
    delay(50000);
    tin;
    LCD_write_string(0,0,"ok         ");
   
    fm=0; delay(30000); fm=1; delay(30000);
    LCD_write_string(0,0,"         ");
    fm=0; delay(30000);  LCD_write_string(0,0,"ok         ");  fm=1; delay(30000);fm=0;LCD_write_string(0,0,"         "); delay(30000);LCD_write_string(0,0,"ok         ");  fm=1; LCD_write_string(0,0,"remote control ");
}

void main()
{
    init();
    while(1)
    {
     tishi();
     moshi();
    }
}

void Usart() interrupt 4
{
    receiveData=SBUF;
    RI = 0;
   
    if(receiveData=='p') {b=1;}
   
    if(receiveData=='s') {jj=1;}
    if(receiveData=='a') {jj=0;}
   
    if(receiveData=='w') {ll=1;}
    if(receiveData=='q') {ll=0;}
   
    if(receiveData=='t') {kk=1;}
    if(receiveData=='e') {kk=0;}
   
    if(receiveData=='i') {mm=1;}
    if(receiveData=='o') {mm=0;}
   
    if(receiveData=='k') {fm=0; n1g; n2g;  delay(4000); fm=1;delay(40000);fm=0; delay(4000); fm=1;delay(40000); h=~h;}
   
    if(jj==1){bb=0;}
    if(ll==1){bb=1;}
    if(kk==1){bb=2;}
    if(mm==1){bb=3;}
    if(h==0){LCD_write_string(0,0,"remote control ");}
    if(h==1){LCD_write_string(0,0,"tracking       ");}
}



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-26 03:35 , Processed in 0.327601 second(s), 10 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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