蓝桥杯动态数码管显示

蓝桥杯数码管原理图:



数码管内部就是8LED组成的,LED的阴极全部连接在一起就是共阴极数码管,反之就是共阳极数码管,这个公共端用一个引脚引出用于位选,由于二极管是单向导电,对共阳极数码管而言,我们想要位选这个数码管就要给位选的引脚高电平,二极管一端已经是高电平了,段选就需要给另外一端一个低电平,共阴极数码管分析思路一样.

我们看一下原理图,首先我们看一下动态数码管的原理图,首先说明一下我们蓝桥杯的板子上的数码管是共阳极的,对第一组数码管(四个)分析,com1,com2,com3,com4就是留给我们来位选的,a,b,c,d,e,f,g,dp就是进行数码管的段选,加入我们让第一个数码管显示我们想要的数字,先给com1一个高电平,在给对应的a,b,c,d,e,f,g,dp一个低电平就可以显示我们想要的数字.

看到左边有两个芯片(M74HC573MIR),这个是锁存芯片,其特性为当11LE为高电平时,芯片解除锁存,为低电平时,芯片处于锁存状态。只要我们所谓锁存,就是当我们使芯片处于锁存状态的时候,Q1~Q8的状态与D1~D8无关,当锁存解除,Q1~Q8会与D1~D8保持一致.由原理图,左边两个M74HC573MIR芯片是否处于锁存状态分别LE,他们分别由Y6CY7C控制.

再看 器件选择 这个原理图,左边有一个74HC138译码器,这个芯片就是ABC三个管脚控制着Y0~Y78个管脚,使其中一个输出低电平,其他七个引脚输出高电平,其规律可以看起到网上到芯片手册.我们先位选,看到动态数码管原理图,我们需要给Y6C一个高电平,再看到器件选择的原理图,当我们74HC138A,B,C三个引脚赋值为1,1,0,就可以使Y6输出低电平,而其他的引脚输出高电平,然后再看到右边的4个或非门,Y6WR经过一个或非门得到Y6C,WR我们在开发板上是和GND相连的,默认低电平,当我们通过74HC138Y6一个低电平的时候,Y6WR的或运算得到低电平,然后取非得到高电平,即此时的Y6C是高电平,然后我们就关闭了U8这块M74HC573MIR芯片的锁存,通过给P0一个值就可以控制com,位选需要的芯片.然后同样的方法就可以段选了.

下面是代码实现
//这个数组用于位选,只给一个引脚高电平
unsigned char which[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//段选,根据数字编码
unsigned char num[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//延时函数
void delay_ms(int n)
{
	int i,j;
	for(i=n;i>0;i--)
		for(j=110;j>0;j--);
}
//显示函数,w表示第几个数码管,n表示显示什么数字
void display_num(unsigned char w,unsigned char n)
{
	P2 = (P2&0x1f)|0xc0;//这一步就是先将P2的高三位先清0,然后在置相应的位来关闭相应锁存芯片的锁存
	P0 = which[w-1];//位选
	
	P2 = (P2&0x1f)|0xe0;//关闭段选芯片的锁存
	P0 = num[n];//段选
	delay_ms(5);//延时保证数码管数字亮度
	P0 = 0xFF;  //消影
	P2 &= 0x1f; //重新将高三位清零,以供下次使用
	
}

猜你喜欢

转载自blog.csdn.net/private_void_main/article/details/79513081