硬汉嵌入式论坛

 找回密码
 立即注册
查看: 573|回复: 1
收起左侧

单片机

[复制链接]

16

主题

22

回帖

70

积分

初级会员

积分
70
发表于 2023-11-17 18:27:23 | 显示全部楼层 |阅读模式

void converToPrintInstruction(uint16_t decimalData[],uint8_t size)
{
    static uint16_t Remember_Data = 0;
    static uint8_t flag = 0;
    //static uint8_t DataSendPrintf[100] = {0};
    //uint8_t *DataSendPrintf = (uint8_t*)MemMalloc(1000*sizeof(uint8_t));
    uint16_t i = 0, j = 0, decimalValue = 0, m_g = 0;
    uint16_t buwei = 0;
    uint8_t binaryData[358] = {0};
    uint16_t position[NUMBER_DATA] = {0};
    if(size >= NUMBER_DATA)
    {
        //printf("Error:Input data Number error.\n");
        return;
    }
    if(flag != 0)return;
   // DataSendPrintf = (uint8_t*)MemMalloc(1000*sizeof(uint8_t));
    for(m_g = 0; m_g < size; m_g++)
    {
        if(decimalData[m_g] < 0 || decimalData[m_g] > 4096)
        {
            //printf("Error:Input data out of range.\n");
            return;
        }
        for(i = 0; i < 384; i++)
        {
            binaryData[i] = 0;
        }

        position[m_g] = decimalData[m_g] * 384 / 4096;
        binaryData[position[m_g]] = 1;

        if(m_g >= 1)
        {
            if(position[m_g] != position[m_g-1])
            {
                if(position[m_g] > position[m_g-1])
                {
                    buwei = position[m_g] - position[m_g-1];
                    for(i = 1; i <= buwei; i++)
                    {
                        binaryData[position[m_g]-i] = 1;
                    }
                }
                else
                {
                    buwei = position[m_g-1] - position[m_g];
                    for(i = 1; i <= buwei; i++)
                    {
                        binaryData[position[m_g]+i] = 1;
                    }
                }
            }
            else
            {
                if(decimalData[m_g] != decimalData[m_g-1])
                {
                   if(decimalData[m_g] > decimalData[m_g-1])
                   {
                      binaryData[position[m_g]+1] = 1;
                   }
                   else
                   {
                      binaryData[position[m_g]-1] = 1;
                   }
                }
            }
        }
        //printf("1630 ");
        #if 0
        *BlueSendPrintfer.SendData = 0x16;
        BlueSendPrintfer.SendData++;
        BlueSendPrintfer.flag_num++;
        *BlueSendPrintfer.SendData = 0x30;
        BlueSendPrintfer.SendData++;
        BlueSendPrintfer.flag_num++;
        #else
        BlueSendPrintfer.DataSendPrintf[Remember_Data++] = 0x16;
        BlueSendPrintfer.DataSendPrintf[Remember_Data++] = 0x30;
        #endif
        for(i = 0; i < 48; i++)
        {
            decimalValue = 0;
            for(j = 0; j < 8; j++)
            {
                 decimalValue += binaryData[(i * 8) + j] << (7 - j);
            }
            //printf("%02X ",decimalValue);
            //printf("%lld ",convertDecimalToBinary(decimalValue));
            //将每一位十六进制数存储在数组中
            while(decimalValue != 0)
            {
                int remainder = decimalValue % 16;
                if(remainder < 10)
                {
                    BlueSendPrintfer.DataSendPrintf[Remember_Data++] = remainder + '0'; //转换成字符
                    //BlueSendPrintfer.SendData++;
                    BlueSendPrintfer.flag_num++;
                }
                else
                {
                    BlueSendPrintfer.DataSendPrintf[Remember_Data++] = remainder - 10 + 'A';   //转换成大写字母   
                    //BlueSendPrintfer.SendData++;
                    BlueSendPrintfer.flag_num++;

                }
                decimalValue /= 16;
            }
        }
        //printf("\r\n1501\r\n");
    }
    flag = 1;
}


这段函数意思是什么


回复

使用道具 举报

16

主题

22

回帖

70

积分

初级会员

积分
70
 楼主| 发表于 2023-11-18 13:07:56 | 显示全部楼层
#define NUMBER_DATA 100

