OpenEdv-开源电子网

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

类型转换求教

[复制链接]

13

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2017-2-8
在线时间
39 小时
发表于 2019-6-7 21:53:41 来自手机 | 显示全部楼层 |阅读模式
在写OLED显示程序,想要从串口发送字符串并显示在OLED上。
目前已实现获取串口数据
原子哥的代码里,定义了u8 Res
oled的字符串显示函数的参数为u8 *
问题是u8怎么转换为u8 *
虽然强制转换,通过串口打印在pc上显示没问题,但在oled端显示乱码
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2017-2-8
在线时间
39 小时
 楼主| 发表于 2019-6-8 08:43:25 来自手机 | 显示全部楼层
回复 支持 反对

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8017
金钱
8017
注册时间
2014-8-13
在线时间
1594 小时
发表于 2019-6-8 09:08:38 | 显示全部楼层
u8 * pRes = &Res;  
回复 支持 反对

使用道具 举报

13

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2017-2-8
在线时间
39 小时
 楼主| 发表于 2019-6-8 09:43:40 | 显示全部楼层

OLED显示还是会乱码但是直接定义一个变量char *temp = "hello world";的话又可以正常显示

定义了一个全局变量usart1_data来存放串口接收到的数据
这是主函数里的while循环
[mw_shl_code=applescript,true]u8 *temp = &usart1_data;
ssd1306_clear_screen(0x00);
ssd1306_display_string(10, 10, (u8 *)temp, 12,1);
ssd1306_refresh_gram();
delay_ms(3000);[/mw_shl_code]

这是ssd1306_display_string的函数

[mw_shl_code=applescript,true]void ssd1306_display_string(uint8_t chXpos, uint8_t chYpos, const uint8_t *pchString, uint8_t chSize, uint8_t chMode)
{
    while (*pchString != '\0') {      
        if (chXpos > (SSD1306_WIDTH - chSize / 2)) {
                        chXpos = 0;
                        chYpos += chSize;
                        if (chYpos > (SSD1306_HEIGHT - chSize)) {
                                chYpos = chXpos = 0;
                                ssd1306_clear_screen(0x00);
                        }
                }
               
        ssd1306_display_char(chXpos, chYpos, *pchString, chSize, chMode);
        chXpos += chSize / 2;
        pchString ++;
    }
}[/mw_shl_code]
回复 支持 反对

使用道具 举报

13

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2017-2-8
在线时间
39 小时
 楼主| 发表于 2019-6-8 23:26:45 | 显示全部楼层
自己顶一下
回复 支持 反对

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8017
金钱
8017
注册时间
2014-8-13
在线时间
1594 小时
发表于 2019-6-9 10:48:25 | 显示全部楼层
2hen9x1 发表于 2019-6-8 09:43
OLED显示还是会乱码但是直接定义一个变量char *temp = "hello world";的话又可以正常显示

定义了一个 ...

跟到ssd1306_display_char里面去看一下。顺便看一下字库对应和字模取字顺序是不是一致。指针那里也单步调试一下看下。
回复 支持 反对

使用道具 举报

0

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2018-11-20
在线时间
34 小时
发表于 2019-8-5 15:54:39 | 显示全部楼层
不会,顶一下
回复 支持 反对

使用道具 举报

1

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2014-4-5
在线时间
8 小时
发表于 2019-8-5 16:02:25 | 显示全部楼层
好像是ASCII码值不匹配造成的把?  比如u8 0   字符串的值就是 0+0X30
我这两天刚写过240*120的屏就是这样做的。
举个例子:
定义 u8 data[20] = {0};
data[0] = 0X20;//空格  也可以写成  data[0] = ' ';
data[1] = volt/10000+0x30;
data[2] = volt/1000%10+0x30;
data[3] = 0X2E; // . 也可以写成data[3] = '.';
data[4] = volt/100%10+0x30;
data[5] = volt/10%10+0x30;
Print_19_40(31,4,data);
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-1 02:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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