C51单片机实现蓝牙小车 适合初学者 有详细解析

#include<reg52.h>

typedef unsigned char u8;
typedef unsigned int u16;

sbit X1=P2^0;//前两轮
sbit X2=P2^1;//20 21为前右 22 23为前左
sbit X3=P2^2;
sbit X4=P2^3;

sbit X5=P1^0;//后两轮
sbit X6=P1^1;//10 11为后右 12 13为后左
sbit X7=P1^2;
sbit X8=P1^3;

#define qian_go {X1=0,X2=1,X3=0,X4=1;}
#define qian_hui {X1=1,X2=0,X3=1,X4=0;}
#define qian_tin {X1=0,X2=0,X3=0,X4=0;}
#define qian_zuo {X1=1,X2=0,X3=1,X4=0;}
#define qian_you {X1=0,X2=0,X3=1,X4=0;}
#define hou_go {X5=0,X6=1,X7=0,X8=1;}
#define hou_hui {X5=1,X6=0,X7=1,X8=0;}
#define hou_tin {X5=0,X6=0,X7=0,X8=0;}
#define hou_zuo {X5=0,X6=1,X7=1,X8=0;}
#define hou_you {X5=1,X6=0,X7=0,X8=1;}

void go( );
void hui( );
void tin( );
void zuo( );
void you( );
void delay(u16 i);
void init( );
u8 flag,X;

void main( )
{
init( );
while(1)
{
if(flag==1)//确认flag为1 开始执行
{
switch(X)//这里的x代表下面的字符 与下面的中断函数X无关
{
case ‘1’:
go( );
//delay(100);
break;
case ‘2’:
hui( );

					break;
			case '3':
					zuo( );
					
					break;
			case '4':
					you( );
					
					break;
			case '5':
					tin( );
					
					break;
			default:
					break;
		}
	}
	RI=1;//串行口中断请求标志每次循环都将它置1.同意串行口请求 (一行串行数据被接收)
}

}

void init( )
{
TMOD=0x20;//0010 0000 TMOD中的gate为0 或门中为1 直接让TR1为1便可接通。ct中也选择了0即为定时模式 10是8位自动重装(与上者符合都用8位便于转换)
TH1=0xfd;//定时器重装初值
TL1=0xfd;//计数器重装
TR1=1;//开定时器1(若想开定时器0则将TR后数字换为0同时TH,TL后也换为0)
REN=1;//允许串行接收位(只能通过软件置1,启动串行接收位)
SM0=0;//10位异步是较为常用的方法
SM1=1;//01对应的是10位异步收发器
EA=1;//cpu开中断(总中断开关)
ES=1;//串行口中断允许位
flag=0;//先置为0 后中断函数中判断是否执行。
}

void go( )
{
qian_go;
hou_go;
}

void hui( )
{
qian_hui;
hou_hui;
}

void tin( )
{
qian_tin;
hou_tin;
}

void zuo( )
{
qian_zuo;
hou_zuo;
}

void you( )
{
qian_you;
hou_you;
}

void ser( )interrupt 4//4为串行口中断并进入程序中断函数
{
RI=0;//串行口不中断将接受的数据存入SBUF寄存器中
X=SBUF;//开始接受数据(将接收到的数据放入SBUF)定义的x是8位字节 恰好能够使用
flag=1;//重新置1
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值