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

本文介绍了数码管的概述,包括其构造、工作原理以及静态显示的驱动方式。详细讲解了静态数码管显示的四个例程,涉及单个段显示、全段点亮、数值显示和数字序列循环显示。
摘要由CSDN通过智能技术生成

目录

一、数码管概述

(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
    评论
好的,下面为您提供一个51单片机静态数码管计算器的实例代码: ``` #include<reg52.h> #define uchar unsigned char sbit dula=P2^6; sbit wela=P2^7; uchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//数码管显示0~9,A~F uchar num1,num2,result;//记录输入的数值和结果 uchar flag=0;//标志位,用于选择运算符 void delay(uchar z)//延时函数 { uchar x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void display(uchar num)//数码管显示函数 { P0 = table[num]; } void keyscan()//按键扫描函数 { uchar keyvalue = P1; keyvalue &= 0x0f; if(keyvalue != 0x0f) { delay(10); keyvalue = P1; keyvalue &= 0x0f; if(keyvalue != 0x0f) { switch(keyvalue) { case 0x0e: num1=1; display(num1); break;//1键 case 0x0d: num1=2; display(num1); break;//2键 case 0x0b: num1=3; display(num1); break;//3键 case 0x07: num1=4; display(num1); break;//4键 case 0x0e: num1=5; display(num1); break;//5键 case 0x0d: num1=6; display(num1); break;//6键 case 0x0b: num1=7; display(num1); break;//7键 case 0x07: num1=8; display(num1); break;//8键 case 0x0e: num1=9; display(num1); break;//9键 case 0x0d: num1=0; display(num1); break;//0键 case 0x0b: flag=1; break;//加法键 case 0x07: flag=2; break;//减法键 case 0x0e: flag=3; break;//乘法键 case 0x0d: flag=4; break;//除法键 case 0x0b: flag=5; break;//等于键 case 0x07: num1=0; num2=0; result=0; display(num1); break;//清零键 } } } } void main() { while(1) { keyscan(); if(flag != 0) { keyscan(); num2 = num1; num1 = 0; display(num1); switch(flag) { case 1: result = num1 + num2; break;//加法运算 case 2: result = num1 - num2; break;//减法运算 case 3: result = num1 * num2; break;//乘法运算 case 4: result = num1 / num2; break;//除法运算 } display(result); flag = 0; } } } ``` 这是一个简单的静态数码管计算器,通过按键输入数字和运算符,然后在数码管上显示结果。代码中使用了延时函数、数码管显示函数和按键扫描函数等。需要注意的是,这个程序中只能进行加减乘除四则运算,如果需要扩展其他运算,可以自行添加代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值