Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
shell
屏幕显示
潘多拉开发板_Pandora
基于潘多拉开发板的shell内容屏幕显示
发布于 2022-12-12 13:38:48 浏览:946
订阅该版
潘多拉开发板有个小屏幕,并且提供了屏幕的驱动,所以我一直想着把这个屏幕用起来,最后把tshell输出到串口的内容最终也输出到屏幕上 最终成果如下 ![IMG2022101817282(12-12-14-06-44).jpg](https://oss-club.rt-thread.org/uploads/20221212/a50a55da99ada033e8878cac9817d7bf.jpg.webp) 实现的过程如下 1.使能lcd ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20221212/aecc74a141683ca0b781c45a22a0f19a.png) 即打开 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中添加如下 ```c #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 ```c #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[2J\x1b[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,这个官方提供的,其函数原型如下 ![4c1933ae9d286212387afc4978f65503.png](https://oss-club.rt-thread.org/uploads/20221212/4c1933ae9d286212387afc4978f65503.png) x y 是你要输出的位置,size是字符的大小,*fmt则是要输出的字符,其中size时限定16 24 32 的,其他的尺寸会报错 第2行 定义 x,y,以及字体大小font 第7-11行 处理clear指令,clear指令发送后,会输出"\x1b[2J\x1b[H",我们在读到这串代码将屏幕清空,并将xy置0 第16-27行,处理\n,主要在处理完\n后我清空了下一行,主要时屏幕太小,很容易挤满,看不清输出到哪里了 第30-34行,处理 \r ,清楚当前行,重置x 第3*6-44行,处理 del 和 backspace ,计算回退的位置,并且用空格来填充 第52-61行,判断下一个字符是否会超过xy的边界值 第63-65行,输出字符,将x自增,并且继续处理下一个字符 以上就是我实现的过程,如果大家有更好的方法,欢迎交流讨论
2
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
Zzxy
这家伙很懒,什么也没写!
文章
5
回答
5
被采纳
1
关注TA
发私信
相关文章
1
潘多拉开发板AP6181 外设支持报错
2
潘多拉wifi管理例程中ap模式未启动
3
潘多拉开发板上I2C设备驱动开发
4
潘多拉开发板 综合例程 调试报错
5
潘多拉开发板在VSCODE无法执行micropython
6
潘多拉添加freemodbus例子出现错误
7
潘多拉开发板OV2640拍摄JPEG格式的照片
8
SFUD 提示闪存超过32g
9
有谁用潘多拉开发过OV2640吗
10
请问潘多拉开发板怎么烧录micropython固件
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部