找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

数码管计数求助 两块573驱动两位共阴数码管

查看数: 4602 | 评论数: 6 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-8-13 05:50

正文摘要:

两块573驱动两位共阴数码管,按键计数00——99,电路图如下

回复

ID:186936 发表于 2017-9-26 20:19
#include<reg52.h>
sbit selectWei=P2^7;
sbit selectDuan=P2^6;
unsigned char code selectPin[]={0x0e,0x0d,0x0b,0x07};
unsigned char code displayNum[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int a;
unsigned int number;
void outPutNumber(unsigned int);
void delay();
void main()
{
        number=0;
        while(1)
        {
                outPutNumber(number);
                number++;
        }
}

void outPutNumber(unsigned int z)
{
        if(z>9999)  //取千位数
        {
                selectDuan=1;                //先发送段字符
                P1=displayNum[z%100000/10000];
                selectDuan=0;
                selectWei=1;                //再开通位选 可消除重影
                P0=selectPin[0];
                selectWei=0;
                delay();
        }

        if(z>999)  //取千位数
        {
                selectDuan=1;
                P1=displayNum[z%10000/1000];
                selectDuan=0;
                selectWei=1;
                P0=selectPin[1];
                selectWei=0;
                delay();
        }

        if(z>99)  //取百位数
        {
                selectDuan=1;
                P1=displayNum[z%1000/100];
                selectDuan=0;
                selectWei=1;
                P0=selectPin[2];
                selectWei=0;
                delay();
        }

        if(z>9)  //取十位数
        {
                selectDuan=1;
                P1=displayNum[z%100/10];
                selectDuan=0;
                selectWei=1;
                P0=selectPin[3];
                selectWei=0;
                delay();
        }
/*
        if(z>0)  //取个位数
        {        
                selectDuan=1;
                P1=displayNum[z%10];
                selectDuan=0;
                selectWei=1;
                P0=selectPin[3];
                selectWei=0;
                delay();
        }*/
}

void delay()
{
        int i,j;
        for(i=0;i<10;i++)
                for(j=0;j<110;j++);
}
ID:225822 发表于 2017-9-10 20:02
给你程序自己修改吧,只是这个程序里是自动加1计数。两个573用来片选和段选分别锁存。

#include<reg52.h>
sbit selectWei=P2^7;
sbit selectDuan=P2^6;
unsigned char code selectPin[]={0x0e,0x0d,0x0b,0x07};
unsigned char code displayNum[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int a;
unsigned int number;
void outPutNumber(unsigned int);
void delay();
void main()
{
        number=0;
        while(1)
        {
                outPutNumber(number);
                number++;
        }
}

void outPutNumber(unsigned int z)
{
        if(z>9999)  //取千位数
        {
                selectDuan=1;                //先发送段字符
                P1=displayNum[z%100000/10000];
                selectDuan=0;
                selectWei=1;                //再开通位选 可消除重影
                P0=selectPin[0];
                selectWei=0;
                delay();
        }

        if(z>999)  //取千位数
        {
                selectDuan=1;
                P1=displayNum[z%10000/1000];
                selectDuan=0;
                selectWei=1;
                P0=selectPin[1];
                selectWei=0;
                delay();
        }

        if(z>99)  //取百位数
        {
                selectDuan=1;
                P1=displayNum[z%1000/100];
                selectDuan=0;
                selectWei=1;
                P0=selectPin[2];
                selectWei=0;
                delay();
        }

        if(z>9)  //取十位数
        {
                selectDuan=1;
                P1=displayNum[z%100/10];
                selectDuan=0;
                selectWei=1;
                P0=selectPin[3];
                selectWei=0;
                delay();
        }
/*
        if(z>0)  //取个位数
        {       
                selectDuan=1;
                P1=displayNum[z%10];
                selectDuan=0;
                selectWei=1;
                P0=selectPin[3];
                selectWei=0;
                delay();
        }*/
}

void delay()
{
        int i,j;
        for(i=0;i<10;i++)
                for(j=0;j<110;j++);
}

ID:162665 发表于 2017-9-9 20:20
首先你要知道锁存器是怎么工作的,然后会数码管静态,动态显示。锁存器的原理如图,代码自己写吧C:\Users\Administrator\Desktop
ID:111634 发表于 2017-9-9 17:01
本帖最后由 zl2168 于 2017-9-9 17:09 编辑

统计T0引脚上10分钟内的脉冲数
实例71 统计T0引脚上10分钟内脉冲数.rar (52.96 KB, 下载次数: 4)

Proteus仿真一下,确认有效。以上摘自张志良编著《单片机实验实训100例》 ISBN 978-7-5124-1603-1,北航社出版. 书中电路和程序设计有详细说明,程序语句条条有注解。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。


ID:82765 发表于 2017-9-8 17:07
提示: 作者被禁止或删除 内容自动屏蔽
ID:230901 发表于 2017-9-8 16:47
这是要程序。。。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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