51单片机:数码管显示

1. 静态数码管显示

        点亮数码管需要用到P0端口和P2部分端口,P0端口负责显示要输出的数字,P2部分端口负责让哪个数码管点亮,具体的去看电路图,这次还包含了74HC245和74HC138芯片

        现在让单片机数码管区域第三位的数码管显示数字5,程序如下

 #include"reg52.h"

//定义P2端口
sbit LSA=P2^2; 
sbit LSB=P2^3; 
sbit LSC=P2^4;

//用数组来表示数码管上每个数字输出对应的相关电平输入
int str[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f};


void  Display(int Location,int Number)
{
    //利用case语句将8个数码管显示的位置一一列举
    switch(Location)   
    {
        case 1: LSC=0;LSB=0;LSA=0; break;
        case 2: LSC=0;LSB=0;LSA=1; break;
        case 3: LSC=0;LSB=1;LSA=0; break;
        case 4: LSC=0;LSB=1;LSA=1; break;
        case 5: LSC=1;LSB=0;LSA=0; break;
        case 6: LSC=1;LSB=0;LSA=1; break;
        case 7: LSC=1;LSB=1;LSA=0; break;
        case 8: LSC=1;LSB=1;LSA=1; break;
    }

    P0=str[Number];
}

int main()
{
    Display(3,5); //参数1表示数码管位置,参数2表示要输出的0-9的数字
    while(1)
    {
    }
}

实验现象如下

2.动态数码管显示

        这部分主要是注意延时和消除残影的问题,如不加延时的,两个数字切换的非常快,可能会导致篡位,程序如下

 #include"reg52.h"

//定义P2端口
sbit LSA=P2^2; 
sbit LSB=P2^3; 
sbit LSC=P2^4;

//用数组来表示数码管上每个数字输出对应的相关电平输入
int str[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f};

void Delay(int time)
{
    while(time--) //while循环一次需要10us
    {
    }
}

void  Display(int Location,int Number)
{
    //利用case语句将8个数码管显示的位置一一列举
    switch(Location)   
    {
        case 1: LSC=0;LSB=0;LSA=0; break;
        case 2: LSC=0;LSB=0;LSA=1; break;
        case 3: LSC=0;LSB=1;LSA=0; break;
        case 4: LSC=0;LSB=1;LSA=1; break;
        case 5: LSC=1;LSB=0;LSA=0; break;
        case 6: LSC=1;LSB=0;LSA=1; break;
        case 7: LSC=1;LSB=1;LSA=0; break;
        case 8: LSC=1;LSB=1;LSA=1; break;
    }

    P0=str[Number];

    //延时一段时间,等待显示稳定,如果不加延时,就可能上一个数字和下一下篡位
    Delay(100);
    //消除数码管残影
    P0=0x00;
}

int main()
{
     //参数1表示数码管位置,参数2表示要输出的0-9的数字
    while(1)
    {
        Display(1,1);
        Display(2,2);
        Display(3,3);

    }
}

实验现象如下

猜你喜欢

转载自blog.csdn.net/weixin_52300845/article/details/124322380