0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于潘多拉开发板的shell内容屏幕显示

冬至子 来源:Zzxy 作者:Zzxy 2023-10-16 14:41 次阅读

潘多拉开发板有个小屏幕,并且提供了屏幕的驱动,所以我一直想着把这个屏幕用起来,最后把tshell输出到串口的内容最终也输出到屏幕上 最终成果如下

1.jpg

实现的过程如下

1.使能lcd

1.jpg

即打开 Enalbe LCD ,下面的Enalbe LCD_console 是我自己加的

2.测试lcd屏幕

在打开后lcd后,rt-studio 会提供一个 样例让你输出(自动添加到applitcations 下面),测试一下lcd是否可以正常使用

3.实现的思路

我这边有两种思路

1.在rt_kprintf 中串口中的内容输出后,再输出到屏幕上
2.由第一种思路扩展,rt-thread中提供串口的接受和发送的回调函数,我们设置rt_kprintf使用串口的发送回调函数,在发送数据后,将数据打印在屏幕上

最终我选择了第一个方案,因为潘多拉串口没有实现发送的回调函数,以下是具体实现

3.1首先在 rtthread/src/kservice.c 中的rt_kprintf中添加如下

#ifdef BSP_USING_LCD_CONSOLE
if(lcd_show_flag){
shell_show_lcd(rt_log_buf);
}
#endif

其中#ifdef BSP_USING_LCD_CONSOLE 是我添加的lcd控制,lcd_show_flag 为1时,调用shell_show_lcd,这个函数会将串口发送的内容打印到屏幕上,为什么有了BSP_USING_LCD_CONSOLE ,还要加个lcd_show_flag来控制呢?因为在开始rt_kprintf第一次被调用的时候,spi还没有被初始化,直接调用会导致报错,所以我在main中定义lcd_show_flag,并且调用main运行后,将lcd_show_flag置1。

3.2实现调用shell_show_lcd

#ifdef BSP_USING_LCD_CONSOLE
int lcd_x = LCD_START,lcd_y = LCD_START,size_font=16;
void shell_show_lcd(char *rt_log_buf){
char str[2] ={0};
if(rt_strcmp(rt_log_buf, "x1b[2Jx1b[H")==0){
lcd_x = LCD_START,lcd_y = LCD_START;
lcd_clear(WHITE);
return ;
}
while(*rt_log_buf){
str[0] = *rt_log_buf;
//handle 'n'
if(str[0] == 'n'){
lcd_y = lcd_y + size_font - 1;
lcd_x = LCD_START;
rt_log_buf++;
//clear next line
if (lcd_y + size_font < LCD_H - size_font)
{
lcd_show_string(0, lcd_y + size_font , size_font, " ");
}
continue;
}
//handle 'r'
if(str[0] == 'r'){
lcd_x = LCD_START;
rt_log_buf++;
continue;
}
//hand del and backspace
if (str[0] == 0x7f || str[0] == 0x08){
lcd_x = lcd_x - (size_font/2 - 1);
if (lcd_x < LCD_START)
{
lcd_x = LCD_W - size_font / 2;
lcd_y -= size_font;
}
lcd_show_string(lcd_x, lcd_y , size_font, " ");
rt_log_buf++;
continue;
}
if (lcd_x > LCD_W - size_font / 2)
{
lcd_x =LCD_START;
lcd_y += size_font;
}
if (lcd_y > LCD_H - size_font)
{
lcd_y = lcd_x = LCD_START;
lcd_show_string(0, 0 , size_font, " ");
}
lcd_show_string(lcd_x, lcd_y , size_font, str);
lcd_x = lcd_x + size_font/2 - 1;
rt_log_buf++;
}
}
#endif

不到一百行代码,非常简单,我们逐步看一下

首先我们看最重要的一个函数

lcd_show_string,这个官方提供的,其函数原型如下

1.jpg

