51单片机数码管静态显示和动态显示原理及实验 夜猫子

发布者:创新驿站最新更新时间:2023-01-12 来源: zhihu关键字:51单片机  数码管  静态显示  动态显示 手机看文章 扫描二维码
随时随地手机看文章

数码管

多位数码管,即是两个或两个以上单个数码管并列集中在一起形成一体的数码管。当多位一体时,它们内部的公共端是独立的,而负责显示什么数字的段线全部是连接在一起的,独立的公共端可以控制多位一体中的哪一位数码管点亮,而连接在一起的段线可以控制这个能点亮数码管亮什么数字,通常我们把公共端叫做“位选线”,连接在一起的段线叫做“段选线”有了这两个线后,通过单片机及外部驱动电路就可以控制任意的数码管显示。一般一位数码管有10个引脚,二位数码管也是10个引脚,四位数码管是12个引脚。

为了更方便区分段选和位选,请看下原理图:

如图为两个4位一体的数码管,可以看到与8个com相连的是两个数码管的位选,位选与引脚相连,所以位选控制那个灯亮。段选可以看到a,b,,,,,g并联到一起。因为是并联,所以点亮的数码管显示的数字相同。


共阴极数码管和共阳极数码管

图a数码管管脚图,图b是共阳极数码管,图c是共阴极数码管。

由图b可知共阳极数码管阳极连接在一起,接高电平,阴极对应的各段分别控制。比如要想显示1,则阴极对应的bc段低电平,其它接高电平,即可显示。

由图C可知,共阴极数码管将各个二极管的阴极连接在一起(阴极为低电平),而阳极控制各段,比如要显示1,则bc为高电平,其它各段低电平即可显示。


共阳极和共阴极数码管对照表:

共阳极数码管对照表(位选位高电平,各段选低电平控制数字显示)


