51单片机的静态和动态数码管的显示

发布者:鑫森淼焱最新更新时间:2022-04-23 来源: eefocus关键字:51单片机  静态  动态  数码管 手机看文章 扫描二维码
随时随地手机看文章

一、数码管显示原理:


数码管其实就是有8个LED构成,分为a、b、c、d、e、f、g、dp,而数码管又分为共阴极(左边,高电平点亮)和共阳极(右边,低电平点亮),点亮对应的LED即可显示对应的数字,共阴极编码表如下:


0x3f  , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d 、0x7d , 0x07 , 0x7f  , 0x6f , 0x77 , 0x7c,0x39 , 0x5e , 0x79 , 0x71 , 0x00


分别对应0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,而0x00则不显示。


注意:比如显示0,则要abcdef都为1,即是0011 1111,转为16进制就是0x3f,依次类推

为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段。因此为LED显示器提供的编码正好是一个字节。LED显示器工作方式有两种:静态显示方式和动态显示方式。


二、静态显示原理


静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。

八位数码管及74HC573原理图

D74HC138译码器原理图


3、74H573锁存器的使用(控制段选)

OE为使能端,当他为低电平的时候, 锁存器开始工作

VCC和GND为电源和地端

LE为锁存端,当LE为高电平的时候,Q0~Q7都跟D0~D7状态一样,处于直连状态。

当LE为低电平的时候,Q0~Q7都锁存数据,无论D0~D7怎么变化,Q0~Q7都保持锁存之前的那个状态。


代码如下:


sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

 

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值

 

void main()

{

LSA=0;

LSB=0;

LSC=0; //控制38译码器的Y0输出低电平

P0=smgduan[0];

while(1);

}


三、动态数码管


动态显示的特点是将所有数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。


3-8译码器---D74HC138(控制位选)

74HC138D 是一种三通道输入、八通道输出译码器,简称为3-8译码器,主要应用于消费类电子产品

从真值表可以看出:

image.png

反过来的规律其实就是八进制,000对应Y0,001对应Y1,010对应Y2,依次类推,这样就能实现对应数码管的位选操作。


代码如下:


sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

 

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值

 

/*******************************************************************************

* 函 数 名         : delay

* 函数功能    : 延时函数,i=1时,大约延时10us

*******************************************************************************/

void delay(u16 i)

{

while(i--);

}

 

/*******************************************************************************

* 函 数 名         : DigDisplay

* 函数功能    : 数码管动态扫描函数,循环扫描8个数码管显示

*******************************************************************************/

void DigDisplay()

{

u8 i;

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

{

switch(i) //位选,选择点亮的数码管,

{

case(0):

LSA=0;LSB=0;LSC=0; break;//显示第0位

case(1):

LSA=1;LSB=0;LSC=0; break;//显示第1位

case(2):

LSA=0;LSB=1;LSC=0; break;//显示第2位

case(3):

LSA=1;LSB=1;LSC=0; break;//显示第3位

case(4):

LSA=0;LSB=0;LSC=1; break;//显示第4位

case(5):

LSA=1;LSB=0;LSC=1; break;//显示第5位

case(6):

LSA=0;LSB=1;LSC=1; break;//显示第6位

case(7):

LSA=1;LSB=1;LSC=1; break;//显示第7位

}

P0=smgduan[i];//发送段码

delay(100); //间隔一段时间扫描

P0=0x00;//消隐

}

}

 

void main()

{

while(1)

{

DigDisplay();  //数码管显示函数

}

}

关键字:51单片机  静态  动态  数码管 引用地址:51单片机的静态和动态数码管的显示

上一篇:C51/C52单片机的串口原理及参考代码
下一篇:C51/C52单片机的中断(EXTI)介绍及实现(二)

推荐阅读最新更新时间:2024-11-11 12:42

