找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1074|回复: 0
打印 上一主题 下一主题
收起左侧

如何用16进制代码命令控制模块

[复制链接]
跳转到指定楼层
楼主
ID:415258 发表于 2018-10-28 19:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在激光测距模块里的通讯协议是通过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);                       
                                                               
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表