uchar code table[]={

0xc0,//0

0xf9,//1

0xa4,//2

0xb0,//3

0x99,//4

0x92,//5

0x82,//6

0xf8,//7

0x80,//8

0x90,//9

0x88,//A

0x83,//B

0xc6,//C

0xa1,//D

0x86,//E

0x8e, //F

0x8c, //P

0xc1,//U

0x91,//Y

0x7c,//L

0x00,//全亮

0xff  //熄灭


共阴极数码管对照表(位选为低电平,段选为高电平)


uchar code leddata[]={

0x3F,  //"0"

    0x06,  //"1"

    0x5B,  //"2"

    0x4F,  //"3"

    0x66,  //"4"

    0x6D,  //"5"

    0x7D,  //"6"

    0x07,  //"7"

    0x7F,  //"8"

    0x6F,  //"9"

    0x77,  //"A"

    0x7C,  //"B"

    0x39,  //"C"

    0x5E,  //"D"

    0x79,  //"E"

    0x71,  //"F"

    0x76,  //"H"

    0x38,  //"L"

    0x37,  //"n"

    0x3E,  //"u"

    0x73,  //"P"

    0x5C,  //"o"

    0x40,  //"-"

    0x00  //熄灭

};


数码管显示原理

1.静态显示

多位数码管依然可以静态显示,但是显示时要么只显示一位数码管,否则一体的多位同时显示必须时显示相同内容。当多位数码管应用于某一系统时,它们的“位选”是可独立控制的,而“段选”是连接在一起的,我们可以通过位选信号控制哪几个数码管亮,而在同一时刻,位选选通的所有数码管上显示的数字始终都是一样的,因为它们的段选是连接在一起的,所以送入所有数码管的段选的信号都是相同的,那么他们显示的数字必定一样。(换言之,你可以通过位选控制那个数码管亮,但是亮的同时显示的数字必定相同)

2.动态显示

位选控制亮不亮,而段选控制显示数字,那怎样显示不同的数字呢?这就利用了人体肉眼观察的能力。

举个例子,假设段选1控制第一位数码管数字显示1,那么在显示第二个数码管是段选控制数码管显示2,而位选控制灯第二位数码管亮,第一位数码管灭。但是给人的感受是第一位数码管并没有灭(实际已经灭了),因为时间太短人体肉眼无法识别。这样就会发现数码管动态显示是向左或向右一位一位点亮。

静态数码管工作原理

静态数码管原理图:

因为共阳极数码管,所以位选接的是高电平,要想正常显示通过控制低电平来控制段选即可。


静态数码管代码实现:

#include

#include

typedef unsigned char u8; //重定义全局字符型变量

typedef unsigned int u16; //重定义全局整型变量

u8 code table[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

/*利用数组引用数码表(注次数码表为阴极数码表,因为是共阳极数码管,本应使用刚阳极数码管,

为了方便直接将共阴极数码表取反来使用)。code是将数组从ram调到ROM节省空间*/


/*延时函数*/

void dealy(u16 i)

{

while(i--);

}


void main()

{ int i=0;

  for(i=0;i<9;i++){

  P0=~table[i];//取反是因为使用的是阴极数码表,而取反得阳极数码表

  dealy(50000);

  }

  //p0=~table[0];  该写法是固定显示数字不变的写法,~table[0]显示的就为0

 

}

动态数码管工作原理

如图,位选的控制通过连接J16的管脚连接138译码器,利用138译码器控制位选。段选不是有单片机IO直接驱动,而是通过连接74HC25芯片连接管脚,利用芯片来实现段选。

因为是共阴极数码管,所以位选应接低电平,段选接高电平时,数码管正常显示。


译码器工作原理

可以有真值表观察,当使能控制都为低电平的情况下,A0A1A2输入不同电平控制输出。

例,A0A1A2为000(二进制为0,A为低位,C为高位)对应Y0就输出低电平,为001(二进制为1)输出Y1就位高电平。所以就相当于二进制十进制,十进制对应输出。

74HC25看自己的原理图即可,不再阐述。


动态数码管代码实现

#include

#include

typedef unsigned char u8; //重定义全局字符型变量

typedef unsigned int u16; //重定义全局整型变量


u8 code table[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

/*利用数组引用数码表(该数码管是共阴极数码管,所以使用共阴极数码表)。code是将数组从ram调到ROM节省空间*/


sbit LSA=P2^2;    //ABC分别连接单片机的P2^2,P2^3,P2^4管脚

sbit LSB=P2^3;

sbit LSC=P2^4;


/*延时函数*/

void dealy(u16 i)

{

while(i--);

}


/*动态显示函数

*参数说明

*ABC分别为138译码器的输入端,通过控制输入端来控制输出端的高低电平,从而实现对位选的控制

且A为二进制中的低位,C为高位*/

void Display()

{  u16 i=0;

for(i=0;i<8;i++)

{

 switch(i)

 {

 case 0:LSA=0;LSB=0;LSC=0;break; //利用138译码器来控制位选,当ABC都等于0时,y0为低电平,其余为高电平

 case 1:LSA=1;LSB=0;LSC=0;break; //Y1输出低电平

 case 2:LSA=0;LSB=1;LSC=0;break; //Y2输出低电平

 case 3:LSA=1;LSB=1;LSC=0;break; //Y3输出低电平

 case 4:LSA=0;LSB=0;LSC=1;break; //Y4输出低电平

 case 5:LSA=1;LSB=0;LSC=1;break; //Y5输出低电平

 case 6:LSA=0;LSB=1;LSC=1;break; //Y6输出低电平

 case 7:LSA=1;LSB=1;LSC=1;break; //Y7输出低电平

 }

 P0=table[i];  //第i个为低电平决定位选则跳出switch循环,P0提供段选(原理图可以看出)

 dealy(100);  // 短暂的延时,达到肉眼看不到的速度,以达到同时显示效果

 P0=0x00;     //清零,作用为了下一个显示不会产生重影

}

}


void main()

  while(1)

  {

  Display();

  }  


关键字:51单片机  数码管  静态显示  动态显示 引用地址:51单片机数码管静态显示和动态显示原理及实验 夜猫子

上一篇:51单片机独立按键和矩阵按键实现
下一篇:单片机点灯(点亮、闪烁、流水灯)

推荐阅读最新更新时间:2024-11-17 16:52

第6课 数码管静态显示
1、数码管显示原理 数码管是单片机应用系统中常用的一种显示器件,由于其价格低廉、操作简单,而被广泛的应用于各种数字显示系统中,常见的数码管如图1所示。 根据外观的不同,数码管又为分1位数码管、2位数码管、3位数码管、四位数码管等种类,如图2所示。 但不论是几位一体的数码管,其显示原理都是一样的,都是靠内部发光二极管发光来进行显示的。下面我们以1位数码管为例介绍其显示原理。 1、数码管显示的原理 数码管内部的电路如图3所示, 图3 数码管内部电路 图3中,显示一个完整的8字,需要7个小段,外加一个小数点,共8段,分别称为a段、b段、c段、d段、e段、f段、g段、dp段,每段内部都集成了一个发光二
[单片机]
第6课 <font color='red'>数码管</font><font color='red'>静态</font><font color='red'>显示</font>
#51单片机#SPI时序初步认识
SPI,全程Serial Peropheral Interface,译为串行外围设备接口,是一种高速的、全双工的、同步通信总线。 SPI常用于单片机和E2PROM、FLASH、实时时钟、数字信号处理器等器件的通信。SPI通信原理主要是主从方式通信,这种模式通常只有一个主机和一个或多个从机。 标准的SPI有4根线,分别是SSEL、SCLK、MISO、MOSI。 SSEL:从设备片选使能信号。若从设备为低电平使能,则当此引脚拉低后,从设备被选中,主机同被选中的从机进行通信。 SCLK:时钟信号。 由主机产生,类似于I2C中的SCL。 MOSI:主机给从机发送指令或者数据的通道。 MISO:主机读取从机的状态或者
[单片机]
#<font color='red'>51单片机</font>#SPI时序初步认识
基于51单片机的自动测控LED节能照明系统
在全球能源危机凸现的当今社会,LED照明以其绿色环保,高效节能的优势成为当前最具潜力的照明方式之一。LED号称“绿色照明的第四代光源”,目前已开始逐步应用于电信、交通、农业、医学、军事等领域。LED(Light-emitting Diode,发光二极管)是一种固态的半导体组件,能够把电能直接转化为光能。作为一种固体照明光源,LED具有长寿命、高光效、多光色等特性,可在安全低电压下工作,也可连续开关闪断,能实现0%~100%调光。 本文阐述一种基于单片机C8051F020自动测控LED节能照明系统的设计方案。该系统能够对LED灯的发光强度进行调控,当环境光强减弱时自动提高LED的发光强度,当环境光强变强时自动减弱LED灯的发
[单片机]
基于<font color='red'>51单片机</font>的自动测控LED节能照明系统
51单片机基础之定时器中断(二)
TMOD寄存器: 这里讲一下TMOD寄存器,这个寄存器可以选择开启定时器0还是1,还有可以决定定时器以什么方式工作。如图: 代码: #include reg51.h sbit LED=P2^0; typedef unsigned char u8; typedef unsigned int u16; void time1_init(void) { TMOD|=0x10; //TMOD是一个寄存器,用来决定定时器的工作方式,高四位决定定时器1,目前是工作方式1,即16位定时计数。 TH1=0xfc; //定时器高八位 TL1=0x18; //定时器低
[单片机]
<font color='red'>51单片机</font>基础之定时器中断(二)
51单片机选择模拟(AD)量输入接口
在51单片机的设计中经常会接触到模拟量输入,下面为模拟(AD)量输入接口选择源程序。 //-----------------------模拟(AD)量输入接口选择函数声明,变量定义-------------------------------------------------------- #include reg51.h #include intrins.h sbit sel_A = P1^1; sbit sel_B = P1^2; sbit sel_C = P1^3; unsigned char ABC; void timer_set(); //51单片机定时器初始化函数 void coll
[单片机]
AVR单片机学习按键与数码管的程序设计
简介:按键与数码管的程序设计 AVR IO口的输入模式与上拉电阻 选择结构语句与按键的查询方式程序设计 数码管基本原理 扫描方式显示多位数码管 一、输入状态IO寄存器设置 1、DDRx 某一位置0,相应位的IO口被设置为输入 2、PORTx某一位置1,使能对应IO口相应位的上拉电阻 3、PINx的对应位是输入的数据,0或1 选择结构语句 一、关系运算符和关系表达式 小于 小于等于 = 大于 大于或等于== 不等于!= 二、逻辑运算符和逻辑表达式 逻辑与&&逻辑或||逻辑非! 三、if 语句结构 if(表达式1)语句1 else if(表达式2)语句2 else 语句3 四
[单片机]
AVR单片机学习按键与<font color='red'>数码管</font>的程序设计
51单片机学习-按键控制LED
1.按下按键一次亮闪LED灯一次 #include REGX52.H void Delay(unsigned int xms) //@12.000MHz { unsigned char i, j; while(xms) { i = 2; j = 239; do { while (--j); } while (--i); xms--; } } void main() { //P2=0xFE; while(1) {if(P3_1==0) { Delay(20); while(P3_1==0); Delay(20); P2_0
[单片机]
用Proteus学习51单片机之I2C(IIC)总线
在学习单片机的过程中,我常有这样的烦恼:随随便便一个芯片,少则占用三五个IO口,一般的就占用8个,稍微想用多一点芯片吧,老觉得IO口不够用。学串口的时候觉得串口是个好东西,连两条线就够了,现在学到I2C,觉得这也是一个非常好的东西,也是两条线,还能给每个总线上的设备设立地址,简直就是一个小网络了。 I2C总线使用两条线,一条是时钟线,称为SCL,一条是数据线,称为SDA,各个设备就并在总线上,每一个总线上的设备都有一个自己的地址,主机在操作设备的时候,都会先发送一个地址码,告诉被操作机,接下来的命令由它接收。 接下来说一下I2C总线的数据有效性。I2C总线进行数据传送时,要求SCL为高电平时,SDA上的数据必需保持稳定,换言之,当
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved