【51单片机】数码管的静态显示和动态显示

【51单片机】数码管的静态显示和动态显示

数码管显示原理
【51单片机】数码管的静态显示和动态显示_第1张图片
此次以点亮共阴数码管为例,a,b,c,d,e,f,g,dp在二进制中按照低位到高位的顺序对应。下表用16进制表达对应的数码管点亮的图案
【51单片机】数码管的静态显示和动态显示_第2张图片
静态显示
数码管有静态显示和动态显示两种显示方式,静态显示的每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一个字形码后,会保持这个字形码不变,直到新的字形码送入,才会发生变化。
74HC573锁存器工作原理
【51单片机】数码管的静态显示和动态显示_第3张图片
【51单片机】数码管的静态显示和动态显示_第4张图片
而了解锁存器的工作原理是理解数码管的动态显示的最佳途径,我们需要学会看图,输出口Q若要输出高低电平,OE口必须接地,LE脚为H时,Q输出端与输入端D的值一致。LE脚为L时,Q输出端数据保持不变,也就是说,输入端D不会改变输出端Q的值,达到一个锁存的效果。
动态显示
动态显示的特点就是将所有位数的数码管的段选线并联在一起,由位选来控制哪一位数码管有效,选亮数码管采用动态扫描,所谓动态扫描就是轮流向各位数码管送去字形码和相应的位选,一个一个的点亮,但是利用发光管的余晖和人眼的视觉暂留效果可以使人感觉好像多位数码管都在同时显示。(实则是一个一个循环轮流点亮,但处理时间短)
静态数码管点亮

#include 
#define uint unsigned int
#define uchar unsigned char
sbit DU = P2^6;   //段选端口
sbit WE = P2^7;   //位选端口
void main()
{
     
	WE = 1;    //位选端口打开
	P0 = 0xfe; //使第一个数码管有效
	WE = 0;   
	
	DU = 1;    //段选端口打开
	P0 = 0x06;  //使数码管显示相应的图案
	DU = 0;       
	while(1);  //静态显示只需单次显示

}

动态数码管点亮

#include 
#define uint unsigned int
#define uchar unsigned char
sbit DU = P2^6;
sbit WE = P2^7;
void delay(uint m)
{
     
	uint i,j;
	for(i=110;i>0;i--)
	for(j=m;j>0;j--);
}
void main()
{
     

	while(1)
	{
     
	P0=0xff;  //清除断码
	DU = 1;
	P0 = 0x06;
	DU = 0;

	WE = 1;
	P0 = 0xfe;
	WE = 0;  //锁存数据
	

	delay(3);

		P0=0xff;
	WE = 1;
	P0 = 0xfd;
	WE = 0;  //锁存数据
	
	DU = 1;
	P0 = 0x5b;
	DU = 0;
	delay(3);

	P0=0xff;
	WE = 1;
	P0 = 0xfb;
	WE = 0;  //锁存数据
	
	DU = 1;
	P0 = 0x4f;
	DU = 0;
	delay(3);
	}

}

延时函数在程序里起到延时作用,也就是说,软件处理太快,刷新速度太快,会导致同时显示,从而使得显示结果为8.

你可能感兴趣的:(51单片机学习,单片机)