Led彩灯控制系统

LED彩灯智能控制系统

解题思路

一.本题的主要考察的是对LED流水灯运行模式的控制,所以可以先将最底层的LED的四种运行模式完成。

其中要尤其注意题目要求在设备运行时固定按照模式 1、模式 2、模式 3、模式 4 的次序循环往 复运行

主要考点:1、对左移右移函数的运用

_crol_(位移变量,位移位数)  _cror_()

2、模式3、4的写法技巧

通过设置一个数组储存模式3、4LED数据,改变数组的索引来实现模式3、4.

3、通过中间变量ucled来传递数据,不能直接对寄存器P1进行操作

二、然后再从数码管下手,分析题目得只有多个显示模式,则先定义数码管显示模式变量‘Seg_Disp_Mode’。

1、按要求完成模式1–运行状态界面

难点:显示流转间隔时,要注意千位为零时要熄灭


while(Seg_Buf[i]==0)
{
	Seg_Buf[i]=10;
		i++;
}

2、完成第二个界面。

**难点:**1、选中单元数码管闪烁。

2、不同界面不能共用一个数组存储数据。

3、然后写按键功能,注意题目要求。

​ 1、启动、暂停按键;

​ 2、设置界面切换按键:这个按键题目有一个流程图要理清其中逻辑,符合题目要求

image-20251227172242305

​ 3、加、减按键。

​ 4、长按显示数据功能:利用Key_Old实现长按功能。

image-20251227172739937

4、完成数据显示界面

**难点:**1、数据读取

image-20251227173015555

  1. 核心逻辑:定位首个点亮的LED

代码段:

i = 0;
while((~ucLed & (0x01 << i)) != (0x01 << i))
    i++;

工作原理:

  • 前提假设:LED采用低电平有效控制(0表示点亮,1表示熄灭)
  • 位掩码生成(0x01 << i) 动态生成检查掩码(如 0000 0001, 0000 0010…)
  • 状态取反~ucLed 将点亮状态转换为逻辑1,便于检测
  • 条件判断:通过按位与操作和比较,确定LED状态
  • 循环终止:当找到第一个点亮的LED时退出循环,i值为该LED的位置索引(0-7)
  1. 模式判断与数据编码

模式0-1(简单序号模式)

if(Led_Mode < 2)
    Led_Data = i+1;

编码规则:

  • 直接返回LED的物理位置编号(1-8)
  • 应用场景:优先级编码、第一响应指示、简单状态显示

模式2-3(对称编码模式)

else
    Led_Data = (i+1)*10 + (8-(i+1));

2、小数点

​ 只有在数据显示界面才有小数点,

Seg_Point[0] = Seg_Point[1] = Data_Disp_Flag?1:0;