x y 是你要输出的位置,size是字符的大小,fmt则是要输出的字符,其中size时限定16 24 32 的,其他的尺寸会报错
第2行 定义 x,y,以及字体大小font
第7-11行 处理clear指令,clear指令发送后,会输出”x1b[2Jx1b[H”,我们在读到这串代码将屏幕清空,并将xy置0
第16-27行,处理n,主要在处理完n后我清空了下一行,主要时屏幕太小,很容易挤满,看不清输出到哪里了
第30-34行,处理 r ,清楚当前行,重置x
第36-44行,处理 del 和 backspace ,计算回退的位置,并且用空格来填充
第52-61行,判断下一个字符是否会超过xy的边界值
第63-65行,输出字符,将x自增,并且继续处理下一个字符

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • LCD屏
    +关注

    关注

    0

    文章

    118

    浏览量

    15118
  • Shell
    +关注

    关注

    1

    文章

    358

    浏览量

    22903
  • 回调函数
    +关注

    关注

    0

    文章

    87

    浏览量

    11455
  • RT-Thread
    +关注

    关注

    31

    文章

    1149

    浏览量

    38894
收藏 人收藏

    评论

    相关推荐

    正点原子潘多拉开发板免费试用

    潘多拉开发板是正点原子和RT-Thread联合出品的IOT开发板,IOT方面我们采用的国内自主物联网操作系统RT-Thread。了解更多>>
    发表于 05-14 11:29

    如何在RT-Thread潘多拉开发板上实现电源管理?

    本文介绍了基于 RT-Thread潘多拉开发板电源管理组件的使用和移植过程。
    发表于 03-30 06:47

    如何在潘多拉开发板上运行Modbus主机与从机?

    本文的目的是介绍如何在潘多拉开发板上运行Modbus主机与从机。首先介绍串口方式通信的Modbus主机和从机。然后介绍如何使用网络进行Modbus通信。
    发表于 03-30 08:01

    怎样去解决潘多拉开发板SFUD初始化失败的问题

    潘多拉开发板SFUD为什么会初始化失败?怎样去解决潘多拉开发板SFUD初始化失败的问题?
    发表于 09-06 06:27

    潘多拉开发板的使用感受

    怎样去使用潘多拉开发板呢?
    发表于 10-26 07:39

    快速上手STM32L475潘多拉开发板BSP的方法

    简介本文档为 RT-Thread 开发团队为 STM32L475 潘多拉开发板提供的 BSP (级支持包) 说明。主要内容如下:开发板资源
    发表于 03-28 10:20

    用rtt studio的模板下载到潘多拉开发板之后开发板就黑屏了,如何让屏幕变亮?

    用rtt studio的模板下载到潘多拉开发板之后潘多拉开发板就黑屏了,怎么才能让屏幕亮那
    发表于 04-18 09:34

    潘多拉开发板+RT-Thread Studio芯片没有反应如何处理?

    请教一个问题。我用正点原子潘多拉开发板+RT-Thread Studio。建立工程时选择按芯片创建,芯片选的是STM32L475VETx。编译没问题,但下载后,终端没有任何显示,甚至也没有
    发表于 05-26 15:06

    潘多拉开发板+RT-Thread Studio选择按芯片创建无反应请问这是什么原因呢

    请教一个问题。我用正点原子潘多拉开发板+RT-Thread Studio。建立工程时选择按芯片创建,芯片选的是STM32L475VETx。编译没问题,但下载后,终端没有任何显示,甚至也没有
    发表于 07-29 10:33

    有没有其他方法在潘多拉开发板上能够实现网络播放功能

    最近刚入手了正点原子的潘多拉开发板,在使用webclient软件包的时候发现,一旦打开MdebTLS Support之后,编译就不通过了,显示“请修改链接脚本以扩大ROM大小”。也尝试网上寻找方法
    发表于 08-18 09:54

    有没有其他方法在潘多拉开发板上能够实现网络播放功能呢

    最近刚入手了正点原子的潘多拉开发板,在使用webclient软件包的时候发现,一旦打开MdebTLS Support之后,编译就不通过了,显示“请修改链接脚本以扩大ROM大小”。也尝试网上寻找方法
    发表于 10-19 11:08

    基于潘多拉开发板的tshell串口输出内容

    潘多拉开发板有个小屏幕,并且提供了屏幕的驱动,所以我一直想着把这个屏幕用起来,最后把tshell输出到串口的内容最终也输出到
    发表于 12-12 16:07

    STM32CubeMX使用-1.点个灯(正点原子潘多拉开发板)

    STM32CubeMX使用-1.点个灯(正点原子潘多拉开发板)
    发表于 12-08 15:21 3次下载
    STM32CubeMX使用-1.点个灯(正点原子<b class='flag-5'>潘多拉开发板</b>)

    潘多拉开发板SFUD初始化失败问题[SFUD] Error W25Q128 flash device is initialize fail

    【已解决】潘多拉开发板SFUD初始化失败问题[SFUD] Error: W25Q128 flash device is initialize fail.问题描述如下:  
    发表于 12-22 19:44 11次下载
    <b class='flag-5'>潘多拉开发板</b>SFUD初始化失败问题[SFUD] Error W25Q128 flash device is initialize fail

    rt-studio潘多拉开发板最新rt-thread不能运行解决办法

    在rt-studio 上 选择基于开发板的项目,选择潘多拉,rt-thread选择lasted ,如下图
    的头像 发表于 10-16 14:50 625次阅读
    rt-studio<b class='flag-5'>潘多拉开发板</b>最新rt-thread不能运行解决办法