医疗电子技术网|技术阅读
登录|注册

您现在的位置是:医疗电子技术网 > 技术阅读 > 51单片机之数码管

51单片机之数码管

文章转自:http://blog.csdn.net/fanyuqa/article/details/47395333

数码管内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的亮暗组合成字符。常见数码管有10跟管脚。其中有两个公共端,根据内部发光二极管的接线形式可分为共阴极和共阳极两种。使用时,共阴极数码管公共端接地,共阳极数码管公共端接电源。参照下图:

        通过给每个管脚高低电平即可控制数码管的亮灭。还是举个例子吧,以共阴极数码管为例,让数码管显示数字0,只要个abcdef六个管脚输入一个高电平即可让数码管显示数字0。

         LED显示器工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。通过以上介绍,大家应该清楚数码管显示的基本原理了吧。下面我看些具体的东西。

        下面三个图为开发板的原理图,此开发板用了两个74HC573寄存器可减少单片机io口的使用。锁存器U8用来控制位选,即控制哪个数码管。U9控制段选,即控制数码管显示什么。数码管和锁存器接在单片机的P0口。

接下来看静态显示和动态显示的程序。

1、数码管静态显示:


  • #include<reg52.h>  

  • #define uchar unsigned char  

  • #define uint  unsigned int  

  • sbit dula=P2^6;   //声明U9锁存器的锁存端  

  • sbit wela=P2^7;   //声明U8锁存器的锁存端  

  •   

  • /*   //点亮第一位数码管 

  • void main() 

  •     wela=1;     //打开U8锁存端 

  •     P0=0xfe; //送入位选信号 

  •     wela=0;  //关闭U8锁存端 

  •      

  •     dula=1;     //打开U9锁存端 

  •     P0=0x7f; //送入段选信号 

  •     dula=0;      //关闭U8锁存端 

  •     while(1); 

  • }   */  

  •   

  • //八个数码管循环显示0~F  

  • uchar code table[]={  

  • 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,  

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

  • uchar i;  

  •  <pre name="code" class="cpp">//N毫秒延时  

  • delay_ms(uint ms)        
    {
        uint i,j;
        for(i=ms;i>0;i--)
            for(j=114;j>0;j--);
    }void main(){wela=1;P0=0x00;wela=0;while(1){for(i=0;i<16;i++){dula=1;P0=table[i];dula=0;delay_ms(500);}}}

    2、动态数码管


  • #include<reg52.h>  

  • <pre name="code" class="cpp">#define uchar unsigned char  

  • #define uint  unsigned int  

  • sbit d=P2^6;sbit w=P2^7;


  • delay_ms(uint ms)          

  • {  

  •     uint i,j;  

  •     for(i=ms;i>0;i--)  

  •         for(j=114;j>0;j--);  

  • }  

  • uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 }; //八个数码管显示0~Funsigned char code list[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //数码管的位选void main(){uchar i;while(1){for(i=0;i<8;i++){w=1;P0=list[i]; //循环点亮第i位数码管w=0;d=1;P0=table[i];d=0;delay500ms();} }}/* 程序优化之前的代码
      w=1;P0=list[0]; //点亮第一位数码管w=0;d=1;P0=table[0];d=0;delay500ms();w=1;P0=list[1]; //点亮第二位数码管w=0;d=1;P0=table[1];d=0;delay500ms();w=1;P0=list[2]; //点亮第三位数码管w=0;d=1;P0=table[2];d=0;delay500ms();w=1;P0=list[3]; //点亮第四位数码管w=0;d=1;P0=table[3];d=0;delay500ms();w=1;P0=list[4]; //点亮第五位数码管w=0;d=1;P0=table[4];d=0;delay500ms();w=1;P0=list[5]; //点亮第六位数码管w=0;d=1;P0=table[5];d=0;delay500ms();w=1;P0=list[6]; //点亮第七位数码管w=0;d=1;P0=table[6];d=0;delay500ms();w=1;P0=list[7]; //点亮第八位数码管w=0;d=1;P0=table[7];d=0;delay500ms();*/

          怎么样,通过以上学习大家应该学会数码管的基本原理了吧,接下来大家就可以控制数码管显示数字和英文字母了。

    本文转自网络,版权归原作者,如果您觉得不好,请留言联系我们删除!

    广告

    关于立创商城

    立创商城(WWW.SZLCSC.COM)成立于2011年,致力于为客户提供一站式电子元器件线上采购服务,成交量全国领先。自建9200多平米现代化元器件仓库,现货库存超50000种,集团电子全产业链自营服务涵盖:在线EDA(LCEDA)+行业领先的PCB打样/中小批量+元器件商城+钢网制造+SMT贴片+电子设计教育及方案。作为一家品种齐全、自营库存、质量有保障的电子元器件垂直商城,立创商城所有元器件均从原厂或代理商正规渠道采购,保证原装正品,为您提供专业的一站式电子元器件采购服务。