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、设置界面切换按键:这个按键题目有一个流程图要理清其中逻辑,符合题目要求
3、加、减按键。
4、长按显示数据功能:利用Key_Old实现长按功能。
4、完成数据显示界面
**难点:**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)
- 模式判断与数据编码
模式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;




