OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 163|回复: 0

TC5020-驱动LED显示屏-驱动分享

[复制链接]

22

主题

129

帖子

0

精华

高级会员

Rank: 4

积分
821
金钱
821
注册时间
2014-8-14
在线时间
257 小时
发表于 4 天前 | 显示全部楼层 |阅读模式
本帖最后由 Cindre鞡 于 2026-4-9 13:44 编辑

LED屏幕信息:
共16x16组灯珠,每组灯珠3个灯,1颗绿色,2颗红色(同时亮灭)
屏幕划分为4x4组灯珠为一个块,一共16个块,块顺序为左上角为第1块,从上到下的顺序是1~4
每一个块由一个uint16_t数据显示,块内4x4,第一列(从上到下,后同)为bit0~3,第二列为bit4~7,第三列为bit8~11,第四列为bit12~15
----------------------------------------------------------
知道了以上信息,就写了个坐标转换,可以像写LCD一样,给一个xy坐标和对应颜色,屏幕就能正确显示,以下是显示效果
IMG_7730 00_00_00-00_00_30.gif
----------------------------------------------------------
IMG_7736 00_00_00-00_00_30.gif
----------------------------------------------------------
以下是核心驱动部分,需要在主循环里边循环调用PLED_Flush来刷新屏幕,我在RTOS里边单独创建了一个任务来刷屏,其他还有十来个任务,目前没看出闪烁或者卡顿
内容滚动的部分,我不打算开源,大伙自己实现吧
画点的核心代码
  1. void PLED_DrawPoint(uint16_t x, uint16_t y, uint16_t color)
  2. {

  3.         if((x < PLED_X_SIZE) && (y < PLED_Y_SIZE))
  4.         {
  5.                 uint16_t pled_4x4_index = 0;
  6.                 uint16_t bits = 0;

  7. #if(PLED_DIR == 0)
  8.                 uint16_t pled_index = y / PLED_1_XY_SIZE;                                        //屏幕索引--对应的显存索引
  9.                 y %= PLED_1_XY_SIZE;                                                                                //限制y在一个屏幕内
  10. #else
  11.                 uint16_t pled_index = x / PLED_1_XY_SIZE;                                        //屏幕索引--对应的显存索引
  12.                 x %= PLED_1_XY_SIZE;                                                                                //限制x在一个屏幕内
  13. #endif

  14.                 pled_4x4_index = ((x >> 2) << 2) + (y >> 2);                                //块索引
  15.                 bits = (y % 4) + ((x << 2) % PLED_1_XY_SIZE);                                //点索引

  16.                 if(color == 0)
  17.                 {
  18.                         pled_g_buf[pled_index][pled_4x4_index] |= 1 << bits;
  19.                 }
  20.                 else if(color == 1)
  21.                 {
  22.                         pled_r_buf[pled_index][pled_4x4_index] |= 1 << bits;
  23.                 }
  24.                 else
  25.                 {
  26.                         pled_g_buf[pled_index][pled_4x4_index] &= ~(1 << bits);
  27.                         pled_r_buf[pled_index][pled_4x4_index] &= ~(1 << bits);
  28.                 }
  29.         }

  30. }
复制代码

pled.zip (2.42 KB, 下载次数: 0)
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /1 下一条

正点原子公众号

如发现本坛存在违规或侵权内容, 请点击这里发送邮件举报 (或致电020-38271790)。请提供侵权说明和联系方式。我们将及时审核依法处理,感谢配合。

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2026-4-13 15:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表