本章为第三章普中51单片机学习基础综合,主要分为两部分:静态数码管显示、动态数码管显示。随着学习的深入,总体结构也会随之变得复杂。
下面是数码管以及138译码器的电路图:
首先我们介绍静态数码管的应用。静态数码管的主要应用在于让单个的数码管上面显示单一的数字。而每个数码管上均包含8个LED灯,同时这些LED灯都是共阴极连接的,所以当我们选中某一个数码管的时候,在相应的LED的阳极给高电平,也就是1,就可以使该LED接通电源变亮。同理,如果单片机上的LED是共阳极连接的,那么我们就给需要亮起来的LED的阴极低电平即可。
首先我们遇到第一个问题:如何选中某一个数码管?
在第二个电路图中我们可以看到,8个LED由3个端口控制(P2_2,P2_3,P2_4),当我们需要选中那个灯的时候,我们只需要将CBA的值转换成LED序号的二进制即可,例如选中6号LED时,P2_4=1,P2_3=0,P2_2=1。
接下来是第二个问题:如何让某一个LED亮起来?
在第一个图中我们可以很清楚的看出每一个LED所对应的引脚,若要选中该LED只需要在它的阳极给予高电平,例如我们想要显示“5”,那么阳极的电平就为:1011 0110,由于我们秉持着“高位对高位”的原则,所以我们在P0端需要从下往上读数,最后再转化为十六进制(简洁)即可。最终结果就为:0x6D.
综上所述我们可以写出代码:
实验现象为:
静态数码管
那么在第一个图中我们可以明显地看到每一个数码管上相同位置上的LED最终都连在了同一根导线上,这就会导致要么我们只能亮一个数码管,要么亮多个数码管但只能显示相同的数字,我们要想实现多个数码管同时显示不同的数字就要引入动态数码管的应用。
因为单片机的执行速度极快,所以我们可以连续写出几行代码用于控制不同的数码管显示不同的数字,然后再外层嵌套一层while循环,以极快的扫描速度从而产生近似于几个数码管同时显示不同的数字的现象。但我们需要注意的是,真正操作的时候,会产生错位以及乱码的情况,这是因为单片机的扫描速度过快,会导致处理下一段信息的时候,下一段信息本身还没到位,上一段信息就会窜位到本段信息处理中来,进而造成错位以及乱码。
鉴于此种现象,我们就可以在每段的代码后面(或者调用的函数体内)增加一个延时函数,同时将P0重置为0x00 。这样就可以消除窜位带来的错误。
我们可以写出以下代码:
实验现象:
动态数码管
以上就是普中51单片机第三章的基础学习了,希望能够帮到大家!!