51单片机快速入门之 LED点阵 2024/10/16
图片来源于网络:
电路图
点阵其实和数码管相同, 仔细看图,这里行共阳极,列共阴极
如果我们想显示一个1 那么我们只需要让每行轮流点亮且间隔0.04s 人眼画面暂留时间
举个例子:
假设我们想点亮最右边的整列
只需要设置每行 轮流为高电平 最右边的列 为低电平 即可 显示
假设电路为 p1.7为第一行-p1.0为第二行 p2.7为第一列 -p2.0第二列
行扫描显示:
如果要点亮最右边一列 p2.0就应该是低电平 其他为高电平 可以得到 P2=1111 1110 0xfe
而p1.7-p1.0需要轮流为高电平
初始时1000 0000 p1.7为高电平 P1=0x80
往下就是0100 0000 也就是0x80往右移 所以我们可以用循环按位右移 P1=0x80 >> 1
列扫描显示:
列和行相差不大我们需要控制的是列
如果我们要点亮第一行
首先打开第一行 P1=0x80 1000 0000
然后控制列P2=0xef 0111 1111
点亮第一行第一个led 在往右移 P2=P2 >> 1
但是由于是低电平点亮我们要保证其移动后有短暂的熄灭而不是爬楼梯似 点亮
我们需要保持点亮熄灭 这里就需要用到 位或 公式为 A+B 符号为 |
P2=P2>>1 | 0x80 0x80=1000 0000
当下次位移 P2>>1 0011 1111
位或
0011 1111
+ 1000 0000
_____________
1011 1111 结果就是
再往下
0101 1111 //右移后
+ 1000 0000 //位或
_______________
1101 1111
这就是列扫描
移动显示的字符 :
如果需要移动字符 如前面说的 我们点亮了右边的一整列
我们要想其 往左边移动 应该如何办?
我们知道此时 P2=1111 1110 0xfe
如果要往左边移动就需要其为 1111 1101 也就是左移之后 或运算0000 0001
P2=0xfe<<1 | 0x01
1111 1100 //左移
+ 0000 0001 //或运算
__________
1111 1101 //字符移动了!
字符的闪烁:
因为我们用的显示方式是扫描,所以如果需要闪烁只需要 加长 延时即可 大于0.04s 即可