目录
一、数码管
(一)、数码管的简介
(二)、数码管的分类
(三)、数码管是显示结构
(四)、共阳数码管段码介绍
二、数码管的显示方式
(一)静态显示方式
1、静态显示方式简介
2、数码管静态显示方式的运用
(二)动态显示方式
1、动态显示简介
2、动态显示运用
数码管是一种显示器可以显示数字和其他信息的电子设备。在其玻璃管中包含着一个金属丝网制成的阳极和多个阴极,管中含有氖气和氩气等稀有气体。
数码管可分为七段数码管和八段数码管,其主要区别是八段数码管比七段数码管多一个可用的小数点显示位,其基本单位都是发光二极管。
按发光二极管单元连接方式可分为共阳数码管和共阴数码管。
共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。
数码管由若干个发光二极管组成,将发光二极管的阳极接到一起形成公共阳极(COM)的数码管;将发光二极管的阴极接到一起形成公共阴极(COM)的数码管。其中a、b、c、d、e、f、g 分别对应7个段位,dp对应小数点,这8条线又称为段选线。
图2 七段数码管基本结构在单片机设计与开发赛事中,官方提供的原理图所用数码管为共阳数码管,故下面给出在蓝桥杯比赛中常用到的编码值:
内容 |
段码 |
编码值 |
|||||||
dp |
g |
f |
e |
d |
c |
b |
a |
||
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0xC0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0xF9 |
2 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0xA4 |
3 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0xB0 |
4 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0x99 |
5 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0x92 |
6 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0x82 |
7 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0xf8 |
8 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0x80 |
9 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0x90 |
A |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0x88 |
B |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0x80 |
C |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0xC6 |
D |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0xC0 |
E |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0x86 |
F |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0x8E |
- |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0xBF |
. |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0x7F |
下面为共阳数码管和共阴数码管0~9对应的编码值:
数字 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
共阳 |
0xc0 |
0xf9 |
0xa4 |
X0b0 |
0x99 |
0x92 |
X082 |
0xf8 |
0x80 |
X090 |
共阴 |
0x3f |
0x06 |
0x5b |
0x4f |
0x66 |
0x6d |
0x7d |
0x07 |
0x7f |
0x6f |
数码管的显示方式由两种:静态显示和动态显示。下面以共阳数码管为例。
所谓静态显示方式,就是将共阳数码管的阳极接地,将其8为段选线与一个8为并行相连。
下面为蓝桥杯中单片机设计与开发赛事中原理图中数码管连线部分
图4 蓝桥杯中数码管的电路图点亮数码管段码值
#include "reg52.h"
sbit HC138_A = P2^5;
sbit HC138_B = P2^6;
sbit HC138_C = P2^7;
unsigned char code SMG_Duanma[18] =
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,
0xbf,0x7f};
void DelaySMG(unsigned int time)
{
while(time--);
while(time--);
}
void Init74HC138(unsigned char channel)
{
switch(channel)
{
case 4:
HC138_A = 0;
HC138_B = 0;
HC138_C = 1;
break;
case 5:
HC138_A = 1;
HC138_B = 0;
HC138_C = 1;
break;
case 6:
HC138_A = 0;
HC138_B = 1;
HC138_C = 1;
break;
case 7:
HC138_A = 1;
HC138_B = 1;
HC138_C = 1;
break;
case 8:
HC138_A = 0;
HC138_B = 0;
HC138_C = 0;
break;
}
}
void DispaySMG_Static()
{
char i;
Init74HC138(6);
P0 = 0x01;
for(i = 0; i < 18; i++)
{
Init74HC138(7);
P0 = SMG_Duanma[i];
DelaySMG(60000);
}
}
void main()
{
while(1)
{
DispaySMG_Static();
}
}
动态显示方式是用扫描方式,一位一位的轮流点亮LED。其实质是轮流点亮单个数码管实现多位数码管整体显示效果,其能够节省大量的I/O端口,而且功耗较低。
显示一个日期2022-2-8.
#include "reg52.h"
sbit HC138_A=P2^5;
sbit HC138_B=P2^6;
sbit HC138_C=P2^7;
unsigned char code SUM_duanma[18] =
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,
0xbf,0x7f};
void Init74HC138(unsigned char channel)
{
switch(channel)
{
case 4:
HC138_A=0;
HC138_B=0;
HC138_C=1;
break;
case 5:
HC138_A=1;
HC138_B=0;
HC138_C=1;
break;
case 6:
HC138_A=0;
HC138_B=1;
HC138_C=1;
break;
case 7:
HC138_A=1;
HC138_B=1;
HC138_C=1;
break;
}
}
void Delay(unsigned char t)
{
while(t--);
}
void DisplaySMG(unsigned char num,unsigned char shu)
{
Init74HC138(6);
P0=(0x01<