您好!欢迎光临烜芯微科技品牌官网!

深圳市烜芯微科技有限公司

ShenZhen XuanXinWei Technoligy Co.,Ltd
二极管、三极管、MOS管、桥堆

全国服务热线:18923864027

  • 热门关键词:
  • 桥堆
  • 场效应管
  • 三极管
  • 二极管
  • 数码管的基本构造,显示原理与驱动方式解析
    • 发布时间:2024-08-22 16:56:22
    • 来源:
    • 阅读次数:
    数码管的基本构造,显示原理与驱动方式解析
    一. 什么是数码管
    LED数码管(LED Segment Displays)是由8个发光二极管构成,并按照一定的图形及排列封装在一起的显示器件。 其中7个LED构成7笔字形,1个LED构成小数点(也被称为为八段数码管)。
    常用的数码管位数有1,2,3,4,5,6,8,10位等等,颜色有红,绿,蓝,黄等几种。 了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。
    二. 数码管基本构造
    LED数码管有两大类,一类是共阴极接法,另一类是共阳极接法,共阴极就是8段的显示字码共用一个电源的负极,是高电平点亮,共阳极就是7段的显示字码共用一个电源的正极,是低电平点亮。 只要控制其中各段LED的亮灭即可显示相应的数字、字母或符号。
    共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已,共阴为所有的LED负极接在一起,共阳为为所有的LED正极接在一起。 如下图为1位数码管的共阴极和共阳极原理图:
    数码管构造 显示原理 驱动方式
    三、数码管显示原理
    要是数码管显示数字,有两个条件:1.是要在VT端加合适的电源(一般每颗LED还需串上合适的电阻,起限流作用); 2.要使(a,b,c,d,e,f,g,dp)端接低电平或“0”电平。 这样才能显示的。
    例如下图的共阴极数码管,须在VT端接上地端,(a,b,c,d,e,f,g,dp)端接到单片机的引脚上; 如果要使其中一个LED亮时,对应的单片机引脚输出高电平,即可点亮LED灯。
    数码管构造 显示原理 驱动方式
    共阴极LED数码管的内部结构原理图
    能够点亮数码管后,就可以通过单片机控制数码管显示数字或字母。 为了控制方便,我们将数码管的a~dp引脚依次连接单片机的P10-P17引脚,如图:
    数码管构造 显示原理 驱动方式
    我们对数码管所要显示的每个数字和字母进行编码,然后在编程时,将编码放在一个数组上,需要显示什么数字或者字母,从数组里面提取相应的编码就可显示所要显示的字符了。
    如图,要显示数字“5”时,编码为0x6D。 如果数码管为共阳极,只需要对共阴极的编码做一个取反操作即可。
    数码管构造 显示原理 驱动方式
    四. 数码管驱动方式
    根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类。
    1.静态驱动方式
    led静态显示时,其公共端接地(共阴极)或接电源(共阳极),各段选线分别与I/O口接线相连。 要显示字符,直接在I/O线发送相应的字段码。
    优点: 静态显示结构简单,显示方便,要显示某个字符直接在IO线上发送相应的字段码
    缺点: 一根数码管需要8根IO线,数码管比较多时候,非常占用IO线。
    2.动态驱动方式
    动态驱动方式是将所有的数码管的段选线并接在一起,用一个IO接口控制,公共端并不是直接接地(共阴极)或者电源(共阳极),而是通过相应的IO接口控制。
    以共阳极为例假设4个数码管工作过程为,如图:
    数码管构造 显示原理 驱动方式
    四位数码管动态驱动方式连接图
    每个数码管的公共端与单片机的一个IO相连,第一步使最右边一个数码管的公共端为1(P21),其余数码管公共端为0,同时在(a,b,c,d,e,f,g,dp)P0端上发送右边第一个数码管的字段码,这时候只有右边的第一个数码管显示,其余不显示;
    第二步使右边第二个数码管的公共端(P23)为1,其余的公共端为0,同时在(a,b,c,d,e,f,g,dp)P0端上发送右边第二个数码管的字段码,这时候,只有右边第二个数码管显示,其余不显示;
    以此类推,直到最后一个,这样子4个数码管轮流显示相应的信息,一遍显示完毕,隔一段时间,又这样循环显示。
    从计算机角度,每个数码管隔一段时间才显示一次,但是由于人的视觉暂留效应,只要隔离时间足够短,循环的周期足够长,美妙达到24次以上,看起来数码管就一直稳定显示了,这就是动态显示原理。
    五. 八位数码管动态驱动例程
    以八位共阴极数码管,动态驱动的方式为例:
    #include<reg51.h>
     
     
     
     
    //--定义使用的IO口--//
    #define GPIO_DIG   P0  //段选
    #define GPIO_PLACE P1  //位选
     
     
     
     
    //--定义全局变量--//
    unsigned char code DIG_PLACE[8] = {
    0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选控制   查表的方法控制
    unsigned char code DIG_CODE[17] = {
    0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
    0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
    //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
    unsigned char DisplayData[8];
    //用来存放要显示的8位数的值
     
     
     
     
    //--声明全局函数--//
    void DigDisplay(); //动态显示函数
    /*******************************************************************************
    * 函 数 名         : main
    * 函数功能       : 主函数
    * 输    入         : 无
    * 输    出         : 无
    *******************************************************************************/
    void main(void)
    {
      unsigned char i;
     
     
     
     
      for(i=0; i<8; i++)
      {
        DisplayData[i] = DIG_CODE[i];  
      }
      while(1)
      {
        DigDisplay();
      }        
    }
     
     
     
     
    /*******************************************************************************
    * 函 数 名         : DigDisplay
    * 函数功能       : 使用数码管显示
    * 输    入         : 无
    * 输    出         : 无
    *******************************************************************************/
    void DigDisplay()
    {
      unsigned char i;
      unsigned int j;
     
     
     
     
      for(i=0; i<8; i++)
      {
        GPIO_PLACE = DIG_PLACE[i];   //发送位选
        GPIO_DIG = DisplayData[i];     //发送段码
        j = 10;             //扫描间隔时间设定
        while(j--);  
        GPIO_DIG = 0x00;//消隐
      }
     
    〈烜芯微/XXW〉专业制造二极管,三极管,MOS管,桥堆等,20年,工厂直销省20%,上万家电路电器生产企业选用,专业的工程师帮您稳定好每一批产品,如果您有遇到什么需要帮助解决的,可以直接联系下方的联系号码或加QQ/微信,由我们的销售经理给您精准的报价以及产品介绍
     
    联系号码:18923864027(同微信)
    QQ:709211280
    相关阅读