AT89C51单片机学习日记2024/4/3

                                         利用8个数码管动态显示数字(以显示今日日期为例)

实验目的:利用8个数码管动态显示数字,我显示的是今日日期

实验接法:选取7SEG-COM-ANODE数码管组两个(共8个),位选接P2口,段选接P3口

实验现象:将代码写成函数Nixie(Location,Number),若Location=5,Number=3,则在第5个数码管显示数字3,以此类推

实验原理:将静态数码管显示的代码在while循环中复制7个,共使用8次Nixie函数Nixie(Location,Number),如2024第一位是2,那么Location=1,Number=2,以此类推写8个,数码管其实是一位一位显示的,我们可以用Delay函数在位选和段选之间设置低延迟,来给人眼造成同时显示的假象

实验注意事项:由于延迟过低,位选还没彻底结束便开始段选,故会出现数码管拖影现象,只需在位选和段选之间加一个清0和延时即可解决

实验代码:

#include<regx52.h>
unsigned char NixieTable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
int Delay(unsigned int xms)
{
    unsigned char i, j;
    while(xms)
    {
        i = 2;
        j = 239;
        do
        {
            while (--j);
        } while (--i);
        xms--;
    }
}

void Nixie(unsigned char Location,Number)
{
    switch(Location)
    {
        case 1:P2_0=0;P2_1=1;P2_2=1;P2_3=1;P2_4=1;P2_5=1;P2_6=1;P2_7=1;break;
        case 2:P2_0=1;P2_1=0;P2_2=1;P2_3=1;P2_4=1;P2_5=1;P2_6=1;P2_7=1;break;
        case 3:P2_0=1;P2_1=1;P2_2=0;P2_3=1;P2_4=1;P2_5=1;P2_6=1;P2_7=1;break;
        case 4:P2_0=1;P2_1=1;P2_2=1;P2_3=0;P2_4=1;P2_5=1;P2_6=1;P2_7=1;break;
        case 5:P2_0=1;P2_1=1;P2_2=1;P2_3=1;P2_4=0;P2_5=1;P2_6=1;P2_7=1;break;
        case 6:P2_0=1;P2_1=1;P2_2=1;P2_3=1;P2_4=1;P2_5=0;P2_6=1;P2_7=1;break;
        case 7:P2_0=1;P2_1=1;P2_2=1;P2_3=1;P2_4=1;P2_5=1;P2_6=0;P2_7=1;break;
        case 8:P2_0=1;P2_1=1;P2_2=1;P2_3=1;P2_4=1;P2_5=1;P2_6=1;P2_7=0;break;
    }
    P3=NixieTable[Number];                      //位选与段选函数
   Delay(1);
      P3=0x00;                                                   //置0消除拖影
}

int main()
{
while(1)
{
Nixie(1,2);
Delay(5);
Nixie(2,0);
Delay(5);
Nixie(3,2);
Delay(5);
Nixie(4,4);
Delay(5);
Nixie(5,0);
Delay(5);
Nixie(6,4);
Delay(5);
Nixie(7,0);
Delay(5);
Nixie(8,3);
Delay(5);    
}    
    
    
    
    
return 0;    
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值