51单片机 数码管模块

1.原理图

51单片机 数码管模块_第1张图片

51单片机 数码管模块_第2张图片

共阴极和共阳极:

简单来说,如果是共阴极的话,我们想要驱动某一个led灯,就应该给另一端加高电平,共阳极的话就加低电平

数码管显示分两种:静态显示和动态显示;

静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动。

动态显示:动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示。在实际应用中我们都是采用动态显示方式,不管你要显示几位,我们都只需要8+1+1 = 10个引脚。

(动态显示的原理:余辉效应。

在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。只是可能亮度没有静态显示那么亮,但是影响不大)

74HC573芯片

51单片机 数码管模块_第3张图片                       51单片机 数码管模块_第4张图片

74HC573是八进制 3 态非反转-----“透明”锁存器

用于锁存引脚数据,实现引脚复用,这样的话,我们的P0端口就可以用于先后提供数码管段选和位选的数值。

我们结合数码管原理图以及上面两个图可以得出,当LE引脚(即单片机的P2^6,P2^7两个引脚)为高电平时,输出引脚Q是输入端D的值,当LE引脚为低电平时,75HC573芯片会将数据锁存(可看成在输出引脚上保存上一次的输入数据),

所以如果我们要写数据,可通过P2^6、P2^7两个引脚来选择芯片,通过置高电平后再置低电平的方式,实现P0端口的复用。

 

好了,知识讲到这里就够了,我们直接上代码

/*****************************************
*本代码实现的是,重复从左往右依次显示0-7
*即第一位显示0,然后第一位暗,接着第二位显示1
*****************************************/
#include
sbit l1 = P1^0;
sbit duan = P2^6;
sbit wei = P2^7;
/**********************************************
*这个是随便写的延时函数,需要精确到几ms的话,可以参照
*网上的延时函数写法,这里只是起到简单延时的作用
**********************************************/ 
void delay(int n)   
{
	n = n *10000;
	while(n--) ;
}
void main()
{
	/***********************
        *段选是共阴极
        *位选是共阳极
        ***********************/
        int j ;
	int a[8] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};//数字0-7的段选编码
        int b;
	while(1)
	{
		b = 0xfe;  //选中第一位显示
		  for(j = 0;j < 8;++j)
		  {
		  	P0 = a[j];   //段选
			duan = 1;
			duan = 0;
		
			P0 = b;      //位选
			wei = 1;
			wei = 0;
			delay(10);
			b = (b<<1)|0x01;  //每次往右移动一位显示
		  }
	} 
}

 

 

 

本人所写的有关51单片机的前面部分理论是从观看“亚博科技”的资料所整理的

静态驱动也称直

流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40I/O端口来驱动

静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40I/O端口来驱动

 

你可能感兴趣的:(单片机)