zoukankan      html  css  js  c++  java
  • 018_STM32程序移植之_串口接收中文

    (一)在平时数据传输中很少用到接收中文的情况,但是最近需要用到就花了半天时间来弄弄

    (二)接收原理,从现在接收情况分析:一个中文占两个数据的空间,也就是两个十六进制可以转化成为一个中文

    (三)示例情况,用Hex Editor来看看中文 “你好”,可以看到四个十六进制数据:0xc4,0xe3,0xba,0xc3

    (四)我们的目的还是单片机通过串口来进行数据的接收,用CH340短接T和R看看发送“你好”也是会接收到十六进制0xc4,0xe3,0xba,0xc3

    (五)从上面两点来看,一个中文占据两个数据,也就是说当我们发送“你好”给单片机时候实际中断了四次,接收到的数据分别为0xc4,0xe3,0xba,0xc3

       那么我们就可以通过接收到的数据来将数据转化成为中文了,搜索GB2312表可以知道对应的“你” = 0xe3c4;;  "好" = 0xc3ba

       也就是两位对应一个中文嘛,那么如何将0xc4,0xe3合成0xe3c4;;将0xba,0xc3合成0xc3ba,然后将数据转化成为字符形式就可使转化成为中文了

    (六)通过C语言的方法来进行上面四个数据转化成为中文,我用的是VS中的C++来编译的,哪里都可以定义数组那些,如果出错请自行修改将定义放到前面来。

     1 #include <stdio.h>
     2 #include <string.h>
     3 using namespace std;
     4 char *Chinese(int table[],char length,char str[]);        /*将数据放进去得到字符出来*/
     5 int convert_data(int table[2]);
     6 void main(void)
     7 {
     8     /*GB2312,你的代码是0xe3c4,好的代码是0xc3ba,具体的可以使用软件Hex Editor来看看*/
     9     int test1[] = {0xe3c4};    /**/
    10     printf("%s
    ",test1);
    11     int test2[] = {0xc3ba};    /**/
    12     printf("%s
    ",test2);
    13 
    14     /*单片机发送或者接收到“你好”,会得到下面四个数据,将下面四个数据转换成中文“你好”*/
    15     int table[4] = {0xc4,0xe3,0xba,0xc3};
    16     char str[100];
    17                   /*输入数组  长度  返回保存地址*/
    18     char *str4 = Chinese(table,4,str);
    19     printf("%s
    ",str4);
    20 }
    21 
    22 int convert_data(int table[2])        /*接收的两个数据转换成为一个数据*/
    23 {
    24     return (table[1] << 8)|table[0];
    25 }
    26 
    27 char *Chinese(int table[],char length,char str[])        /*将数据放进去得到字符出来*/
    28 {
    29     int i = 0;
    30     int data1[1];
    31     char data2[100];
    32     data1[0] = (table[i + 1] << 8)|table[i];            
    33     sprintf(data2,"%s",data1);
    34     strcpy(str,data2);                                /*先取第一个中文先*/
    35     for(i = 2;i < length; i = i + 2)
    36     {
    37         data1[0] = (table[i + 1] << 8)|table[i];    /*将0xc4,0xe3弄成0xe3c4,将0xba,0xc3换成0xc3ba*/
    38         sprintf(data2,"%s",data1);
    39         strcat(str,data2);
    40     }
    41 
    42     return str;
    43 }
    View Code

     编译运行的结果

    (七)STM32串口接收中文

    (1)资料下载:https://download.csdn.net/download/xiaoguoge11/10804315

    (2)视频演示:https://v.qq.com/x/page/g0800sirmx3.html

    (3)更多资料下载,关注公众号:luxiaoguogege

     

  • 相关阅读:
    Android开发--Layout元素
    Android开发--RelativeLayout的应用
    group by调优的一些测试
    mysql explain中key_len的计算
    mysql索引长度的一些限制
    order by调优的一些测试
    metadata lock
    JDBC连接数据库
    Java—Map.Entry
    innodb buffer pool
  • 原文地址:https://www.cnblogs.com/luxiaoguogege/p/9998255.html
Copyright © 2011-2022 走看看