51单片机之数码管显示

一.数码管显示原理
依靠点亮内部发光二极管来发光,数码管内部电路如图a,一位数码管的引脚是10个,显示一个8需要7个小段,还有一个小数点,所以其内部有8个小的发光二极管,最后还有一个公共端,这个公共端又有共阴极和共阳极之分,下面对这两种数码管原理做以介绍。
1.共阴极数码管
“共阴”顾名思义是8个二极管的阴极全部连接在一起如图b,而他们的阳极是独立的。电路连接时,只要给数码管的任意一个阳极加高电平,对应这个数码管就亮了,例如想显示“8”,并且把与下角小数点也点亮,则给8个阳极全通高电平即可。
2。共阳极数码管
数码管所有阳极连接在一起如图c,公共端接的事高电平,想让哪个数码管亮就给那个阴极送个低电平即可,此时显示数字的编码与共阴极编码相反。 共阳极数码管共阴极数码管数码管结构图

数码管静态显示

通常我们把公共端叫做“位选线”,把连接在一起的线段叫“段选线”。
在点亮数码管之前,先介绍下74HC573锁存器。
锁存器:把数据输入端与输出端进行隔离或者连接。
输出口Q要想输出高低电平OE脚必须接地。
当LE脚为高电平时,输出端Q随输入端D的变化而变化;
当LE脚为低电平时,输出端Q数据保存不变,输入端D数据变化不会改变Q的数据。
假如我们给输入端(与P0口直接相连)送一个0x06的值,LE为高时,锁存器两端就连接起来了,输出端也会输出0x06。如果P0口需要输送其他值时,只需将LE脚接个低电平,锁存器两端就断开了。当OE脚接高电平时,不论输入什么都不会输出,此时是一个高阻态的状态。

Ok,接下来上代码,让数码管上显示一个“1”。

#include<reg51.h>
sbit dula=P2^6;     //申明U1锁存器的锁存端
sbit wela=P2^7;     //申明U2锁存器的锁存端
void main()
{
   wela=1;        //打开U2锁存器
   P0=0xFE;       //送入位选信号
   wela=0;        //关闭U2锁存器

   dula=1;        //打开U1锁存器
   P0=0x06;       //送入段选信号
   dula=0;        //关闭U1锁存器
}

U1锁存器控制数码管显示的内容,U2锁存器控制哪一个数码管显示。

数码管动态显示

所谓动态显示,就是轮流向数码管送字形码和相应的位选。下面用代码来详细说一下,现象是第一个数码管显示1,时间为0.5s,然后关闭它,接着第二个数码管显示2,时间也为0.5s。

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
void delayms(uint xms)      //   延迟函数
{
   Uint i,j;
   for(i=xms;i>0;i--)
   for(j=110;j>0;j--);
}
void main()
{
    dula=1;
    P0=0x06;
    dula=0;
    P0=0xff;        //送位选数据前关闭所有显示,防止造成混乱
    wela=1;
    P0=0xfe;      //第一个数码管亮
    wela=0;
    delayms(500);

    dula=1;
    P0=0x5b;
    dula=0;
    P0=0xff;        //送位选数据前关闭所有显示,防止造成混乱
    wela=1;
    P0=0xfd;      //第二个数码管亮
    wela=0;
    delayms(500);
}
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值