- 工作原理图
138译码器
G1、G2A、G2B为138译码器的使能端
P22、P23、P24为输入口控制Y0-Y7的动作,以二进制的算法
具体如下:
P22 P23 P24
0 0 0 Y0为1其余为0
0 0 1 Y1为1其余为0
0 1 0 Y2为1其余为0
0 1 1 Y3为1其余为0
那么138译码器有什么用呢?138译码器可以用来控制数码管显示的位数
如当Y0为1时第一个数码管亮,因此可以节省IO口.
数码管模块

74HC245为双向数据缓冲器,主要作用就是数据缓冲。
左边的P口就是用来给数码管传送段码控制亮的数码管内容的。
练习:让指定的位置输出指定的数字


P0=Numall[Num]的意思是时P0口等于Numall数组里第[Num]位的值
然后在主程序的直接调用xuan函数,函数的值(数码管的位置,要显示的数);
数码管要显示的值我们已经用数组全部列出了
动态数码管显示
如果想要多个数码管同时显示应该怎么做?
我们知道程序是在不断刷新的,当刷新的速度够快达到肉眼不可见的速度时,即可一同显示

关于消隐:由于上一位的数据提前来到下一位所以造成阴影,导致数码管显示不清晰,需要加一段延时即可。
模块化编程
传统方式编程:所有的函数均放在main.c里,若使用的模块比较多则一个文件内会有很多的代码,不利于代码的组织和管理,而且很影响编程者的思路模块化编程:把各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数的声明,其它.c文件想使用其中的代码时,只需要#include"XXX.h"文件即可。使用模块化编程可极大的提高代码的可阅读性、可维护性、可移植性等。

.c文件:函数、变量的定义
可被外部调用的函数、变量的声明.h文件:
任何自定义的变量、函数在调用前必须有定义或声明(同一个.c)使用到的自定义函数的.c文件必须添加到工程参与编译使用到的.h文件必须要放在编译器可寻找到的地方(工程文件夹根目录、安装目录、自定义)
利用模块化的思路来做上面的程序
Main

Nixie

