问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

动态数码管显示(Proteus仿真图和程序)

创作时间:
作者:
@小白创作中心

动态数码管显示(Proteus仿真图和程序)

引用
CSDN
1.
https://blog.csdn.net/Wan_shibugong/article/details/90514335

本文详细介绍了基于STC89C52RC单片机的四位一体动态数码管显示技术,包括共阳极和共阴极数码管的驱动原理、电路连接方式,并提供了具体的Proteus仿真图和C51程序代码。

一、基础理解

本博客基于STC89C52RC单片机进行编程,采用四位一体动态数码管显示。

二、共阳极数码管

  1. 基础介绍
  • 共阳极数码管显示需要PNP三极管进行驱动电路。
  • 三极管的集电极连接数码管的位选端,发射极连接电源,基极连接单片机进行控制。
  • 基极高电平,集电极就低电平,基极低电平,集电极就高电平,数码管亮。
  • 仿真中需要在位选端接电阻接地,否则当基极为高电平时,集电极还是高电平。
  • 实际电路中位选端可以不接电阻不接电。
  1. Proteus仿真电路图

  1. C51程序
#include <reg51.h>
#define duanxuan P1        //段选接口
#define weixuan P2      //位选接口
unsigned char code wxcode[4]={0xfe,0xfd,0xfb,0xf7};
unsigned char code dxcode[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void DigDisplay(int num);
void main()
{
    int num = 9876;
    int t = 0;
    //每隔一段时间num-1
    while(1)
    {
        t++;
        if(t == 500)
            t = 0, num--;
        DigDisplay(num);
    }
}
//num是显示的数字
void DigDisplay(int num)
{
    unsigned char i;
    unsigned int j;
    int gewei,shiwei,baiwei,qianwei;
    
    gewei = num % 10;
    shiwei = num / 10 % 10;
    baiwei = num / 100 % 10;
    qianwei = num / 1000;
    
    for(i=0; i<4; i++)
    {
         weixuan = wxcode[i];
         duanxuan = 0xff;
        if(i == 3)
        {
            duanxuan = dxcode[gewei];
        }
        if(i == 2)
        {
            duanxuan = dxcode[shiwei];
        }
        if(i == 1)
        {
            duanxuan = dxcode[baiwei];
        }
        if(i == 0)
        {
            duanxuan = dxcode[qianwei];
        }
        j=10;
        while(j--);
        duanxuan=0xff;
    }
}

三、共阴极数码管

  1. 基础介绍
  • 共阴极数码管显示需要NPN三极管进行驱动电路。
  • 三极管的集电极连接电源,发射极连接数码管的位选端,基极连接单片机进行控制。
  • 基极高电平,发射极就高电平,基极低电平,发射极就低电平,数码管亮。
  1. Proteus仿真图

  1. C51程序代码
#include <reg51.h>
#define duanxuan P1       
#define weixuan P2    
unsigned char code wxcode[4]={0xfe,0xfd,0xfb,0xf7};
unsigned char code dxcode[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void DigDisplay(int num);
void main()
{
    int num = 9876;
    int t = 0;
    while(1)
    {
        t++;
        if(t == 500)
            t = 0, num--;
        DigDisplay(num);
    }
}
void DigDisplay(int num)
{
    unsigned char i;
    unsigned int j;
    int gewei,shiwei,baiwei,qianwei;
    
    gewei = num % 10;
    shiwei = num / 10 % 10;
    baiwei = num / 100 % 10;
    qianwei = num / 1000;
    
    for(i=0; i<4; i++)
    {
         weixuan = wxcode[i];
         duanxuan = 0x00;
        if(i == 3)
        {
            duanxuan = dxcode[gewei];
        }
        if(i == 2)
        {
            duanxuan = dxcode[shiwei];
        }
        if(i == 1)
        {
            duanxuan = dxcode[baiwei];
        }
        if(i == 0)
        {
            duanxuan = dxcode[qianwei];
        }
        j=10;
        while(j--);
        duanxuan=0x00;
    }
}
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号