51单片机笔记-数码管的显示

文章讲述了译码器的工作原理,以3-8译码器为例,解释了如何通过输入引脚控制输出引脚以显示不同数字。同时介绍了使用单片机直接扫描和专用驱动芯片驱动数码管的方法,强调了延时在消除数码管动态显示闪烁中的作用。
摘要由CSDN通过智能技术生成

静态数码管显示

译码器原理:译码器是一种数字电路,用于将输入的二进制信号转换为对应的输出信号。它可以将多个输入线上的不同组合转化为对应的输出线上的激活状态。

常见的译码器有2-4译码器、3-8译码器和4-16译码器等。以3-8译码器为例,它具有3个输入引脚(A, B, C)和8个输出引脚(Y0~Y7)

译码器的原理是根据输入引脚的不同组合来决定哪个输出引脚被激活。每个输出引脚都与一种二进制组合相对应。当输入引脚与某个二进制组合匹配时,对应的输出引脚会被激活。

例如,当输入引脚为000时,输出引脚 Y0 被激活;当输入引脚为001时,输出引脚 Y1 被激活;以此类推,一直到输入引脚为111时,输出引脚 Y7 被激活。

因此,当需要通过三个引脚控制Y0到Y7时,只需将这三个引脚分别连接到对应的输入引脚上。以二进制数110为例,如果将A引脚接到1、B引脚接到1、C引脚接到0,则Y6引脚会被激活。这样,在不同的输入组合下,就可以实现对输出引脚Y0到Y7的控制。

步骤:控制P22 P23 P23选择Y0~Y7,然后给段码P00~P07数据通过缓冲区控制LED灯a b c d e f g亮灭,从而显示出数字

段码速查:

代码示例:

void main()

{

P2_4 = 1;

P2_3 = 1;

P2_2 = 1; //now we choose Y5 =>LED6 (from left to right)

P0 = 0x7D; //0x7D=0111 1101 ==>  dp0 g1 f1 e1 d1 c1 b0 a1

while(1)

{

}

}

现象:从右往左的第六个LED显示出“6”。

代码示例:

#include <regx52.h>

unsigned char table[]={0x3F,0x06,0x5b,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

void nixie(unsigned char loc,num){

switch(loc)

{

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 =table[num];

}

void main()

{

nixie(4,5);

while(1)

{





}

}

现象:nixie(4,5),第四个显示数字5.

数码管消影:

由于时位选和段选交替进行的,由于时间极短,上一次的数据会串到下一个。因此需要延时来做到数码管的动态显示

代码示例:

#include <regx52.h>

void delay(unsigned int xms)   //延时函数



{



unsigned char i,j;



while(xms)



{



i = 2;



j = 239;



do



{



while (--j);



} while (--i);



xms--;



}



}





unsigned char table[]={0x3F,0x06,0x5b,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

void nixie(unsigned char loc,num){

switch(loc)

{

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 =table[num];

}

void main()

{



while(1)

{

nixie(4,5);

delay(5);  //延时消影

nixie(5,2);

delay(5);  //延时消影

nixie(6,0);

delay(5);  //延时消影

}

}

现象:显示520

数码管驱动方式:

单片机直接扫描:上述代码就是这种方式。硬件设备简单,但会耗费大量的单片机CPU时间

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值