OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5275|回复: 3

串口通信的问题

[复制链接]

10

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2016-1-6
在线时间
7 小时
发表于 2016-3-2 22:36:38 | 显示全部楼层 |阅读模式
1金钱
请问上位机发送的数据在32里面是怎么存储的,它的数据类型是怎样的呢,另外要如何比较汉字呢,比如我在上位机发送“你好吗”,单片机回复“我很好”

最佳答案

查看完整内容[请看2#楼]

在32里面是怎么存储的这个我还真没仔细研究过, 位保存与读取都一般用8位的就行了 至于汉字与字符的区别如下处理: 汉字用双字节表示, 首字节一定大于 0X7F 字母用单字节表示,都小于 0X7F /********************************************************************************************* 函数名:LCD_word 任意位置汉字及字符显示函数 调 用:LCD_word(x,y,*s); 参 数:x轴座标,y轴座标,s 数据指针 返回值:无 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

507

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3340
金钱
3340
注册时间
2013-4-10
在线时间
333 小时
发表于 2016-3-2 22:36:39 | 显示全部楼层
本帖最后由 likunxue 于 2016-3-3 00:37 编辑

在32里面是怎么存储的这个我还真没仔细研究过, 位保存与读取都一般用8位的就行了

至于汉字与字符的区别如下处理:
汉字用双字节表示, 首字节一定大于 0X7F
字母用单字节表示,都小于 0X7F

/*********************************************************************************************
函数名:LCD_word 任意位置汉字及字符显示函数
调  用:LCD_word(x,y,*s);
参  数:x轴座标,y轴座标,s 数据指针
返回值:无
结  果:显示数组指针处的汉字const char *BiaoTi
*********************************************************************************************/
void LCD_word(u8 x,u8 y,const char *str) //任意行写入一个汉字
     {
     u16 cnt,tem,j,i,k;   
     while(*str>0)
          {
          tem = *str++; //取高8位字形码
          if(tem <0x7f)
            {
            tem -= 32;
            tem *= 16;         //计算字模偏移地址                
            for(i = 0; i< 8; i++) Write_Dot_LCD(x+i,y,ASII_16[tem++]);//上行            
            for(i = 0; i< 8; i++) Write_Dot_LCD(x+i,y+8,ASII_16[tem++]); //下行
            x += 8; //计算x坐标, ASCII 字符只主半个汉字宽              
            }//如果是字符,计算字模地址,置字符标志位8
          else{
              k = 0; //如果没有这个汉字则用0代替
              tem <<= 8;
              tem += *str++;          
              for(j = 0;j < 420;j ++ )
                 {
                 cnt =GB_16[j].Index[0]<<8;
                 cnt += GB_16[j].Index[1]; //取字形码参数
                 if(tem == cnt)//从结构数组中检索汉字
                   {
                   k = j; //得到需要的汉字码                          
                   break;
                   }
                 }
              tem = 0;
              for(i = 0; i< 16; i++) Write_Dot_LCD(x+i,y,GB_16[k].Msk[tem++]);//上行            
              for(i = 0; i< 16; i++) Write_Dot_LCD(x+i,y+8,GB_16[k].Msk[tem++]); //下行
              x += 16;  //计算x坐标,
              }   
          }
      }


回复

使用道具 举报

4

主题

25

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1246
金钱
1246
注册时间
2015-7-14
在线时间
102 小时
发表于 2016-3-2 23:21:38 | 显示全部楼层
第一个问题:数据在32里是二进制存储的,也就是01011010之类的二进制
第二个问题:在32里面是没有什么数据类型的,都是二进制存储
第三个问题:如果直接发送汉字,好像32是识别不出来的,因为32只能识别255个ASCII码,而码中没有汉字的

这是我的理解,有错还希望大家纠正
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-3-3 09:09:23 | 显示全部楼层
strstr("汉字",字符串)  试试
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 05:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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