迪文科技论坛

 找回密码
 立即注册
搜索
查看: 80|回复: 0

【分享】2023级 陈旭 颜涛 RGB LED和点阵显示控制装置

[复制链接]

1

主题

0

回帖

34

积分

新手上路

Rank: 1

积分
34
发表于 2026-9-21 15:45:07 | 显示全部楼层 |阅读模式
一、作品简介
本项目利用迪文EKT043E开发板完成软硬件联合开发,使用 DGUS 软件完成人机交互UI界面绘制,配合 Keil 编写底层C代码,实现屏幕交互、RGB 彩灯控制、MAX7219点阵屏动态显示整套功能。
屏幕UI与RGB控制:
1. 包含开机启动画面,可展示学校 LOGO、标志性建筑、迪文 LOGO、项目题目以及队员信息;
2. 交互界面实现 RGB 三色灯光完整控制,支持滑块拖动调节、键盘数值输入、调色板快捷选色三种方式,实时修改 R/G/B (0255) 分量,驱动外部 RGB LED 输出对应色彩。
外接 4 片级联 MAX7219 点阵模块,实现丰富的点阵显示功能:
1. 数字字母滚动、时钟输入与滚动显示、预设爱心 / 笑脸等图案轮播;
2. 支持屏幕键盘录入数字、字母,将自定义字符串在点阵上流水滚动输出;
3. 滚动动画速度可直接通过迪文触摸屏按键切换慢 / 中 / 快三档。
二、工作原理2.1 整体架构
通过sys_read_vp()、sys_write_vp()读写 VP 变量,完成 GUI 界面和底层外设之间的数据交换,OS 内核直接驱动 IO 口控制 RGB LED 与 MAX7219 点阵模块。
2.2 RGB 灯光控制原理
1. DGUS 界面:滑动条、键盘输入、调色板触摸操作,会把 R、G、B 的 0255 数值写入对应的 VP 地址0x4100、0x4200、0x4300;调色板触摸则直接向0x4400写入预设颜色编号。
2. OS8051 主循环中调用sys_read_vp读取上述 VP 变量,获取 R/G/B 颜色值;当选择调色板预设颜色时,代码内部 case 分支直接覆盖 RGB 分量。
3. Timer0 产生 10us 定时中断,全局count计数器持续累加;RGB()函数使用计数器做简易软件 PWM:当计数值小于对应颜色分量时 IO 输出高电平,实现占空比调节,从而实现 RGB 混色输出不同色彩。P2.0/P2.1/P2.2 分别对应红、绿、蓝 LED 引脚。
2.3 MAX7219 点阵驱动原理
硬件上 4 片 MAX7219 级联,由 P1 口 P1^7 (DIN)、P1^6 (CS)、P1^5 (CLK) 模拟 SPI 时序通信。
1. 字模预先存储在 code 数组disp1[]、disp2[],包含数字、大小写字母、中文、爱心笑脸、烟花动画点阵数据;
2. Write_Max7219_byte()发送单字节,Write_Max7219()一次性对 4 个 MAX7219 写入寄存器与显示点阵数据,完成点阵刷新;初始化函数配置 MAX7219 扫描界限、亮度、关闭 BCD 译码,使用直接点阵模式输出图形。
3. DGUS 界面选择显示模式,将模式编号写入 VP 地址0x5000;OS 内核循环读取该变量,通过 switch 分支调用对应显示函数:
· 模式 1:数字字母滚动;模式 2:时钟滚动;模式 3:预设图案轮播;模式 4:自定义输入字符串滚动;默认执行清屏。
4. 动画速度:触摸屏按钮向 0x4500写入 1/2/3 代表慢中快;Handle_Touch_Input()读取变量更新全局 delay 延时参数,改变滚动帧延时,实现速度调节。
5. 自定义文字录入:DGUS 键盘录入的字符存放在 0x1200,程序读取字符串,将 ASCII 字符映射到 disp1 字模索引,再执行点阵流水滚动输出。
6. 完整演示动画触发:屏幕设置标志位 0x4220, 检测标志位后顺序执行整套动画序列。
2.4 程序运行流程
1. 上电执行系统初始化:系统寄存器配置、IO 初始化、Timer0 初始化、MAX7219 硬件初始化;
2. 进入while(1)死循环: ①读取VP 变量:RGB 分量、调色板颜色模式、点阵显示模式、速度档位; ②调色板颜色模式case处理,更新 R/G/B; ③调用 RGB 函数输出灯光; ④处理触摸输入,更新滚动速度;⑤根据 max 模式调用对应 MAX7219 显示函数,驱动点阵输出画面。
3. Timer0 中断持续计数,为软件 PWM、动画节拍计时提供时间基准。
三、设计思路3.1 DGUS 界面设计思路
界面设计:
1. 开机启动页:放置学校 LOGO、迪文 LOGO、项目标题、队员信息,上电自动展示。
2. RGB 调色页面:提供三套控制途径。滑块组件实时输出 R/G/B 数值;数字键盘允许直接输入 0255 精确值;调色板按钮预设 7 种常用颜色,点击快速切换色彩;所有组件数据映射到独立 VP 变量地址。
3. 点阵功能页面:模式选择控件选择点阵显示类型;慢 / 中 / 快触摸按键控制动画速度;虚拟键盘实现字母数字录入。
3.2 软件代码架构设计
1. 时间系统设计:使用 Timer0 定时中断产生全局 count 计数器,承担两个任务:①RGB 软件 PWM 调光;②作为动画节拍计数器,滚动函数通过 count 差值判断是否刷新下一帧,避免单纯依赖阻塞延时导致的交互卡顿。
2. RGB LED功能设计
l 交互层设计(DGUS 界面侧) 界面提供三种独立的控制方式:滑动滑块调节,键盘输入调节,调色板快捷选色:预设 7 组常用色彩,
l 数据交互设计 OS8051 内核在主循环内通过sys_read_vp周期性读取 VP 地址中 R/G/B 数值与调色板编号。当检测到调色板非 0 时,会覆盖原有 R、G、B 变量,实现调色板优先级;滑块或键盘输入时则直接读取 VP 内的原始分量值。做到 UI 多种操作源最终统一汇总到一组 R、G、B 变量,避免多输入源状态冲突。
l PWM 调光底层实现 采用 Timer0 定时器中断构建软件 PWM 输出。中断服务函数维护全局count计数器循环 0~255 往复计数。RGB()函数做阈值判断:当count小于 R/G/B 设定值时,对应 IO 口输出高电平,否则输出低电平。通过改变阈值(R、G、B 数值),改变 IO 口输出高电平占空比,从而实现 LED 亮度 0255 无级调节。P2.0、P2.1、P2.2 分别驱动红、绿、蓝三路 LED。
3. MAX7219 点阵功能设计
· 预先把数字、字母、符号、爱心、烟花动画全部转为 8×8 字模,存放在 code 存储区;
· 封装清屏、单帧写入底层函数,在此之上实现:数字字母滚动、时钟循环滚动、预设图案轮播、自定义输入文字流水;
· 滚动算法:通过位的移位拼接,实现字符横向滚动移出移入的动画;支持速度档位参数,通过 delay 变量统一控制所有动画的帧延时;
· 自定义录入功能:读取输入的字符串,做 ASCII 码到字模表索引映射,过滤非法字符,空输入时自动清屏。
· 增加完整演示模式:检测屏幕触发标志,依次播放动画同时支持随时接收标志位中断跳出演示回到正常模式。
【演示视频】
【RGB LED和点阵显示控制装置】 https://www.bilibili.com/video/B ... b5daccec1b3194510b1


本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2026-10-7 16:53 , Processed in 0.038722 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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