|
|
前面讲的数制模块同时可以作为单片机简易开发板用。
这两天趁着周末写了几个适合初学者的小应用。今天就先聊聊第一个:如何用按键来动态调节LED的闪烁频率。
为了让大家看清底层,我特意把代码打印出来做了对比(附实机图与代码图)。
代码逻辑对比(见图1):
这里有两种写法,结果是一样的,但思路不同:
第一种(未注释部分):利用定时器累加变量 t,当 t 超过设定的 Num 值时,利用 BIN4 = ~BIN4; 直接对端口取反,实现翻转,然后 t 清零。
第二种(被注释掉的 /* */ 部分):是完全按状态拆分的写法。前半段 t <= Num 时执行动作1,后半段 t > Num && t <= (2*Num) 时执行动作2,然后再手动把引脚置1或置0。
很多新手会觉得第二种更“好理解”,因为每一段逻辑都写死了。但第一种取反的写法,才是单片机里最原汁原味的位操作。
避坑点:
闪烁间隔时间和数码管的动态扫描如果都在中断里处理,极其容易打架。一定要理清定时器0和定时器1的分工。
下一期,咱们再聊聊跑马灯状态机里,我留下的一个“复位陷阱”。 |
|