目录
一、数码管
(一)、数码管的简介
数码管是一种显示器可以显示数字和其他信息的电子设备。在其玻璃管中包含着一个金属丝网制成的阳极和多个阴极,管中含有氖气和氩气等稀有气体。
(二)、数码管的分类
数码管可分为七段数码管和八段数码管,其主要区别是八段数码管比七段数码管多一个可用的小数点显示位,其基本单位都是发光二极管。
按发光二极管单元连接方式可分为共阳数码管和共阴数码管。
共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。
(三)、数码管是显示结构
数码管由若干个发光二极管组成,将发光二极管的阳极接到一起形成公共阳极(COM)的数码管;将发光二极管的阴极接到一起形成公共阴极(COM)的数码管。其中a、b、c、d、e、f、g 分别对应7个段位,dp对应小数点,这8条线又称为段选线。
(四)、共阳数码管段码介绍
在单片机设计与开发赛事中,官方提供的原理图所用数码管为共阳数码管,故下面给出在蓝桥杯比赛中常用到的编码值:
内容 | 段码 | 编码值 | |||||||
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 |
二、数码管的显示方式
数码管的显示方式由两种:静态显示和动态显示。下面以共阳数码管为例。
(一)静态显示方式
1、静态显示方式简介
所谓静态显示方式,就是将共阳数码管的阳极接地,将其8为段选线与一个8为并行相连。
下面为蓝桥杯中单片机设计与开发赛事中原理图中数码管连线部分
2、数码管静态显示方式的运用
点亮数码管段码值
#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();
}
}
(二)动态显示方式
1、动态显示简介
动态显示方式是用扫描方式,一位一位的轮流点亮LED。其实质是轮流点亮单个数码管实现多位数码管整体显示效果,其能够节省大量的I/O端口,而且功耗较低。
2、动态显示运用
显示一个日期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<<shu);
Init74HC138(7);
P0=num;
}
void DisplaySMG_static()
{
DisplaySMG(SUM_duanma[2],0);
Delay(100);
DisplaySMG(0xff,0);
DisplaySMG(SUM_duanma[0],1);
Delay(100);
DisplaySMG(0xff,1);
DisplaySMG(SUM_duanma[2],2);
Delay(100);
DisplaySMG(0xff,2);
DisplaySMG(SUM_duanma[2],3);
Delay(100);
DisplaySMG(0xff,3);
DisplaySMG(SUM_duanma[16],4);
Delay(100);
DisplaySMG(0xff,4);
DisplaySMG(SUM_duanma[2],5);
Delay(100);
DisplaySMG(0xff,5);
DisplaySMG(SUM_duanma[16],6);
Delay(100);
DisplaySMG(0xff,6);
DisplaySMG(SUM_duanma[8],7);
Delay(100);
DisplaySMG(0xff,7);
}
void main()
{
while(1)
{
DisplaySMG_static();
}
}