51单片机数字时钟仿真(LCD1602液晶显示)+源程序+电路原理图
下面是51单片机数字时钟程序: #include AT89X52.h #define DSbus P0 #define LCDbus P1 //定义DS12C887和LCD的控制线 sbit DS_CS = P2^7; //引脚13,片选信号输入,低电平有效。 sbit DS_AS = P2^4; //引脚14,地址选通输入。 sbit DS_RW = P2^5; //引脚15,读/写输入。 sbit DS_DS = P2^6; //引脚17,数据选通或读输入。 sbit LCD_RS=P2^0; sbit LCD_EN=P2^2; //时间变量定义 unsigned char Counter; u
[单片机]
<font color='red'>51单片机</font>数字时钟仿真(LCD1602液晶显示)+源程序+电路原理图
51单片机汇编学习例程(1)——KEY篇
1.ASM1_KEY:按键控制LED亮灭,3种情况 /** ****************************************************************************** * @file asm.asm * @author Alex——小白 * @version V1.0 * @date 2019.9.1 * @brief 3种方法实现KEY to LED ************************************************************************
[单片机]
<font color='red'>51单片机</font>汇编学习例程(1)——KEY篇
普通51单片机驱动3.5寸TFT的应用实例
目前市场流行的3.5寸屏基本上都是只内置了驱动器,而不带控制器,这样给用户的使用造成了一些难度。基本上很多朋友在用彩屏时选择一些带LCD控制器的ARM7或ARM9去开发,对于不会ARM开发的朋友来说,只使用普通MCU,这样可以选择的3.5寸TFT模块,就很难找到了。 本文就是基于市场上一款比较使用的3.5寸TFT模块编写的,用户只需要帮该TFT模块当作普通的单色液晶的开发思路来使用,就可以很容易去编程。 一、 硬件选择 1、 MCU:AT89S51 2、 开发编译环境:Keil C51 3、 3.5寸TFT模块型号:MzT35C1 二、 TFT模块基本性能: 1、基本参数 模块结构: 内置控制器 屏幕大
[单片机]
51单片机超声波测距程序代码
51单片机超声波测距程序代码 /超声波模块ME007显示程序 //晶振=8M //MCU=STC10F04XE //P0.0-P0.6共阳数码管引脚 //Trig = P1^0 //Echo = P3^2 #include reg52.h //包括一个52标准内核的头文件 #define uchar unsigned char //定义一下方便使用 #define uint unsigned int #define ulong unsigned long //*********************************************** sfr CLK_DIV = 0x9
[单片机]
51单片机定时器产生方波
使用单片机定时器在P1.0口产生200Hz方波程序 #include reg52.h void main() { P1^0 = 0; // 清P0口 ///////// TMOD = 0x00; // T0使用定时模式,工作模式0,无门控位 TH0 = 0x60; // 为T0填入初值,定时时间5ms TL0 = 0x78; TR0 = 1; // 启动T0 ET0 = 1; // 允许定时器0中断 EA = 1; // CPU开放中断 while(1); // 循环等待 } void timer0_in
[单片机]
3X4键盘4位动态移位LED显示程序
;------------------------------------------------------- ;程序名称:3X4矩阵键盘4位动态移位 LED 显示程序 * ;实现功能:扫描出键盘的键值并在4位LED上分别显示 * ;MCU: STC89C58RD+ 支持ISP功能 * ;p0口接LED段码 p2.4(第一位LED片选)~~p2.0(第4位片选)* ;p1.6 p1.5 p1.4 p1.3 * ; p1.2 * ; 3 X 4矩阵 p1.1 * ; p1.0 * ;------------------------------------------------------- org 0000H mov 30h,#
[单片机]
AT89C2051单片机对步进电机驱动器系统的设计
AT89C2051将控制脉冲从P1口的P1.4~P1.7输出,经74LS14反相后进入9014,经9014放大后控制光电开关,光电隔离后,由功率管TIP122将脉冲信号进行电压和电流放大,驱动步进电机的各相绕组。使步进电机随着不同的脉冲信号分别作正转、反转、加速、减速和停止等动作。图中L1为步进电机的一相绕组。AT89C2051选用频率22MHz的晶振,选用较高晶振的目的是为了在方式2下尽量减小AT89C2051对上位机脉冲信号周期的影响。 图中的RL1~RL4为绕组内阻,50Ω电阻是一外接电阻,起限流作用,也是一个改善回路时间常数的元件。D1~D4为续流二极管,使电机绕组产生的反电动势通过续流二极管(D1~D4)而衰减掉,
[单片机]
AT89C20<font color='red'>51单片机</font>对步进电机驱动器系统的设计
51单片机中断系统介绍
中断系统是为了使CPU具有对外界紧急事件的实时处理能力而设置的。 当中央处理器CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。实现这种功能的部件称为中断系统,请示CPU中断的请求源称为中断源。 微型机的中断系统一般允许多个中断源,当几个中断同时向CPU请求中断,要求为他服务的时候,这就存在了CPU优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规定每个中断源有一个优先级别。CPU总是先响应优先级别最高的终端请求。 当CPU正在处理一个中断源
[单片机]
<font color='red'>51单片机</font>中断系统介绍
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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