C51单片机004-静态数码管显示
数码管和段码屏的原理一致
com端接0010(12-0,9-0,8-1,6-0)
0110 0000(也就是b、c端显示,其余全灭)
abcd efgh
11 7 4 2 1 10 5 3
关于74HC138译码器:
只能一次让一个显示,虽然节省了IO口,但也不怎么好用。
关于74HC245 ,双向数据缓冲器
OE是Output Enable,输出使能,即允许输出
DIR-LE-控制数据流向(也就是规定究竟是输出数据,还是读入数据)
LE-1,输出数据;LE-0,读入数据;
Q:为什么要多加一个这样的芯片呢?
A:因为单片机的低电平驱动能力强,高电平驱动能力弱。所以之前的led也是采用低电平点亮的,
如果不加这个芯片,直接通过IO高电平驱动数码管,数码管的亮度不会很亮,
所以需要加一个74HC245芯片,提升单片机高电平驱动的能力。
就相当于是低电平(比如3.3v的vcc,1v/2v相对来说叫低电平)输出高电平(3.3v),提升单片机高电平驱动的能力。
关于数组:
关于子函数:
无返回值,表示函数调用该子函数,不需要从子函数中得到一个值;有返回值,表示函数调用该子函数,需要从子函数中得到一个值xxx;
void function() int function(){…… return xxx}
无参数,表示不需要给子函数中赋值;有参数,表示需要给子函数中赋值;
void function(unsigned int x) int function(unsigned int x){…… return xxx}
关于数组:
首先定义了一个数组,这个数组的每一个量都是16进制,而数码管P0也是有16进制来表示的,并且数组中的第一位(0x3f在共阴极里表示0),也可以和P0=0x3f;对应起来//0011 1111
数组用起来就真的很棒!(最好是被赋予的变量也是16进制,这样就可以快乐且快速的使用数组调用了)
关于数码管的消影:
Q:为什么会出现这样的情况?
A:首先我们先了解一下数码管显示:
1位选 1段选 2位选 2段选 3位选 3段选……n位选 n段选 n+1位选 n+1段选
主要问题就出现在 1段选 2位选 这个地方,第二个段选还没到,但是位选已经选了,就出现了第一个的段选和第二个的位选这种不正常的组合了。
如何消除这种不正常的组合带来的“影子”呢?
就是在 1位选 1段选 清零(0x00) 2位选 2段选 0x00 3位选 3段选……n位选 n段选 0x00 n+1位选 n+1段选
1段选 2位选 这两个中间加一个清零/关闭
1位选 1段选 0x00 2位选 2段选 这样即使会出现不正常的组合,也是0x00 2位选这种情况,也就达到了消除“影子”的效果。
(PS:这里为了稳定显示,所以加了1ms的延时,如果直接清零,数码管的亮度会不是很亮)
关于数码管驱动方式: