1921|4

73

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【平头哥RVB2601创意应用开发】+ 2个DEMO试用 [复制链接]

  本帖最后由 symic 于 2022-3-11 00:05 编辑

趁着夜色,又开始了测试,这次测试了GUI和音频的demo。

首先是GUI的demo,分析源代码可以看到,主要运行逻辑还是在main.c,自建了一个流程导图。从中可以看出,整个程序还是以多任务形式展开。其中主函数main完成板级的初始化后,创建一个新的任务gui_lvgl_task,该任务实现关于oled屏的显示,主要包括以下过程

1、显示屏相关的初始化

2、创建需要显示的标签

3、在死循环中处理任务切换。

主要的文字显示工作在gui_label_create()中处理,包括设置label显示模式、对齐方式、坐标、宽高等属性。

       这里摘抄部分关于AOS操作系统的知识。YoC开发板支持多种 RTOS 内核,已集成原生的 Rhino 内核,同时也支持 FreeRTOS 等多种开源RTOS内核。它采用统一的 AOS 操作系统API 实现操作系统接口的定义,用户可以根据项目要求,选择不同的 RTOS 内核,YoC 默认并推荐使用原生的 Rhino 内核,目前 已支持平头哥全系统 CPU 架构。Rhino 内核具备更快的中断处理响应,更快的优先级抢占调度,它具有体积小、功耗低、实时性强和调试方便等特点。供了丰富多元的内核原语,包括缓冲队列,环形缓冲区、定时器、信号量、互斥量、先入先出队列、事件等。在最小的配置下(只运行一个 IDLE 任务),仅需要1.9KB 的 ROM,1KB 的 RAM 空间。YoC 中定义了 RTOS 的基本操作,包括:任务管理、内存管理、信号量、消息队列、软件定时器等,即可以满足小系统的需要,也具备良好的可扩展性。
      总的来说,GUI的DEMO测试还是比较简单的,下面尝试显示中文字符。其实中文显示的本质就是通过字库画点。

      打开player demo工程,在oled文件夹下建立两个文件,分别是hanzi.c和hanzi.h。参考坛友Laspide老师的汉字显示例程(https://bbs.eeworld.com.cn/thread-1195840-1-1.html),首先从帖子中下载《GB2312汉字编码字符集对照表.xlsx》和hzk16.c,这两个文件分别是GB2312的汉字编码号,和相对的汉字字模库(16x16),可自行找到所需的汉字建立需要用到的字库。如下所示

      在oled.c中添加与汉字显示相关的代码

//汉字相关函数
uint8_t g_oled_whole[Max_Row][Max_Column];

/* 整个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[i][j] = 0;
		}
    }
}
/* 处理单个汉字*/
void handle_single_CH_character(uint8_t xpoint, uint8_t ypoint, uint8_t Chinese[32])
{
    uint8_t i, j, k;
    uint8_t currentByte;

    for (i = 0; i < 16; ++i)
    {
        for (j = 0; j < 2; ++j)
        {
            currentByte = Chinese[i * 2 + j];
            for (k = 0; k < 8; ++k)
            {
                g_oled_whole[xpoint + i][ypoint + j * 8 + k] = (currentByte & 0x80) >> 7;
                currentByte = currentByte << 1;
            }
        }
    }
}
/*显示汉字*/
void show_CH_character()
{

	oled_draw_frame(g_oled_whole);
	oled_reflesh();
}

       将新定义的函数声明到oled.h中,并在app_main.c中添加两条代码

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;
}

     这样就可以在屏幕上显示中文了。

最新回复

这是有时差?第一句话。:)   详情 回复 发表于 2022-3-11 09:24
点赞 关注
 
 

回复
举报

6828

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

显示中文字符的字库是通过什么口装载

点评

通过查表方式,建立单独的.h文件。  详情 回复 发表于 2022-3-20 20:32
 
 
 

回复

2万

帖子

74

TA的资源

管理员

板凳
 

这是有时差?第一句话。:)

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

点评

哈哈,意思就是白天干活没空,趁着晚上没事可以玩玩  详情 回复 发表于 2022-3-11 15:45
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(中级)

4
 
soso 发表于 2022-3-11 09:24 这是有时差?第一句话。:)

哈哈,意思就是白天干活没空,趁着晚上没事可以玩玩

 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(中级)

5
 
Jacktang 发表于 2022-3-11 07:46 显示中文字符的字库是通过什么口装载

通过查表方式,建立单独的.h文件。

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表