单片机交流
直播中

刘桂英

7年用户 1179经验值
私信 关注
[问答]

如何利用51单片机实现数码管静态与动态显示?

如何利用51单片机实现数码管静态与动态显示?

回帖(1)

苏笛笛

2021-9-28 15:00:05
数码管的静态显示与动态显示
学习数码管的静态与动态显示,首先要清楚,同一个时刻,单片机只能使能一个数码管。
动态显示:轮流点亮数码管,利用人眼的视觉暂留现象,造成多个数码管被点亮的视觉体验。


静态显示:可理解为非动态显示,即不会轮番点亮数码管。在多个数码管的显示中,静态显示的意义不大。


记住:100Hz无闪烁!!!
只要刷新频率大于100Hz,即刷新时间小于10ms,就可以做到无闪烁,这也是动态扫描的硬性指标。


静态显示的演示代码:
#include


//数码管静态显示


unsigned char code LedChar[10]={//数码管显示的数字0~9
0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};


unsigned char cnt = 0;
unsigned char sec = 0;


***it DigitalTube = P1^0;;


void main()
{
   //点亮数码管
   DigitalTube = 0;
   //设置定时器
   TMOD = 0X01;
   TH0 = 0XB8;
   TL0 = 0X00;
   TR0 = 1;


   while(1)
   {
                P0 = LedChar[sec];


                   if(TF0 == 1)
                  {
                           TF0 = 0;
                        TH0 = 0XB8;
                           TL0 = 0X00;
               
                        cnt++;
                        if(cnt>=50)
                        {
                                cnt = 0;
                                sec++;
                                if(sec>=10)
                                {
                                        sec = 0;
                                }
                        }                       
                }
        }
}
动态显示的演示代码
#include


//数码管动态显示


unsigned char code LedChar[10]={//数码管显示的数字0~9
0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};


unsigned char flag ;


***it DigitalTube1 = P1^0;
***it DigitalTube2 = P1^1;


void main()
{
        TMOD = 0X01;
        TH0 = 0Xe7b8;
        TL0 = 0X0000;
        TR0 = 1;


        flag = 0;


        while(1)
        {               
                if(flag == 0)
                {
                        DigitalTube1 = 0;
                        DigitalTube2 = 1;
                        P0 = LedChar[1];       
                }
                else if(flag == 1)
                {
                        DigitalTube1 = 1;
                        DigitalTube2 = 0;
                        P0 = LedChar[2];       
                }


                if(TF0 == 1)
                {
                        TF0 = 0;
                        TH0 = 0Xe7b8;
                        TL0 = 0X0000;


                        flag = !flag;
                }       
        }       
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分