51蓝牙小车
插入链接与图片
链接: [link](https://mp.csdn.net.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
#include <reg51.h> //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit IN3=P1^2;
sbit IN4=P1^3;
sbit IN5=P0^0;
sbit IN6=P0^1;
sbit IN7=P0^2;
sbit IN8=P0^3;
sbit PWM_L=P2^0;
sbit PWM_R=P2^1;
sbit PWM_L2=P2^2;
sbit PWM_R2=P2^3;
#define CAR_SPEED_MAX 10
#define up ‘A’
#define down ‘B’
#define left ‘C’
#define right ‘D’
#define stop ‘E’
#define ALL ‘F’
#define speed5 ‘2’
#define speed10 ‘8’
#define L_go IN1=0;IN2=1 //左轮前进
#define L_back IN1=1;IN2=0 //左轮后退
#define L_stop IN1=0;IN2=0 //左轮停止,两个输出1也可以
#define R_go IN3=1;IN4=0 //右轮前进
#define R_back IN3=0;IN4=1 //右轮后退
#define R_stop IN3=0;IN4=0 //右轮停止,两个输出1也可以
#define L_go2 IN5=1;IN6=0 //左轮前进
#define L_back2 IN5=0;IN6=1 //左轮后退
#define L_stop2 IN5=0;IN6=0 //左轮停止,两个输出1也可以
#define R_go2 IN7=0;IN8=1 //右轮前进
#define R_back2 IN7=1;IN8=0 //右轮后退
#define R_stop2 IN7=0;IN8=0 //右轮停止,两个输出1也可以
#define car_go L_go;R_go;L_go2;R_go2 //小车前进
#define car_back L_back;R_back;L_back2;R_back2 //小车后退
#define car_left R_go;L_back;L_go2;R_back2 //小车左转弯
#define car_right L_go;R_back;R_go2;L_back2 //小车右转弯
#define car_stop L_stop;R_stop;L_stop2;R_stop2 //小车停车
u8 HighRH = 0;
u8 HighRL = 0;
u8 LowRH = 0;
u8 LowRL = 0;
bit flag_REC=0;
bit flag=0;
u8 i=0;
u8 dat=0;
u8 buff[5]=0; //接收缓冲字节
/*******************************************************************************
- 函数名 :UsartInit()
- 函数功能 :设置串口
- 输入 : 无
- 输出 : 无
*******************************************************************************/
void UsartInit()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X00; //波特率加倍
TH1=0XFd; //计数器初始值设置,注意波特率是9600的
TL1=0XFd;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
void ConfigPWM(unsigned int fr, unsigned char dc)
{
unsigned long tmp;
unsigned int high, low;
tmp = 11059200/12/fr;
high = (tmp*dc)/100;
low = tmp - high;
high = 65536 - high + 12;
low = 65536 - low + 12;
HighRH = (unsigned char)(high >>8);
HighRL = (unsigned char)high;
LowRH = (unsigned char)(low >> 8);
LowRL = (unsigned char)low;
TMOD &= 0xF0;
TMOD |= 0x01;
TH0 = HighRH;
TL0 = HighRL;
ET0 = 1;
TR0 = 1;
PWM_L = 1;
PWM_R = 1;
PWM_L2 = 1;
PWM_R2 = 1;
EA = 1;
}
void ControlCar()
{
if(flag_REC==1) //
{
flag_REC=0;
if(buff[0]=='O'&&buff[1]=='N') //第一个字节为O,第二个字节为N,第三个字节为控制码
switch(buff[2])
{
case up: // 前进
car_go;
break;
case down: // 后退
car_back;
break;
case left: // 左转
car_left;
break;
case right: // 右转
car_right;
break;
case stop: // 停止
car_stop;
break;
case speed5:
ConfigPWM(100,30);
break;
case speed10:
ConfigPWM(100,60);
break;
case ALL: // 停止
car_stop;
break;
}
}
}
/*******************************************************************************
- 函 数 名 : main
- 函数功能 : 主函数
- 输 入 : 无
- 输 出 : 无
*******************************************************************************/
void main()
{
UsartInit(); // 串口初始化
ConfigPWM(100,40);
while(1)
{
ControlCar();
}
}
void InterruptTimer0() interrupt 1
{
if (PWM_L == 1&&PWM_R == 1) //当前输出为高电平时,装载低电平值并输出低电平
{
TH0 = LowRH;
TL0 = LowRL;
PWM_L = 0;
PWM_R = 0;
PWM_L2 = 0;
PWM_R2 = 0;
}
else //当前输出为低电平时,装载高电平值并输出高电平
{
TH0 = HighRH;
TL0 = HighRL;
PWM_L = 1;
PWM_R = 1;
PWM_L2 = 1;
PWM_R2 = 1;
}
}
/*******************************************************************************
-
函数名 : Usart() interrupt 4
-
函数功能 : 串口通信中断函数
-
输入 : 无
-
输出 : 无
*******************************************************************************/
void sint() interrupt 4 //中断接收3个字节
{if(RI) //是否接收中断
{
RI=0;
dat=SBUF;
if(dat==‘O’&&(i0)) //接收数据第一帧
{
buff[i]=dat;
flag=1; //开始接收数据
}
else
if(flag1)
{
i++;
buff[i]=dat;
if(i>=2)
{
i=0;
flag=0;
flag_REC=1;
} // 停止接收
}
}
}
生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目