2—流水灯实操
准备
在前文关于C51基础的叙述中,强调了左移,右移,以及取反符号的使用,巧妙地使用如上位移符号能够极大简化程序的设计。
正向移动
计算0xff << 1
与0xff << 2
:
- 0xff << 1 = 1111 1111 << 1 = 1111 1110 = 0xfe(注意溢出的将会被舍去)
- 0xff << 2 = 1111 1111 << 2 = 1111 1100 = 0xfc
- 将0xff(1111 1111)对应LED灯,LED灯应当出于全部熄灭的状态。
- 将0xfe(1111 1110)对应LED灯,仅最低位的LED灯将会被点亮(注意位与端口的对应关系)。
- 将0xfc(1111 1100)对应LED灯,8颗LED灯中的低两位将会被点亮,如下:
由此快速变化便有了正向流水灯的效果。
反向移动
计算~(0xff << 1)
与~(0xff << 2)
,参考前文正向移动的叙述(注意括号的优先级):
- ~(0xff << 1) = ~(1111 1111 << 1) = 0000 0001 = 0x01
- ~(0xff << 2) = ~(1111 1111 << 2) = 0000 0011 = 0x03
- 将0x00(0000 0000)对应LED灯,所有灯全部点亮。
- 将0x01(0000 0001)对应LED灯,最低一位的LED灯熄灭。
- 将0x03(0000 0011)对应LED灯,最低两位的LED灯熄灭。
多次循环后可有如下效果:
将正向流水灯与反向流水灯组合便可完成流水灯的设计,效果见文末。
程序
1 | /* |
效果
本文标题:2—流水灯实操
文章作者:Raincorn
发布时间:2020-07-25
最后更新:2020-07-29
原始链接:https://blog.raincorn.top/2020/07/25/CT107D_2_LED_Running/
版权声明:本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可