[国产单片机] [东软载波ES32F369x]第二集,玩一玩显示屏

[复制链接]
 楼主| cszzlsw 发表于 2021-1-3 16:51 | 显示全部楼层 |阅读模式
本帖最后由 cszzlsw 于 2021-1-3 16:55 编辑

1,上一篇给大家展示了开发板的开箱贴:https://bbs.21ic.com/icview-3061162-1-1.html,那里结合rtthread系统点了个灯,同时给大家把一些坑填了一下
2,趁着元旦,牺牲陪小孩和家人的时间,今天给大家带来i2c驱动ssd1306的效果
3.首先是连线,开发板上有默认的I2C接口,找几根排线连起来就行了:

4.然后就是写程序,用rtthread封装的I2C接口,很快就能把程序原型搭出来,但是官方的代码有个坑,改了好多:
首先把这个代码从下面提上来

5,然后是板子i2c的一个tick没有加上,加上去:

6.然后是ald库的时钟使能初始化:

7.再就是rtthread官方在i2c发送的时候会默认把地址左移一位,所以在搞addr的时候大家要注意了:

8.接着就是写我们的业务了:
oled_thread.c
  1. #include <rtthread.h>
  2. #include "oled_thread.h"
  3. #include "drv_i2c.h"
  4. #include "ssd1306.h"
  5. #include "ssd1306_fonts.h"
  6. #include "dat.c"
  7. struct rt_thread oled_thread;

  8. #define OLED_THREAD_STACK_SIZE 10240
  9. uint8_t oled_thread_stack[OLED_THREAD_STACK_SIZE];

  10. #define OLED_INTERVAL_TIME_US 300
  11. #define OLED_TASK_STACK_SIZE 2048
  12. #define OLED_TASK_PRIO 25

  13. void oled_thread_entry(void *arg)
  14. {

  15.         rt_kprintf("oled_thread_entry\n");

  16.         
  17.                 (void)arg;
  18. //        rt_thread_mdelay(20 );
  19.         ssd1306_Init();

  20.         //ssd1306_DrawString("Hello HarmonyOS!", Font_7x10, White);

  21.         int text_area_width = 64;
  22.         int text_area_height = 64;

  23.         int text_per_line_num = text_area_height / font_width;

  24.         int mod = hope_num % text_per_line_num;
  25.         int text_line_num = hope_num / text_per_line_num;
  26.         if (mod)
  27.         {
  28.                 text_line_num += 1;
  29.         }

  30.         rt_kprintf("picture_arr size=%d\n", sizeof(picture_arr));
  31.         int text_alredy_show = 0;

  32. //        while (1)
  33.         {
  34.                 ssd1306_Fill(Black);
  35.                 ssd1306_SetCursor(0, 0);

  36.                 int x = 0;
  37.                 int y = 0;
  38.                 rt_kprintf("hope_num =%d\n", hope_num);
  39.                 // int start_num = text_alredy_show * text_per_line_num;
  40.                 int showed_num = 0;
  41.                
  42.                 for (int i = text_alredy_show; i < hope_num; i++)
  43.                 {

  44.                         ssd1306_DrawRegion(x, y, font_height, font_width, hope_arr[i], sizeof(hope_arr[0]), 0);

  45.                         x += font_width;
  46.                         if (x >= text_area_width)
  47.                         {
  48.                                 y += font_height;
  49.                                 x = 0;
  50.                         }
  51.                         showed_num++;
  52.                         if (y >= text_area_height)
  53.                         {

  54.                                 break;
  55.                         }        
  56.                
  57.                 }

  58.                 ssd1306_DrawRegion(64, 0, 64, 64, picture_21ic, sizeof(picture_21ic), 0);
  59.                 ssd1306_UpdateScreen();
  60.                 rt_thread_mdelay(OLED_INTERVAL_TIME_US);
  61.                 text_alredy_show++;
  62.                 if (text_alredy_show >= hope_num - text_alredy_show)
  63.                 {
  64.                         text_alredy_show = 0;
  65.                         rt_thread_mdelay(OLED_INTERVAL_TIME_US * 10);
  66.                 }

  67.         }


  68. }

  69. void oled_start(){
  70.         
  71.         rt_err_t err;
  72.         

  73.         err=rt_thread_init(&oled_thread,"olerd_th",oled_thread_entry,NULL,oled_thread_stack,OLED_THREAD_STACK_SIZE,10,100);
  74.         if(err == RT_EOK){
  75.                 rt_kprintf("oled start ok!\n");
  76.                 rt_thread_startup(&oled_thread);
  77.         }else{
  78.                 rt_kprintf("oled start ret = %d!\n",err);
  79.         }
  80.         
  81.         
  82.         
  83. }
至于驱动文件大家去github或者网上去找都行,然后就跑起来就行了(说得轻松,搞了两天半)
效果是这样的:


9.最后把代码里注释调非的while(1)取消注释,画面就动起来了,这就是动画的原理(不停的刷新页面buff,然后让画面update出来)

关于中文取字模,下这个软件:http://www.pc0359.cn/downinfo/110811.html,怎么使用我就不说了,关于图片转码,看这里:http://tools.clz.me/image-to-bitmap-array
相信大家应该都会
好了,今天的分享就到这了,喜欢的同学点个赞呗




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| cszzlsw 发表于 2021-1-5 09:20 | 显示全部楼层
准备结合方向键做些小游戏比如俄罗斯方块,贪吃蛇这种的给小孩子玩玩
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

65

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

9

主题

65

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部