51单片机——数码管

一、数码管原理图

cb9b34a00c4f4cfb96c1011ee785ae5d.png

我们发现,总共有8个数码管。

它们的上面接8个LED,用来控制选择哪个数码管。例如要控制第三个数码管,就让LED6为0,其他为1,那LED又接到哪呢?

二、LED

c0257021fd0d4e89988d53940a504800.jpg

 由图可以看出,这个一个138译码器,我们通过控制P22,P23,P24进而控制8个LED。例如要让第三个数码管LED6亮,LED6对应Y5,5的二进制是101,所以让P22=1,P23=0,P24=1。

三、数码管显示

90afe739f5534cf2b84d46c1780a9929.png

 通过一二,我们可以选择哪个数码管,现在要控制选择的数码管的显示。

我们可以发现每个数码管都有a,b,c,d...,正好对应下面8条线a,b,c,d...,而a,b,c,d...又对应左边P00,P01...

例如要显示6,需要让afgedc亮,b,dp不亮。

a对应P00,所以P00=1。

b对应P01,所以P01=0。

cd亮,对应P02,P03=1。

。。。。

最后,P0=0111 1101=0x7D

四、代码

#include <STC89C5xRC.H>

unsigned char NixieTable[]={

0x3f,0x06,0x5b,0x4f,

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

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

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

void Nixie(unsigned char Location,Number)

{

 switch(Location)

 {

  case 1:

   P24=1;P23=1;P22=1;break;

  case 2:

   P24=1;P23=1;P22=0;break;

  case 3:

   P24=1;P23=0;P22=1;break;

  case 4:

   P24=1;P23=0;P22=0;break;

  case 5:

   P24=0;P23=1;P22=1;break;

  case 6:

   P24=0;P23=1;P22=0;break;

  case 7:

   P24=0;P23=0;P22=1;break;

  case 8:

   P24=0;P23=0;P22=0;break;

 }

 P0=NixieTable[Number];

}

 

void main()

{

// P24=1; //Controls a nixie tube

// P23=0;

// P22=1;

// P0=0x7D; //value is 6

 Nixie(3,6);

 while(1)

 {

  

 }

}

自定义Nixie函数,负责选择数码管和显示数字。传入两个参数,第一个参数代表第几个数码管,第二个参数代表显示数字几。

Nixie(3,6),3对应Location,代表第三个数码管。由本篇第二节可知,第三个数码管对应LED6,LED6对应101。

6对应显示数字6,由本篇第三节可知,数字6对应0x7d。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值