【平头哥RVB2601创意应用开发】+ 2个DEMO试用
本帖最后由 symic 于 2022-3-11 00:05 编辑<p>趁着夜色,又开始了测试,这次测试了GUI和音频的demo。</p>
<p>首先是GUI的demo,分析源代码可以看到,主要运行逻辑还是在main.c,自建了一个流程导图。从中可以看出,整个程序还是以多任务形式展开。其中主函数main完成板级的初始化后,创建一个新的任务gui_lvgl_task,该任务实现关于oled屏的显示,主要包括以下过程</p>
<p>1、显示屏相关的初始化</p>
<p>2、创建需要显示的标签</p>
<p>3、在死循环中处理任务切换。</p>
<p>主要的文字显示工作在gui_label_create()中处理,包括设置label显示模式、对齐方式、坐标、宽高等属性。</p>
<p> 这里摘抄部分关于AOS操作系统的知识。YoC开发板支持多种 RTOS 内核,已集成原生的 Rhino 内核,同时也支持 FreeRTOS 等多种开源RTOS内核。它采用统一的 AOS 操作系统API 实现操作系统接口的定义,用户可以根据项目要求,选择不同的 RTOS 内核,YoC 默认并推荐使用原生的 Rhino 内核,目前 已支持平头哥全系统 CPU 架构。Rhino 内核具备更快的中断处理响应,更快的优先级抢占调度,它具有体积小、功耗低、实时性强和调试方便等特点。供了丰富多元的内核原语,包括缓冲队列,环形缓冲区、定时器、信号量、互斥量、先入先出队列、事件等。在最小的配置下(只运行一个 IDLE 任务),仅需要1.9KB 的 ROM,1KB 的 RAM 空间。YoC 中定义了 RTOS 的基本操作,包括:任务管理、内存管理、信号量、消息队列、软件定时器等,即可以满足小系统的需要,也具备良好的可扩展性。<br />
总的来说,GUI的DEMO测试还是比较简单的,下面尝试显示中文字符。其实中文显示的本质就是通过字库画点。</p>
<p> 打开player demo工程,在oled文件夹下建立两个文件,分别是hanzi.c和hanzi.h。参考坛友<a href="https://home.eeworld.com.cn/space-uid-65032.html" target="_blank">Laspide</a>老师的汉字显示例程(https://bbs.eeworld.com.cn/thread-1195840-1-1.html),首先从帖子中下载《GB2312汉字编码字符集对照表.xlsx》和hzk16.c,这两个文件分别是GB2312的汉字编码号,和相对的汉字字模库(16x16),可自行找到所需的汉字建立需要用到的字库。如下所示</p>
<p> 在oled.c中添加与汉字显示相关的代码</p>
<pre>
<code class="language-cpp">//汉字相关函数
uint8_t g_oled_whole;
/* 整个OLED清屏函数,清零屏OLED数组缓存*/
void refresh_oled_whole()
{
uint8_t i, j;
for(i = 0; i < Max_Row; i++)
{
for (j = 0; j < Max_Column; ++j)
{
g_oled_whole = 0;
}
}
}
/* 处理单个汉字*/
void handle_single_CH_character(uint8_t xpoint, uint8_t ypoint, uint8_t Chinese)
{
uint8_t i, j, k;
uint8_t currentByte;
for (i = 0; i < 16; ++i)
{
for (j = 0; j < 2; ++j)
{
currentByte = Chinese;
for (k = 0; k < 8; ++k)
{
g_oled_whole = (currentByte & 0x80) >> 7;
currentByte = currentByte << 1;
}
}
}
}
/*显示汉字*/
void show_CH_character()
{
oled_draw_frame(g_oled_whole);
oled_reflesh();
}</code></pre>
<p> 将新定义的函数声明到oled.h中,并在app_main.c中添加两条代码</p>
<pre>
<code class="language-cpp">int main(void)
{
// must call this func when use c++
cxx_system_init();
board_yoc_init();
oled_init();
player_init();
cli_reg_cmd_player();
//新加的显示汉字代码
handle_single_CH_character(0, 0, acFontHZ16_c6bd); //平
handle_single_CH_character(0, 16, acFontHZ16_cdb7); //头
handle_single_CH_character(0, 32, acFontHZ16_b8e7); //哥
handle_single_CH_character(16, 0, acFontHZ16_c6e4); //其
handle_single_CH_character(16, 16, acFontHZ16_c0d6);//乐
handle_single_CH_character(16, 32, acFontHZ16_cede);//无
handle_single_CH_character(16, 48, acFontHZ16_c7ee);//穷
show_single_CH_character(0, 16);
return 0;
}</code></pre>
<p> 这样就可以在屏幕上显示中文了。</p>
<p></p>
<p>显示中文字符的字库是通过什么口装载</p>
<p>这是有时差?第一句话。:)</p>
soso 发表于 2022-3-11 09:24
这是有时差?第一句话。:)
<p>哈哈,意思就是白天干活没空,趁着晚上没事可以玩玩</p>
Jacktang 发表于 2022-3-11 07:46
显示中文字符的字库是通过什么口装载
<p>通过查表方式,建立单独的.h文件。</p>
页:
[1]