静态数码管显示(只能显示一个数)
LED数码管结构:
数码管接了两个74系列的芯片,74HC138译码器,74HC245。
COM共阴极;GRN共阳极
译码器结构:(芯片1 74HC138)
输入端:C高位;A低位;B中间。
输出端:8个
三位二进制可以表示8个数据;(最大表示2*2+2+1=7,0-7,8个数)
?意义:仅通过0/1操作控制三个端口,就相当于对8个端口进行了操作。83,节省了单片机的I/O口。
第四列:哪位有效,哪位输出0,剩下的输出1
why?:由原理图,译码器的LED1-8连接的是数码管8个分块的8个共阴极,所以哪个有效,哪个为阴,即为0{只能同时选中一个数码管}
C | B | A | Y(0-7) LED(1-8)错位 |
0 | 0 | 0 | Y0 0111 1111 |
0 | 0 | 1 | Y1 1011 1111 |
1 | 0 | 1 | Y5 1111 0111 |
使能端:相当于电源开关。若使能电平有效,可以工作。
使能:为保证38编译器可以正常工作,需要对4(G2A)、5(G2B)、6((G1)号引脚置数。所置数值根据引脚是高电平还是低电平有效来选择。
能工作:(如原理图的状态,所以一上电就工作了 )G1高电平;G2A、G2B低电平。
双向数据缓冲器:(芯片2 74HC245)
单片机高电平驱动能力有限,输出的最大电流不能太大。
低电平驱动能力更强(LED模块采用低电平点亮,灯会更亮??,输入低电平有效)
共阴极连接,输入高电平有效,低电平无效,为高电平驱动
共阳极连接,输入低电平有效,高电平无效,为低电平驱动
??所以此处加缓冲器,提高了驱动能力。如果直接把I/O口接到数码管,单片机输出的数据就当作驱动数码管显示的数据,现将其通过缓冲器这个芯片,芯片再接数码管,这个数据就变成各种信号(控制信号),控制信号很微弱,缓冲器芯片就可以接收到,接收到后,芯片从自己接的电源上汲取能量,再输出到引脚上。
输入电流较少,输出的电流是从电源上汲取来的,这就驱动数码管更亮的闪烁
OE:芯片的使能,低电平有效。如图接地,芯片可以工作。
右图中有个电容,左无,用于电源滤波,滤除不稳定的电源信号。稳定电源,使芯片供电更稳定
DIR(direction)(控制数据传输方向): DIR若接高电平,就把左边数据送到右边
DIR若接低电平,就把右边数据送到左边
左图接VCC;右图接LE(插跳线帽,将VCC与LE短路)。所以,左右
排阻:限流。
静态数码管显示步骤:
- 控制138译码器的三个口(P22 P23 P24),使某一位(共阴极)被选中,通过置0。亮的位置
- 再给P0口一个断码数据,经芯片缓冲,送到断码段 ,通过置1。 亮的形状
//LED6显示6----
//LED6:Y5---101
// 6: a-dp:1011 1110
// P00-P07:1011 1110
// 应从高位(P07)到低位(P00)读:所以0111 1101(7D)
#include<REGX52.H>
void main()
{
P2_4=1;
P2_3=0;
P2_2=1;
P0=0x7D;
while(1)
{
}
}
//可通过函数,数组任意控制某一位显示某数据(代码可直接调用)
///1表示5V的高电平