typedef struct{
    uint8_t *SendDataPrintfer;
    uint8_t *SendDataPrintferHeader;
    uint32_t num;
    uint8_t SendDataPrintfer_Char[2000];
}Data_Test;
Data_Test SendData;
//测试蓝牙发送数据是否为1601 ff 数据
void decimal_to_hex(uint8_t decimal_num, uint8_t *hex_num) {
    char hex_string[5]; // 足够存储 "0x" + 2 个十六进制字符 + 结束符
    sprintf(hex_string, "0x%02X", decimal_num); // 将十进制数转换为十六进制格式的字符串
    sscanf(hex_string, "%hhX", hex_num); // 将十六进制格式的字符串转换为十六进制数
}
void converToPrintInstruction(uint16_t decimalData[],uint8_t size)
{
    static uint16_t Remember_Data = 0;
    //static uint8_t flag = 0;
    static uint8_t a = 0x16, b = 0x30;
    uint16_t i = 0, j = 0, decimalValue = 0, m_g = 0;
    uint16_t buwei = 0;
    static uint8_t Data_Temp = 0;
    static uint16_t binaryData[358] = {0};
    uint16_t position[NUMBER_DATA] = {0};
    if(size >= NUMBER_DATA)
    {
        printf("Error:Input data Number error.\n");
        return;
    }
    //if(flag != 0)return;
    for(m_g = 0; m_g < size; m_g++)
    {
        if(decimalData[m_g] < 0 || decimalData[m_g] > 4096)
        {
            printf("Error:Input data out of range.\n");
            return;
        }
        for(i = 0; i < 384; i++)
        {
            binaryData[i] = 0;
        }

        position[m_g] = decimalData[m_g] * 384 / 4096;
        binaryData[position[m_g]] = 1;

        if(m_g >= 1)
        {
            if(position[m_g] != position[m_g-1])
            {
                if(position[m_g] > position[m_g-1])
                {
                    buwei = position[m_g] - position[m_g-1];
                    for(i = 1; i <= buwei; i++)
                    {
                        binaryData[position[m_g]-i] = 1;
                    }
                }
                else
                {
                    buwei = position[m_g-1] - position[m_g];
                    for(i = 1; i <= buwei; i++)
                    {
                        binaryData[position[m_g]+i] = 1;
                    }
                }
            }
            else
            {
                if(decimalData[m_g] != decimalData[m_g-1])
                {
                   if(decimalData[m_g] > decimalData[m_g-1])
                   {
                      binaryData[position[m_g]+1] = 1;
                   }
                   else
                   {
                      binaryData[position[m_g]-1] = 1;
                   }
                }
            }
        }
        //printf("1630 ");
        *SendData.SendDataPrintfer = a;
        SendData.SendDataPrintfer++;
        //SendData.SendDataPrintfer_Char[Remember_Data++] = a;

        SendData.num++;

        *SendData.SendDataPrintfer = b;
        //SendData.SendDataPrintfer_Char[Remember_Data++] = b;
        SendData.SendDataPrintfer++;
        SendData.num++;
        for(i = 0; i < 48; i++)
        {
            decimalValue = 0;
            for(j = 0; j < 8; j++)
            {
                 decimalValue += binaryData[(i * 8) + j] << (7 - j);
            }
            //printf("%02X ",decimalValue);
            decimal_to_hex(decimalValue,&Data_Temp);
            *SendData.SendDataPrintfer = Data_Temp;
            //SendData.SendDataPrintfer_Char[Remember_Data++] = Data_Temp;
            SendData.SendDataPrintfer++;
            SendData.num++;
        }
    }
    //flag = 1;
}




int main() {

    uint32_t i = 0;
    memset(&SendData,0,sizeof(SendData));
    SendData.SendDataPrintfer = (uint8_t *)malloc((sizeof(uint8_t))*1000);

    SendData.SendDataPrintferHeader = SendData.SendDataPrintfer;

    uint16_t decimal_num[4] = {2048};
    converToPrintInstruction(decimal_num,1);
    for(i = 0; i < SendData.num; i++)
    {
        printf("%x ",*SendData.SendDataPrintferHeader);
         //printf("%x\n",SendData.SendDataPrintfer_Char[i]);
        SendData.SendDataPrintferHeader++;
    }
    return 0;
}

这是改进之后的
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-14 04:28 , Processed in 0.151413 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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