|
小车有两种模式可通过蓝牙软件切换
单片机源程序如下:
#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
|