我现在激光测距模块里的通讯协议是通过16进制码命令控制激光的打开,但16进制代码怎么输进去呢?#include <reg52.h>
#include"lcd.h"
#define uchar unsigned char
#define uint unsigned int
sbit k3=P3^2;
uint Sysec;
uchar ErrorCode;
uchar stringLenth;//串口收到的字符串长度,单次测量收到28字节 连续测量38个字节
#define maxSbufLenth 38 //根据测量模式设置缓存大小
uchar aciiCount; //收到的字符数计算
uchar multipleTestShift; //连续测量要减去一个偏移量10字节
char uartSbuf[11];//第20位是距离的十位数 21是个位数,后面是小数
uchar xdata laserOn[12] ={"$0003260130&"};
char xdata singleTest[4]={0x80,0x06,0x02,0x77};
uchar xdata multipleTest[10] ={"$00022426&"};
void Timer0Init(void) //50毫秒@6.000MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x58; //设置定时初值
TH0 = 0x9E; //设置定时初值
TF0 = 0; //清除TF0标志
//TR0 = 1; //定时器0开始计时
ET0=0;
EA=1;
}
void UartInit(void) //115200bps@11.0592MHz
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X00; //波特率加倍
TH1=0XFD; //计数器初始值设置,注意波特率是9600的
TL1=0XFD;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
/*********** ***发送字符(ASCII)函数*** **********/
void sendAscii(char a[4])
{ int i;
ES = 0; //关串口中断
for (i=0;i<4;i++)
{
SBUF = a[i];
while (TI!=1); //等待发送完成
TI = 0; //清除发送中断标志位
}
ES = 1; //开串口中断
}
void clearUartSbuf()
{
uchar i;
for (i=0;i<11;i++)
{
uartSbuf[i]=0x00;
}
}
/*void main()
{
uchar test;
UartInit();
LcdInit();
sendAscii({0x80,0x06,0x02,0x78});//打开激光
for(i=0;i<11;i++)
{
LcdWriteData(Disp[i]);
}
while(1);
}
*/
void uartRec()interrupt 4{
ES=0;//关闭中断
if (RI)
{
RI=0;
aciiCount=0;
uartSbuf[aciiCount]=SBUF;
aciiCount++;
if (aciiCount>11) //根据各个模式截取合适长度的字符串
{
aciiCount=0;
}
}
if (TI)
{
TI=0;
}
ES=1;
}
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
u8 Disp[11];
u16 f ;
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main(void)
{
u8 i;
uchar test;
UartInit();
LcdInit();
sendAscii(singleTest);//打开激光
for(i=0;i<11;i++)
{
LcdWriteData(uartSbuf[i]);
}
while(1);
}
|