51单片机快速入门之 LED点阵 2024/10/16

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 即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值