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的延时,如果直接清零,数码管的亮度会不是很亮)

 

 关于数码管驱动方式:

 

posted @ 2023-03-24 20:25  鬼幽电z  阅读(261)  评论(0编辑  收藏  举报