请选择 进入手机版 | 继续访问电脑版

普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 2949|回复: 2

51单片机数码管

[复制链接]

3

主题

3

帖子

23

积分

新手上路

Rank: 1

积分
23
发表于 2021-1-4 17:50:31 | 显示全部楼层 |阅读模式
1金钱
51单片机数码管怎么实现依次显示数字并暂留,例如0~7,先显示0,后面显示01,然后显示012,依次这样
我知道答案 本帖寻求最佳答案回答被采纳后将获得系统奖励10 金钱 , 目前已有2人回答

回复

使用道具 举报

20

主题

1344

帖子

8370

积分

论坛元老

Rank: 8Rank: 8

积分
8370
发表于 2021-1-6 14:38:12 | 显示全部楼层
你的作业我完成了,程序如下:
#include<reg51.h>

#define GPIO_DIG P0

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

unsigned char code DIG_CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char DisplayData[8]={0,0,0,0,0,0,0,0};
void DigDisplay();
void main(void)
{
        unsigned int i,j,k;
        while (1)
        {
                for (j=1;j<9;j++)
                {
                        for(i=0;i<j;i++)
                        {
                                DisplayData=DIG_CODE;       
                        }
                        for (k=0;k<1000;k++)
                        {
                                DigDisplay();
                        }
                }
                for(i=0;i<j;i++)
                {
                        DisplayData=0;       
                }
                for (k=0;k<1000;k++)
                {
                        DigDisplay();
                }
        }
}
void DigDisplay()
{
        unsigned char i;
        unsigned int j;
        for(i=0;i<8;i++)
        {
                switch(i)
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0; break;
                        case(1):
                                LSA=1;LSB=0;LSC=0; break;
                        case(2):
                                LSA=0;LSB=1;LSC=0; break;
                        case(3):
                                LSA=1;LSB=1;LSC=0; break;
                        case(4):
                                LSA=0;LSB=0;LSC=1; break;
                        case(5):
                                LSA=1;LSB=0;LSC=1; break;
                        case(6):
                                LSA=0;LSB=1;LSC=1; break;
                        case(7):
                                LSA=1;LSB=1;LSC=1; break;       
                }
                GPIO_DIG=DisplayData;
                j=10;
                while(j--);       
                GPIO_DIG=0x00;
        }
}



适用电路如图:


其实就是普中HC6800-ES-V2.0开发板

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

20

主题

1344

帖子

8370

积分

论坛元老

Rank: 8Rank: 8

积分
8370
发表于 2021-1-6 14:49:09 | 显示全部楼层
还可以这样:
#include<reg51.h>

#define GPIO_DIG P0

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

unsigned char code DIG_CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char DisplayData[8]={0,0,0,0,0,0,0,0};
void DigDisplay(unsigned char k);
void main(void)
{
        unsigned int i,j,k;
        while (1)
        {
                for(i=0;i<8;i++)
                {
                        DisplayData[i]=DIG_CODE[i];       
                }
                for (j=0;j<8;j++)
                {
                        for (k=0;k<1000;k++)
                        {
                                DigDisplay(j);
                        }
                }
                for(i=0;i<j;i++)
                {
                        DisplayData[i]=0;       
                }
                for (k=0;k<1000;k++)
                {
                        DigDisplay(8);
                }
        }
}
void DigDisplay(unsigned char k)
{
        unsigned char i,j;
        for(i=0;i<k+1;i++)
        {
                switch(i)
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0; break;
                        case(1):
                                LSA=1;LSB=0;LSC=0; break;
                        case(2):
                                LSA=0;LSB=1;LSC=0; break;
                        case(3):
                                LSA=1;LSB=1;LSC=0; break;
                        case(4):
                                LSA=0;LSB=0;LSC=1; break;
                        case(5):
                                LSA=1;LSB=0;LSC=1; break;
                        case(6):
                                LSA=0;LSB=1;LSC=1; break;
                        case(7):
                                LSA=1;LSB=1;LSC=1; break;       
                }
                GPIO_DIG=DisplayData[i];
                j=10;
                while(j--);       
                GPIO_DIG=0x00;
        }
}


程序缺点是先头显示的内容时间短,后面时间长一点点
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-18 22:15 , Processed in 0.092793 second(s), 32 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表