51单片机:动态数码管
目录
一.显示原理
1.简介
上一次是是用了一个数码管显示,这一次写的是多位数码管的使用。
其实绝大多数问题的难点只有两个:
从0到1的实现
从1到2的实现
什么都没有的情况下,诞生出第一个是困难的。诞生了第一个后,由一个变成两个也是困难的。但有了两个以后,由此产生的更多也就有理可依了。
进入正题:
多位数码管是由两个及两个以上的数码管组成。他们的内部有公共端,负责选择多个数码管的其中一个让它亮,称为“位选线。另外他们各自有连在一起的端口,负责控制数码管显示指定的数,称为”段选线“。所以通过位选操作选中数码管,再通过段选让该数码管显示指定数字,就是核心原理了。
2.静态显示与动态显示
多位数码管也是可以实现静态显示的,因为它们的段选线是相同的,所以显示的时候要么选择一个数码管显示,要么就所有数码管显示一个同样的数,这个就是静态显示。
动态显示,就是减少段选线的使用,增加位选线的使用。例如选中第一个数码管让它显示0,然后选择第二个数码管让它显示1,这时第一个数码管就会熄灭,所以若想看到他们同时显示(实际上不可能),就需要在人眼可辨识时间内(大概是24ms)不断循环达到这个效果。
二.原件使用
1. 74HC138芯片
这个就是常说的“38编译器”,就是通过三个管脚来实现控制8个管脚的功能,主要用于大屏显示和增加驱动的功能。
我们输入用的是A0-A2这三个管脚,从真值表第4行开始看就行了,当三个输入管脚都是低电平的时候,第一个输出管脚就会输出低电平,其他输出高电平。通过改变输入管脚的值,就可以实现将某一个输出管脚定为低电平,用这个方法就可以实现“位选”的功能。
输入管脚A0,A1,A2分别对应二进制形式的最低位,次高位,最高位,通过将三个管脚的输入电平换算位10进制,就对应着输出管脚的位次。例如输入1、1、1,则换算为7,则选中第7个输出管脚。
2. 74HC245芯片
这个芯片作用是缓冲,为了保护单片机芯片和外部设备的并行接口增加一个八路的缓冲作用,可以理解为搭桥的作用,不影响整体的功能。
一遍8个管脚作为输入,另外一边8个管脚作为输出即可。
三.硬件连接
将22,23,24作为“三八编译器”的A,B,C号管脚,然后将P0整个接到数码管上即可,另外74hc245在主板上已经短接好,所以不用再改动。
数码管消影:实行新的位选之前需要进行消影清除之前保留在P0的数据,需要将P0口赋值为无就可以了。
四.程序设计
在keil中编辑后下载到芯片就好。
#include <reg51.h>
typedef unsigned int u16;