【蓝桥杯】——七段数码管的运用

目录

一、数码管

(一)、数码管的简介

(二)、数码管的分类

(三)、数码管是显示结构

(四)、共阳数码管段码介绍

二、数码管的显示方式

(一)静态显示方式

1、静态显示方式简介

2、数码管静态显示方式的运用

(二)动态显示方式

1、动态显示简介

2、动态显示运用



【蓝桥杯】——七段数码管的运用_第1张图片

 

一、数码管

(一)、数码管的简介

数码管是一种显示器可以显示数字和其他信息的电子设备。在其玻璃管中包含着一个金属丝网制成的阳极和多个阴极,管中含有氖气和氩气等稀有气体。

(二)、数码管的分类

数码管可分为七段数码管和八段数码管,其主要区别是八段数码管比七段数码管多一个可用的小数点显示位,其基本单位都是发光二极管。

按发光二极管单元连接方式可分为共阳数码管共阴数码管

共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。

【蓝桥杯】——七段数码管的运用_第2张图片 图1 数码管

(三)、数码管是显示结构

数码管由若干个发光二极管组成,将发光二极管的阳极接到一起形成公共阳极(COM)的数码管;将发光二极管的阴极接到一起形成公共阴极(COM)的数码管。其中a、b、c、d、e、f、g 分别对应7个段位,dp对应小数点,这8条线又称为段选线。

【蓝桥杯】——七段数码管的运用_第3张图片 图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

二、数码管的显示方式

数码管的显示方式由两种:静态显示和动态显示。下面以共阳数码管为例。

(一)静态显示方式

1、静态显示方式简介

所谓静态显示方式,就是将共阳数码管的阳极接地,将其8为段选线与一个8为并行相连。

【蓝桥杯】——七段数码管的运用_第4张图片 图3 4为静态数码管电路

下面为蓝桥杯中单片机设计与开发赛事中原理图中数码管连线部分

【蓝桥杯】——七段数码管的运用_第5张图片 图4 蓝桥杯中数码管的电路图

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<

你可能感兴趣的