技术在单片机中的应用单片机控制下的数码管显示技术应用

 

1. 数码管的显示器及其接口

单片机系统中 常用的显示器有: 发光二极管LED显示器、液晶LCD显示器、TFT液晶显示器。本文主要是关于LED显示器的说明。

LED显示器有两种显示结构:段显示(7段、米字型等)和点阵显示(5×8、8×8点阵等)。

LED数码管根据接法可以分为共阴和共阳。

如下图中,左边是共阴接法,右边是共阳接法。共阴表示8个led的阴极接到一起,共阳是8个led的阳极接到一起。

显示数字或字符时需要编码。如果是共阴接法,那么a/b/c/d/e/f/g/dp为高电平时对应的led就会亮,编码0~F分别是:

2. 数码管静态显示原理

LED显示器工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入依次字形码后,显示字形可一直保持,知道送入新字形码为止,这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。

如下为proteus仿真静态数码管,共阳极,显示0.


typedef unsigned char u8;

// code保存数据到寄存器中 共阴极码表 
u8 code segment[] = {0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};

#define LCDP1	P1
void show_LCD_static_P1()
{
	LCDP1 = (~segment[0])&0x7f;  // 共阳极显示
	while(1){}
}

 3. 数码管动态显示原理

动态显示的特点是将所有数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。点亮数码管采用动态扫描显示。松台扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以选择限流电阻时应该略小于静态显示电路中的。

4. 操作实践

如下是普中51-单核-A2板子上的数码管模块原理图,可以看到,右上有8个数码管用来显示字符,这8个数码管一端分别与LED1~LED8连接,另一端与P0口连接,所以通过控制P0口来显示我们需要的字符;LED1~LED8通过74HC138译码器与P2^2、P2^3、P2^4连接,这三个IO口控制是哪一个LED可以显示。

静态数码管显示,第一个数码管显示字符F

sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
#define LCD P0

typedef unsigned char u8;

// code保存数据到寄存器中
u8 code segment[] = {0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};

void show_LCD_static()
{
	// LED1显示字符F
	P22 = 1;
	P23 = 1;
	P24 = 1;
	P0 =  segment[15];
	while(1){}
}

显示结果:

动态数码管显示,从第一个数码管开始依次显示0,1,2,3,4,5,6,7

#include "LCD.h"
#include "reg51.h"
#include "delay.h"

sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
#define LCD P0

typedef unsigned char u8;

// code保存数据到寄存器中
u8 code segment[] = {0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};

void show_P0_0()
{
	u8 i;
	for(i=0;i<8;i++)
	{
		switch(i)
		{
			case 0:
				P22 = 1; P23 = 1; P24 = 1; break;
			case 1:
				P22 = 0; P23 = 1; P24 = 1; break;
			case 2:
				P22 = 1; P23 = 0; P24 = 1; break;
			case 3:
				P22 = 0; P23 = 0; P24 = 1; break;
			case 4:
				P22 = 1; P23 = 1; P24 = 0; break;
			case 5:
				P22 = 0; P23 = 1; P24 = 0; break;
			case 6:
				P22 = 1; P23 = 0; P24 = 0; break;
			case 7:
				P22 = 0; P23 = 0; P24 = 0; break;		
		}
		P0 = segment[i];
		delay_ms(500);  // delay.h中的延时函数
		P0 = 0;

	}
}

显示结果:

上图的连接中左边的数码管1对应的是74HC138的15pin,即Y0,也就是74HC138的ABC都是0的时候输出对应的是Y0,正好对应的是代码中P22=P23=P24=0时,显示7.

物联沃分享整理
物联沃-IOTWORD物联网 » 技术在单片机中的应用单片机控制下的数码管显示技术应用

发表评论