数码管显示原理及应用实现

视频链接
对应课程:P11-P12

数码管显示原理

  1. 我们先看一下一个数码管是如何亮起来的。数码管内部电路如图所示:

    为了封装统一,生产商为单位数码管都封装了10个引脚,其中第3个和第8个引脚是连接在一起的。显示一个8字需要七个小段,另外还有一个小数点,所以其内部共有8个小的发光二极管,最后还有一个公共端。

    公共端可分为共阳极和共阴极,其内部原理图如图所示:

    对于共阴极数码而言,其8个发光二极管的阴极在数码管内部全部连接在一起,所以称为”共阴“,它们的阳极是独立的。当我们给数码管的任一个阳极加上一个高电平时,对应的发光二极管就点亮了。

    例如如果想让数码管显示”0“,只需要让”g“"dp"引脚送入低电平,而其余引脚全部输入高电平。

    共阳极数码同理,其8个发光二极管的阳极在数码管内部全部连接在一起,所以称为”共阳“,它们的阴极是独立的。当我们给数码管的任一个阴极加上一个低电平时,对应的发光二极管就点亮了。

    数码管内部发光二极管要想点亮,需要5mA以上的电流,但电流也不可过大,否则会烧毁发光二极管。由于单片机的I/O口送不出如此大的电流,所以数码管与单片机连接时需要加上驱动电路。

  2. 多位一体数码管

    以四位一体的数码管为例,其内部原理图如图所示:

    它们内部的公共端是独立的,而负责显示什么数字的段线全部是连接在一起的,独立的公共端可以控制多位一体中的哪一位数码管点亮,而连接在一起的段线可知控制这个能点亮数码管亮什么数字。

    通常我们把公共端叫做位选线

    连接在一起的段线叫做段选线

    有了这两个线,通过单片机及外部电路就可以控制任意的数码管显示任意的数字了。

数码管静态显示

先来看巫妖王V2版数码管原理图:

本实验板使用的数码管为共阴极,COM为公共端,若想让LED6亮,则赋LED6为0其余为1,此为”选中“,若想LED6显示1,则要给阳码:0110 0000 (1是亮 0是灭)

  • 74LS138(38译码器)

    LED1—LED8连接38译码器的输出端,即通过38译码器可实现P22、P23、P24这三个I/O口来控制LED1—LED8的输出。

  • 74HC573(锁存器)

    OE(使能端,低电平有效)

    LE连接VCC(跳帽连接)

    这样锁存器的输入端连接单片机的P0口,实现D0-D7的数据原封不动的送入Q0-Q7.

代码

先介绍C51数组

  • 数组:把相同类型的一系列数据统一编制到某一个组别中,可以通过数组名+索引号简单快捷的操作大量数据

  • 定义和引用:

    int x[3]; //定义一组变量(3个)
    int x[]={1,2,3};//定义一组变量并初始化x[0]       //引用数组的第0个变量
    x[1]        //引用数组的第1个变量
    x[2]        //引用数组的第2个变量
    引用x[3]时,数组越界,读出的数值不确定,应避免这种操作
    
  • Switch语句

    switch(变量)
    {case 常量1:语句体1;break;case 常量2:语句体2;break;case 常量3:语句体3;break;case 常量4:语句体4;break;...default:语句体x;break;
    }
    

    将变量与case后的各个常量对比,若有相等,则执行相应的语句体。若没有一个相等,则执行default后的语句体(default可以不写)

完整代码如下:

