单片机第四周重制版

1. 彩灯设计 (LED Design)

① 位移操作规范

  • 文档逻辑

    • 使用 _crol_ 函数。

    • 核心要求不要对寄存器直接进行操作,使用中间变量过渡

  • :laptop: 复原代码

C

#include <intrins.h>
​
unsigned char LED_Buf = 0xFE; // 定义中间变量
​
void LED_Move()
{
    // 错误写法:P0 = _crol_(P0, 1);
    
    // 正确写法:先移位中间变量,再赋值给端口
    LED_Buf = _crol_(LED_Buf, 1); 
    P0 = LED_Buf;
}

② 模式切换边界 (Mode 4 → Mode 1)

  • 文档逻辑避免模式4到模式1忽略L1

  • :laptop: 复原代码

![image-20260127074423962](file:///C:/Users/Lenovo/AppData/Roaming/Typora/typora-user-images/image-20260127074423962.png?lastModify=1769516832)


2. 数码管闪烁 (Seg Blink)

① 闪烁逻辑

  • 文档逻辑设置闪烁时间和取反变量覆盖闪烁显示

  • :laptop: 复原代码

全部正常显示

![image-20260127074528861](file:///C:/Users/Lenovo/AppData/Roaming/Typora/typora-user-images/image-20260127074528861.png?lastModify=1769516832)

设置闪烁时间和取反变量

![image-20260127074606242](file:///C:/Users/Lenovo/AppData/Roaming/Typora/typora-user-images/image-20260127074606242.png?lastModify=1769516832)

覆盖闪烁显示

![image-20260127074629839](file:///C:/Users/Lenovo/AppData/Roaming/Typora/typora-user-images/image-20260127074629839.png?lastModify=1769516832)

② 避免程序卡死

  • 文档逻辑闪烁避免程序卡死

  • :laptop: 复原代码

![image-20260127074653700](file:///C:/Users/Lenovo/AppData/Roaming/Typora/typora-user-images/image-20260127074653700.png?lastModify=1769516832)


3. 按键逻辑 (Key Logic)

① 避免默认多执行一次

  • 文档逻辑避免按下切换按键后默认多执行一次

  • :laptop: 复原代码

![image-20260127074716895](file:///C:/Users/Lenovo/AppData/Roaming/Typora/typora-user-images/image-20260127074716895.png?lastModify=1769516832)

② 按键长按

  • 文档逻辑按键长按

  • :laptop: 复原代码

![image-20260127074818123](file:///C:/Users/Lenovo/AppData/Roaming/Typora/typora-user-images/image-20260127074818123.png?lastModify=1769516832)

③ 输入限制

  • 文档逻辑输入限制

  • :laptop: 复原代码

![image-20260127074745239](file:///C:/Users/Lenovo/AppData/Roaming/Typora/typora-user-images/image-20260127074745239.png?lastModify=1769516832)


4. 数据处理 (Data Process)

① 四舍五入

  • 文档逻辑四舍五入保留两位数字

  • :laptop: 复原代码

![image-20260127074937905](file:///C:/Users/Lenovo/AppData/Roaming/Typora/typora-user-images/image-20260127074937905.png?lastModify=1769516832)

② Float 显示与小数点

  • 文档逻辑Float显示数码管

  • :laptop: 复原代码

![image-20260127074950343](file:///C:/Users/Lenovo/AppData/Roaming/Typora/typora-user-images/image-20260127074950343.png?lastModify=1769516832)

③ 电压进位 (mV → V)

  • 文档逻辑9999mV进位之后10.0V

  • :laptop: 复原代码

![image-20260127075001895](file:///C:/Users/Lenovo/AppData/Roaming/Typora/typora-user-images/image-20260127075001895.png?lastModify=1769516832)

![image-20260127075014814](file:///C:/Users/Lenovo/AppData/Roaming/Typora/typora-user-images/image-20260127075014814.png?lastModify=1769516832)

④ 高位熄灭

  • 文档逻辑高位熄灭

  • :laptop: 复原代码

![image-20260127075024329](file:///C:/Users/Lenovo/AppData/Roaming/Typora/typora-user-images/image-20260127075024329.png?lastModify=1769516832)

⑤ 计数值增加

  • 文档逻辑计数值增加

  • :laptop: 复原代码

![image-20260127075036379](file:///C:/Users/Lenovo/AppData/Roaming/Typora/typora-user-images/image-20260127075036379.png?lastModify=1769516832)

Seg_Dula(段选):控制显示什么内容

数码管内部由 8 个发光二极管(LED)组成,分别标记为 a, b, c, d, e, f, gdp (小数点)。

Seg_Wela(位选):控制哪一位亮

Seg_Wela 控制的是如果你有多个数码管排在一起(比如 4 位或 6 位数码管),哪一个数码管应该工作