51单片机学习日志-8
上一个实验我们通过动态扫描的方法,成功实现了用一个寄存器来控制多个数码管,按理来说其实一个寄存器只能控制一个数码管的,但是通过控制数码管的开关情况,可以实现有规律的开关,利用一些效应达到同时显示的效果,这种效果其实在显示领域是非常常见的。因为对于屏幕来说,特别是清晰度非常高的屏幕来说,每一帧画面所包含的像素是非常多的,而在显示的过程当中就需要控制这么多的像素,才能达到比较好的显示效果,那如何控制这么多的像素就是关键问题,如果不使用动态扫描的方式,那么所需要的控制线路将是非常恐怖的数量,而使用动态扫描就能显著改善这种情况,同时随着刷新频率的提高,也便于在短时间内完成对众多像素的刷新,从而更加方便高像素屏幕的显示。回到主题,就是说对于多个数码管最好的方法就是使用动态扫描,而如果不是两个数码管,而是8个数码管呢,这时又应该如何去做呢,接下来的实验就是和这个相关的。

这是实验的电路连接图,可以看到这里用到了一个译码器芯片,这个芯片在这个实验中是起到关键作用的。和上一个实验不同的是数码管的数量更多了,其实同样可以用一般的思维来考虑这个问题,因为需要控制8个数码管,所以需要使用相同数量的引脚端口来控制数码管的使能端,也就是数码管的阴极,所以就是需要8个引脚对其进行控制,也就是说在某一时刻,需要通过引脚的控制使得只有其中一个数码管显示,而其他数码管则处于关闭的状态。按道理来说,这样是行得通的,但是还有一种方法能够提高芯片引脚的利用效率,也就是前面提到的芯片。

这个芯片的型号叫做74HC138,被称为3-8译码器,其作用是通过控制三个输入引脚,从而控制八个引脚的输出,其中这八个引脚在同一时刻只有一个引脚是被选中的,其实也是比较满足要求的(被选中的那个引脚输出低电平),而且因为这个芯片的输入输出引脚是规定好的,所以不需要进行配置即可使用,这也是和单片机不一样的地方。从芯片引脚图可以看到,除了电源引脚之外,还有输入的地址引脚以及使能引脚,以及输出引脚。需要将输入引脚和单片机的引脚进行匹配,其中用三个单片机引脚控制选通信号,而另外一个引脚控制该芯片的开关。将电路连接好之后,就可以进行代码的编写了。
代码的编写需要根据硬件电路的情况而定,和上一个实验不同的是,这里需要控制8个数码管,而且不是直接通过引脚控制数码管的阴极,而是通过一个译码器芯片间接进行控制,通过了解译码器芯片的功能可以了解到,在这种情况下,当输入对应的地址码后,就能使得对应输出端控制的数码管进行显示,而其他的数码管是处于关闭状态的,这种效果就非常像上一个实验中的效果,所以就是通过输出地址码的方式来达到控制的效果,所以就有针对性地进行修改就可以。
还是和上一个实验一样,先对端口进行配置,根据实验的要求,直接将对应的端口配置为输出模式即可,但是不太一样的是,因为对译码器芯片的输入需要同时具备高电平和低电平的能力,所以需要将端口配置为第一种模式,这样就可以既输出高电压又能输出低电压,同时不需要上拉电阻的作用。进入主函数进行主要代码的编写并且将端口配置后之后,先将芯片关闭,这样进入主循环就可以进行代码的编写了。这里要注意使用的还是动态扫描方式,先输入寄存器字形码再打开对应的数码管,这里显示通过输出地址码到芯片,再打开芯片开关,就能将数码管显示出来,再进行延时后关闭芯片,之后进行进一步的操作。而这里其实还有一个可以优化的地方,因为当要决定选通哪个数码管的时候,是要输入对应的八位二进制数的,所以如果能够使用一些方法将这些二进制数变得更加易读,那么就可以一眼看到控制的具体是哪一个数码管了。而这里比较好的一点就是,可以将芯片的输入放在P2的低三位引脚上,通过对P2寄存器赋值某数,系统自动将该数转化为对应的二进制数,而芯片有能够将该二进制数转化为对数码管的控制,就不需要额外编写对应关系了,一下时对应的完整代码。




对于代码要补充说明的一点就是这里还是定义了一个数组,用来表示送入第几个数码管的数字,其中定义一个变量i用于实现数码管的扫描,也即在大循环中定义一个小循环,在这个小循环中i的数值在不断递增,在每一次递增之后,对相应的数码管进行刷新显示,每八个为一个循环,最后在从头再来,如果没有这个循环,那么代码会变得更加复杂,而由于每次刷新的是第i个数码管,所以可以将显示的数字和i联系在一起,所以就可以定义一个数组,将第几个数码管显示什么数字的信息放进去,从而有很好的效果。

浙公网安备 33010602011771号