#include <REGX52.H>    //和#include <REG52.H>的区别//段位表(共阴极数码管编码,对于的符号为0,1,2,3,4,5,7,8,9)
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//数码管显示子函数
void Nixie(unsigned char Location,Number)
{switch(Location)       //位码输出,通过38译码器进而实现数码管的选中{case 1:P2_4=1;P2_3=1;P2_2=1;break;case 2:P2_4=1;P2_3=1;P2_2=0;break;case 3:P2_4=1;P2_3=0;P2_2=1;break;case 4:P2_4=1;P2_3=0;P2_2=0;break;case 5:P2_4=0;P2_3=1;P2_2=1;break;case 6:P2_4=0;P2_3=1;P2_2=0;break;case 7:P2_4=0;P2_3=0;P2_2=1;break;case 8:P2_4=0;P2_3=0;P2_2=0;break;}P0=NixieTable[Number];    //段码输出
}                                               void main()
{while(1){Nixie(3,0); //在第3个数码管位置显示0}
}
/*
当P0等于0x3f,换算成2进制为 0011 1111
P0.0是低位,P0.7是高位,则P0.0-P0.7:1111 1100
由于是共阴极连接,1是亮,0是灭,则g,dp不亮,其余亮,显示为数字0
*/

数码管动态显示

数码管驱动方式通常有两种:

  • 单片机直接扫描:硬件设备简单,但会耗费大量的单片机CPU时间

  • 专用驱动芯片:内部自带显存、扫描电路,单片机只需告诉它显示什么即可

数码管动态扫描,其实是轮流向各个数码管送出字形码和相应的位选,利用发光管的余晖和人眼视觉暂留作用,使得人的感觉好像数码管同时都在显示,实际上多位数码管是一位一位轮流显示的,只是轮流的速度非常快,人眼无法分辨出来。

#include <REGX52.H>    //和#include <REG52.H>的区别//段位表(共阴极数码管编码,对于的符号为0,1,2,3,4,5,7,8,9)
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//延时子函数
void Delay1ms(unsigned int xms)     //@12.000MHz
{while(xms--){unsigned char i, j;i = 2;j = 239;do{while (--j);} while (--i);}
}
//数码管显示子函数
void Nixie(unsigned char Location,Number)
{switch(Location)       //位码输出,通过38译码器进而实现数码管的选中{case 1:P2_4=1;P2_3=1;P2_2=1;break;case 2:P2_4=1;P2_3=1;P2_2=0;break;case 3:P2_4=1;P2_3=0;P2_2=1;break;case 4:P2_4=1;P2_3=0;P2_2=0;break;case 5:P2_4=0;P2_3=1;P2_2=1;break;case 6:P2_4=0;P2_3=1;P2_2=0;break;case 7:P2_4=0;P2_3=0;P2_2=1;break;case 8:P2_4=0;P2_3=0;P2_2=0;break;}P0=NixieTable[Number];    //段码输出 Delay1ms(1);    //P0=0x00;        //消影
}                                               void main()
{while(1){Nixie(1,0); //八个数码管依次显示为01234567Nixie(2,1); Nixie(3,2); Nixie(4,3); Nixie(5,4);Nixie(6,5);Nixie(7,6); Nixie(8,7); }
}  

二、数码管显示原理及应用实现相关推荐

  1. STC51入门笔记(郭天祥C语言)---第三节:数码管显示原理及应用实现

    这里是引用 声明:本篇文章只是个人知识盲区.知识弱点.重点部分的归纳总结,望各位大佬不喜勿喷.梳理顺序是按照书籍的实际顺序梳理,转载请注明出处. 作者:sumjess 一.数码管显示原理 我们先来看几 ...

  2. Arduino:数码管显示原理详解和Proteus仿真实验

    Arduino:数码管显示原理详解和Proteus仿真实验 Proteus仿真 数码管介绍 数码管是半导体发光元件,其基本单元是发光二极管.根据段数,数码管分为七段管和八段管. 八段管比七段管还多一个 ...

  3. 数码管显示原理:共阴极和共阳极的区别,静态显示程序。

    数码管显示原理:共阴与共阳 LED发光原理是PN结光电二极管将电能转化为光能的结果.当半导体芯片两端加正反向电压时,当电子从n区域注入p区域时,它们与p区的空穴结合并释放能量,这些能量以光子的形式发射 ...

  4. 51单片机按键值显示在数码管上,数码管亮度控制,数码管显示原理

    项目场景: 51单片机按下按键在数码管上显示相应的值 问题描述 平常按键检测程序,按下延时消抖,记录一个数字,再按下另一个记录一个数字,然后在一位数码管上显示,就出现了问题.数码管一直显示0 . 下面 ...

  5. 数码管显示原理与驱动方式

    目录 一.数码管内部结构 二.数码管的显示方式 三.数码管显示编程思想 一.数码管内部结构 1.内部结构有八个发光二极管,一个8字只需要显示7段,但是有一个小数点,dp,所以有八个发光二极管. 2.单 ...

  6. python数码管绘制原理_Micropython入门四位数码管显示原理

    原理非常简单,控制各个针脚的高低电平来显示数字,这里我用的是共阳的数码管.不过有一个问题,我第一次显示的时候代码输入数字是9.876不过数码管显示9.875,刚开始我以为代码错了,仔细检查了几遍没有问 ...

  7. 新手必看 四位数码管显示原理

    原理非常简单,控制各个针脚的高低电平来显示数字,这里我用的是共阳的数码管.不过有一个问题,我第一次显示的时候代码输入数字是9.876不过数码管显示9.875,刚开始我以为代码错了,仔细检查了几遍没有问 ...

  8. 共阳数码管段码表_C51编程7数码管显示原理

    如果将单片机的比喻计算的主机,而按键相当于电脑的输入设备(键盘或者鼠标),那么LED灯可以作为输出设备的显示器:如果8位数据,使用8个LED显示数据表示,相当于是以二进制显示数据,非常不利于阅读. 为 ...

  9. 基于51单片机数码管显示

    基于51单片机数码管显示 ## 数码管显示原理 数码管(LED Segment Displays)由多个发光二极管封装在一起组成"8"字型的器件,引线已在内部连接完成,只需引出它们 ...

最新文章

  1. 微软表示Edge的性能更优于Chrome和Firefox
  2. 配置linux终端主题需要密码,Mac/Ubuntu下终端色彩主题设置
  3. mos管开关电路_MOS管的知识,看这一篇就可以了
  4. 百度危矣:乱评程苓峰《360的章鱼手要抢谁家饭碗?》
  5. 30K程序员的简述:如何成为高级开发人员
  6. 排序 np_P问题、NP问题、NP完全问题和NP难问题理解
  7. js $.ajax stop,jQuery.ajaxStop() 函数详解
  8. Mysql对用户操作加审计功能——高级版
  9. python获取linux本机IP
  10. 99乘法表c语言显示坐标,C语言打印九九乘法表
  11. WGS84 UTM 坐标系及UTM投影分带标准
  12. 金融计量经济学中使用R构建置信区间
  13. 敏捷史话系列(一)| 用一半的时间做两倍的事——Jeff Sutherland
  14. coreldraw x4被禁用怎么解决及不能使用序列号警告办法
  15. winfrom给word加水印
  16. 程序模板(20210603笔记)
  17. matlab图像分类器,一个用BoW|Pyramid BoW+SVM进行图像分类的Matlab Demo
  18. Linux启动流程之ROM-CODE
  19. android+自定义键盘之汉字,android自定义键盘(解决弹出提示的字体颜色问题)
  20. SIZE SSIZE

热门文章

  1. 在JSP中连接数据库及使用
  2. 支付宝 微信个人收款码
  3. 太为难我了,阿里面试了7轮...
  4. 22. 将文件映射到内存
  5. “SEO是什么意思?”Kyw的通俗回答
  6. 4-3 Coursera吴恩达《卷积神经网络》 第三周课程笔记-目标检测
  7. Java线程池的知识
  8. vue-cli生成的模板各个文件详解(转)
  9. 港科夜闻|香港科技大学(广州)与广东联通签署多方位战略合作协议
  10. php 用count 变量,countif函数的使用方法 PHP的可变变量名的使用方法分享