我现在记录一下, 我之前对多位数码管的理解 , 其中包含余晖效应 和 视觉暂留效应.
1. 数码管能为什么亮
因为数码管从正极到负极有电流通过, 然后就亮了 , 共阳数码管公共端接高电平 , 所以八个端口需要低电平才能亮 . 共阴数码管, 公共端接低电平, 所以八个端口需要高电平才能亮.
八个数码管共同摆布 , 然后通过端口控制, 通过计算让对应端口接相应电平, 我们就可以显示对应的数字
2. 多个数码管共用八个
单个数码管我们容易理解, 那多个数码管也是同样道理, 但是如果给每个数码管都分配8个端口 , 势必会造成端口不够用的情况, 所以我们就可以通过 控制公共端的电平 , 在特定时间 , 把八个端口单独给一个端口使用. 说直白点, 就是 每个数码管都有权利去显示, 但是同一时间, 如果每个数码管都想借助八个端口显示特定的数字的话, 就要分时复用了 , 这100毫秒 , 八个端口的数据是数码管1 , 下100ms八个端口的数据就是数码管2的 , 中间决定哪个数码管显示 , 就需要我们控制公共端了.
这中间 , 只要两个数码管切换的时间够频繁, 我们就看不出 某个数码管在100ms内没显示数字, 并且数码管都有余晖效应 , 就是数码管刚亮起来的时候 , 我们突然断电, 数码管不会直接熄灭,而是慢慢熄灭, 在我们数码管还没完全熄灭, 100ms时间又到了, 所以我们就察觉不到数码管的闪烁 (前提是这个数据还是上次一样的数据).
3.数码管的显示命脉
数码管显示的命脉, 就是公共端, 我想让你显示, 共阳数码管的话, 公共端接上高电平, 电源给你通上 , 剩余八个端口, 想怎么显示, 就怎么显示, 反正这边电源给着, 但是公共端把电断了的话, 那无论这八个端口如何显示 , 数码管都是不亮的(led灯电流单向导通).
所以 , 我们只要合理安排多个数码管 , 通电和断电 , 就可以实现多位数码管的显示.
4.合理安排断电
我们安排断电的目标是什么呢?
① 通俗的讲就是可以显示多位数码管显示
② 再严格点就是 , 各个数码管显示对应的数字, 并且不会错位, 不会闪烁 , 各司其职
为达到这个要求 , 我们下面来放慢速度显示数码管过程:
错误示范1:
while(1) //while循环里面进行循环显示
{
// 数码管1电源打开
// 端口显示数码管1数字
// 数码管2电源打开
// 端口电视数码管2数字
}
分析: 这样显示 , 就把两个数码管当成了一个数码管 , 同一时间, 只能显示一个数字, 如果延时时间段, 会造成闪烁
改进方案: 在开启一个数码管前 , 先把另一个数码管的电拔了
while(1) //while循环里面进行循环显示
{
// 数码管2电源关闭 (1)
// 数码管1电源打开(2)
// 端口显示数码管1数字(3)
// 延时(4)
// 数码管1电源关闭(5)
// 数码管2电源打开(6)
// 端口电视数码管2数字(7)
// 延时(8)
}
分析: 其实已经改进的差不多了, 但是还是有点小瑕疵, 问题不大, 就是在步骤2 的时候, 如果直接打开数码管1的电源, 此时端口的电平数据 , 还是数码管2的 , 最好在打开单个数码管电源前 , 先把其他数码管电断了 , 然后修改端口电平数据, 此时再打开此数码管电源 .
改进如下:
while(1) //while循环里面进行循环显示
{
// 数码管2电源关闭 (1)
// 端口显示数码管1数字(3)
// 数码管1电源打开(2)
// 延时(4)
// 数码管1电源关闭(5)
// 端口电视数码管2数字(7)
// 延时(8)
// 数码管2电源打开(6)
}