LED数码管

 

数码管有发光二级管组成,单个二极管由10个管脚组成,其中3号和8号管脚相连,它分为共阳极和共阴极两种,

共阳极的编码:uchar code table[]={0xc0,0xf9,0xa4,0xb0,

                                0x99,0x92,0x82,0xf8,

                                0x80,0x90,0x88,0x83,

                                0xc6,0xa1,0x86,0x8e};

代表:"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F";

共阴极编码:uchar code table[]={0x3f,0x06,0x5b,0x4f,

                                                         0x66,0x6d,0x7d,0x07,

                                                         0x7f,0x6f,0x77,0x7c,

                                                         0x39,0x5e,0x79,0x71};

数码管的点亮电流约5mA,而单片机I/O管脚的输出电流小于5mA,故使用数码管时需要添加驱动电路如74HC573芯片;

对六位一体或多位一体的数码管,他们内部的公共端是独立的,负责显示数字的段线连接在一起,公共端也叫位选线控制哪位数码管点亮,段线也叫段选线控制显示什么数字。

 

数码管分为静态显示和动态显示两种;

显示电路

驱动电路

控制电路

最小系统电路(系统时钟,复位) 

 

用共阴极静态显示1--F个字符,每个显示0.5s:

#include<reg52.h>//单片机头文件

#define uchar unsigned char//宏定义

#define uint unsigned int

sbit  dula=P2^6;//申明U2锁存器的锁存端

sbit  wela=P2^7;//申明U3锁存器的锁存端

uchar code table[]={0x3f,0x06,0x5b,0x4f,

                            0x66,0x6d,0x7d,0x07,

                            0x7f,0x6f,0x77,0x7c,

                            0x39,0x5e,0x79,0x71};

 uint num;

 

void delayms(uint xms)//延时函数

{

     uint i,j;

     for(i=xms;i>0;i--)

      for(j=110;j>0;j--);

}

 

 void main()

{

    wela=1;//输入位选信号

    P0=0xc0;//送入位选数据

    wela=0;//关闭位选信号

   while(1)

   {

         for(num=0;num<16;num++)

        {  

            dula=1;//输入段选信号

            P0=table[num];//输出显示的数据

           dula=0;//关闭位选信号

           delayms(500);//延时500ms

           }

     }

}

 

动态显示:依次让数码管显示,每次显示0.3s

#include<reg52.h>//单片机头文件

#define uchar unsigned char

#define uint unsigned int

sbit  dula=P2^6;//申明U2锁存器的锁存端

sbit  wela=P2^7;//申明U3锁存器的锁存端

uchar code table[]={0x3f,0x06,0x5b,0x4f,

                            0x66,0x6d,0x7d,0x07,

                            0x7f,0x6f,0x77,0x7c,

                            0x39,0x5e,0x79,0x71};

 

void delayms(uint xms)//延时函数

{

     uint i,j;

     for(i=xms;i>0;i--)

      for(j=110;j>0;j--);

}

 

 

void main()

{

  while(1)//循环

   { 

      dula=1;

      P0=table[1];//送段选数据

     dula=0;

     P0=0xff;//消影

     wela=1;

     P0=0xfe;//送位选数据

     wela=0;

    delayms(300);

dula=1;

      P0=table[2];//送段选数据

     dula=0;

     P0=0xff;//消影

     wela=1;

     P0=0xfd;//送位选数据

     wela=0;

    delayms(300);

dula=1;

      P0=table[3];//送段选数据

     dula=0;

     P0=0xff;//消影

     wela=1;

     P0=0xfb;//送位选数据

     wela=0;

    delayms(300);

  dula=1;

      P0=table[4];//送段选数据

     dula=0;

     P0=0xff;//消影

     wela=1;

     P0=0xf7;//送位选数据

     wela=0;

    delayms(300);

dula=1;

      P0=table[5];//送段选数据

     dula=0;

     P0=0xff;//消影

     wela=1;

     P0=0xef;//送位选数据

     wela=0;

    delayms(300);

 

dula=1;

      P0=table[6];//送段选数据

     dula=0;

     P0=0xff;//消影

     wela=1;

     P0=0xdf;//送位选数据

     wela=0;

    delayms(300);

  }

}

所谓动态显示是利用人的视觉无法区分间隔小于0.1s的图像,实质是多位数码管一位一位的轮流显示的。

 

定义特殊的位用:sbit

定义特殊的字符用:sfr

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值