单片机学习小组
直播中

杨勇

7年用户 1188经验值
私信 关注

如何利用STC89C52RC单片机进行编程?

如何利用STC89C52RC单片机进行编程?

回帖(1)

王莹

2022-2-15 10:41:39
一、基础理解




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

二、共阳极数码管

1、基础介绍




  • 共阳极数码管显示需要PNP三极管进行驱动威廉希尔官方网站 。
  • 三极管的集电极连接数码管的位选端,发射极连接电源,基极连接单片机进行控制。
  • 基极高电平,集电极就低电平,基极低电平,集电极就高电平,数码管亮。
  • 仿真中需要在位选端接电阻接地,否则当基极为高电平时,集电极还是高电平。
  • 实际威廉希尔官方网站 中位选端可以不接电阻不接电。

2、proteus仿真威廉希尔官方网站 图


3、C51程序


#include


#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;
                 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三极管进行驱动威廉希尔官方网站 。
  • 三极管的集电极连接电源,发射极连接数码管的位选端,基极连接单片机进行控制。
  • 基极高电平,发射极就高电平,基极低电平,发射极就低电平,数码管亮。

2、proteus仿真图


3、C51程序代码


#include


#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;
                 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;
        }
}
举报

更多回帖

×
20
完善资料,
赚取积分