【蓝桥杯单片机入门记录】静态数码管

目录

一、数码管概述

(1)认识数码管

(2)数码管的工作原理

(3)LED数码管驱动方式-静态显示

二、数码管电路图

三、静态数码管显示例程

(1)例程1:数码管显示某一位(某一杠)。以点亮8段数码管最上面的横杠为例。

(2)例程2:数码管的8个段依次点亮(其他保持熄灭)

(3)例程3:数码管显示某一个数值。(本例以点亮8段数码管显示数组“1”为例)

(4)例程4:数码管依次显示0-9、-、全部熄灭,显示间隔为500MS;


一、数码管概述

(1)认识数码管

led数码管(LED Segment Displays)由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,cdefq,dp来表示:

(2)数码管的工作原理

当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样了。如:显示一个“2”字,那么应当是a亮b亮g亮e亮d亮f不亮c不亮dp不亮。小尺寸数码管的显示笔画常用一个发光二极管组成,而大尺寸的数码管由二个或多个发光二极管组成。发光二极管的阳极连接到一起连接到电源正极的称为共阳数码管,发光二极管的阴极连接到一起连接到电源负极的称为共阴数码管。常用LED数码管显示的数字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。(蓝桥杯单片机上使用的是:两个四位一体的共阳极数码管

(3)LED数码管驱动方式-静态显示

  • LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类。
  • 静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/0端口多,如驱动5个数码管静态显示则需要5x8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。

二、数码管电路图

(非实际,便于理解版本)

三、静态数码管显示例程

(1)例程1:数码管显示某一位(某一杠)。以点亮8段数码管最上面的横杠为例。

//头文件声明区域
#include <STC15F2K60S2.H>


//程序主体
void main()
{
	
	P2 = 0XA0;P0 = OX00;P2 = 0X80;P0 = 0XFF;//初始化程序
	P2 = 0XC0;P0 = 0X01;P2 = 0XFF;P0 = 0XFF;//打开第一个数码管程序
	
    P0 = 0XFE;//1111 1110
	while(1);
	
}

(2)例程2:数码管的8个段依次点亮(其他保持熄灭)

//头文件声明区域
#include <STC15F2K60S2.H>
#include<intrins.h>
//变量声明区域
unsigned char SEG = 0;

//函数定义区域
void Delay(unsigned int time)		//@11.0592MHz
{
	unsigned char i, j;
 while(time--)
 {
	 	_nop_();
	i = 2;
	j = 199;
	do
	{
		while (--j);
	} while (--i);
 }

}

}
void SEG_Left(void)
{
	for(SEG = 0;SEG < 8;SEG++)
	{
		
		P0 = ~(0x01<<i);
		Delay(500);
	}
	
}


//程序主体
void main()
{
	
	P2 = 0XA0;P0 = OX00;P2 = 0X80;P0 = 0XFF;//初始化程序
	P2 = 0XC0;P0 = 0X01;P2 = 0XFF;P0 = 0XFF;//打开第一个数码管程序

    while(1)
    {
        SEG_Left();
    }
	
	
}

(3)例程3:数码管显示某一个数值。(本例以点亮8段数码管显示数组“1”为例)

//头文件声明区域
#include <STC15F2K60S2.H>

//程序主体
void main()
{
	
	P2 = 0XA0;P0 = OX00;P2 = 0X80;P0 = 0XFF;//初始化程序
	P2 = 0XC0;P0 = 0X01;P2 = 0XFF;P0 = 0XFF;//打开第一个数码管程序

	P0 = 0XF9;
	while(1);
	
}

(4)例程4:数码管依次显示0-9、-、全部熄灭,显示间隔为500MS;

#include <STC15F2K60S2.H>

void main()
{
	
	P2 = 0XA0;P0 = OX00;P2 = 0X80;P0 = 0XFF;//初始化程序
	P2 = 0XC0;P0 = 0X01;P2 = 0XFF;P0 = 0XFF;//打开第一个数码管程序
	
	while(1)
	{
		P0 = 0XC0; Delay(500);//0
		P0 = 0XF9; Delay(500);//1
		P0 = 0XA4; Delay(500);//2
		P0 = 0XB0; Delay(500);//3
		P0 = 0X99; Delay(500);//4
		P0 = 0X92; Delay(500);//5
		P0 = 0X82; Delay(500);//6
		P0 = 0XF8; Delay(500);//7
		P0 = 0X80; Delay(500);//8
		P0 = 0X90; Delay(500);//9
		P0 = 0XBF; Delay(500);//-
		P0 = 0XFF; Delay(500);//全部熄灭
						
	}
	
	
}

  • 20
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值