wifi智能小车控制程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar Buffer =0; //从串口接收的数据
uint URTAReceivedCount=0,n=1;
uchar data Tempdatatable[5],CommandDatatable[5];//数据包
uchar serVal[2];
uint pwm[]={1120,1190,1382,1382,1382,1382,1382,1382}; //初始90度,(实际是1382.4,取整得1382)
uchar pwm_flag=0;
uint code ms0_5Con=461; //0.5ms计数(实际是460.8,取整得461)
uint code ms2_5Con=2304; //2.5ms计数
bit key_stime_ok;
sbit StatusLight=P2^0; //状态灯
sbit MainLight=P2^1; //主大灯
sbit servo0=P0^0; //舵机控制
sbit servo1=P0^1;
sbit servo2=P0^2;
sbit servo3=P0^3;
sbit servo4=P0^4;
sbit servo5=P0^5;
sbit servo6=P0^6;
sbit servo7=P0^7;
//定义智能小车驱动模块输入IO
sbit IN1 = P1^0; // 高电平1 后退(反转)
sbit IN2 = P1^1; // 高电平1 前进(正转)
sbit IN3 = P1^2; // 高电平1 前进(正转)
sbit IN4 = P1^3; // 高电平1 后退(反转)
sbit EN1 = P1^4; // 高电平使能
sbit EN2 = P1^5; // 高电平使能
/********************************************************************
* 名称: Delay_1ms()
* 功能: 延时子程序,延时时间为1ms * x
* 输入: x (延时一毫秒的个数)
* 输出: 无
***********************************************************************/
void Delay_1ms(uint i)//1ms延时
{
uchar x,j;
for(j=0;j
for(x=0;x<=148;x++);
}
void TurnOnStatusLight()
{
StatusLight=0;
}
/********************************************************************
* 名称: Send_Data()
* 功能: 向上位机传送字符
* 输入: 无
* 输出: 无
***********************************************************************/
void Send_Data(uchar type,uchar cmd,uchar dat)
{
uchar data Buffer[5];//构建数据包
uchar *p;
uint Send_Count=0;
p = Buffer;
Buffer[0]=0XFF;
Buffer[1]=type;
Buffer[2]=cmd;
Buffer[3]=dat;
Buffer[4]=0XFF;
while(1)
{
if(*p==0XFF)
{
Send_Count++; //0XFF标志统计位
}
SBUF = *p; //发送
while(!TI) //如果发送完毕,硬件会置位TI,等待发送完毕
{
_nop_();
}
p++;
TI = 0;
if(Send_Count == 2) //当统计到两次出现0XFF,则认为一个数据包发送完毕,跳出循环
{
TI = 0;
break;
}
}
}
/********************************************************************
协议规定:
包头类型位数据位数据位结束位
0XFF 0X** OX** 0X** 0XFF
各命令说明:
类型位数据位数据位功能
0X00 0X02 0X00 前进
0X00 0X01 0X00 后退
0X00 0X03 0X00 左转
0X00 0X04 0X00 右转
0X00 0X00 0X00 停止
0X01 0X01 角度舵机1
0X01 0X02 . 舵机2
0X01 0X01 . 舵机3
0X01 0X02 . 舵机4
0X01 0X01 . 舵机5
0X01 0X02 . 舵机6
0X01 0X01 . 舵机7
0X01 0X02 数据舵机8
0X02 0X01 车灯亮
0X02 0X02 车灯灭
0X03 雷达数据发送雷达数据
***********************************************************************/ /********************************************************************
* 名称: Com_Int()
* 功能: 串口中断子函数
***********************************************************************/ void Com_Int(void) interrupt 4
{
uchar temp;
ES=0; //关串口中断
RI=0; //软件清除接收中断
temp=SBUF;
if(temp==0XFF && URTAReceivedCount<3)