(五)从上面两点来看,一个中文占据两个数据,也就是说当我们发送“你好”给单片机时候实际中断了四次,接收到的数据分别为0xc4,0xe3,0xba,0xc3
那么我们就可以通过接收到的数据来将数据转化成为中文了,搜索GB2312表可以知道对应的“你” = 0xe3c4;; “好” = 0xc3ba
也就是两位对应一个中文嘛,那么如何将0xc4,0xe3合成0xe3c4;;将0xba,0xc3合成0xc3ba,然后将数据转化成为字符形式就可使转化成为中文了
(六)通过C语言的方法来进行上面四个数据转化成为中文,我用的是VS中的C++来编译的,哪里都可以定义数组那些,如果出错请自行修改将定义放到前面来。
#include <stdio.h>
#include <string.h>
using namespace std;
char *Chinese(int table[],char length,char str[]); /*将数据放进去得到字符出来*/
int convert_data(int table[2]);
void main(void)
{
/*GB2312,你的代码是0xe3c4,好的代码是0xc3ba,具体的可以使用软件Hex Editor来看看*/
int test1[] = {0xe3c4}; /*你*/
printf("%s\r\n",test1);
int test2[] = {0xc3ba}; /*好*/
printf("%s\r\n",test2);
/*单片机发送或者接收到“你好”,会得到下面四个数据,将下面四个数据转换成中文“你好”*/
int table[4] = {0xc4,0xe3,0xba,0xc3};
char str[100];
/*输入数组 长度 返回保存地址*/
char *str4 = Chinese(table,4,str);
printf("%s\r\n",str4);
}
int convert_data(int table[2]) /*接收的两个数据转换成为一个数据*/
{
return (table[1] << 8)|table[0];
}
char *Chinese(int table[],char length,char str[]) /*将数据放进去得到字符出来*/
{
int i = 0;
int data1[1];
char data2[100];
data1[0] = (table[i + 1] << 8)|table[i];
sprintf(data2,"%s",data1);
strcpy(str,data2); /*先取第一个中文先*/
for(i = 2;i < length; i = i + 2)
{
data1[0] = (table[i + 1] << 8)|table[i]; /*将0xc4,0xe3弄成0xe3c4,将0xba,0xc3换成0xc3ba*/
sprintf(data2,"%s",data1);
strcat(str,data2);
}
return str;
}
(七)STM32串口接收中文
(1)资料下载:https://download.csdn.net/download/xiaoguoge11/10804315
(2)视频演示:https://v.qq.com/x/page/g0800sirmx3.html
(3)更多资料下载,关注公众号:luxiaoguogege