微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 菜鸟设计的数码管滚动,怎么数码管老是闪烁啊,晃眼。...

菜鸟设计的数码管滚动,怎么数码管老是闪烁啊,晃眼。...

时间:10-02 整理:3721RD 点击:

#include<reg52.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar codeDSY_CODE1[]={0xbf,0xbf,0x09,0x06,0xc7,0xc7,0x40,0xbf};//,,0x46,0x21,0x06,0x0e0xbf,0xbf,,0xbf                   ,0xbf

uchar codeDSY_CODE2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

//延时                                                                                                                                                                             

void DelayMS(uint xms)

{

       uinti,j;

       for(i=xms;i>0;i--)

              for(j=110;j>0;j--);  

}

//主程序

void main()

{  

  while(1)

       {uint num,num2;

                     for(num2=0;num2<8;num2++)

                  {          P2=0xff;

                      DelayMS(10);

                             P2=DSY_CODE2[num2]; //wei

                        for(num=0;num<8;num++)

                     {

                             P0=DSY_CODE1[num]; //duan  

                             DelayMS(10);

                             P0=0xff;

                       P2=_crol_(P2,1);   

                              

                         }     

              

                     

                        

                           

                      }                        

       }


这种问题,很有可能和延时有关。,改小或者改大调试下

嗯嗯,要多试试扫描数码管的延时,多用几个值试试,

恩 应该是延时参数的问题  我看了有的视频教程上1ms参数是148   小编也可以单步运行仿真一下 或者可以弄个仿真芯片 一步一步看结果

改成1ms试一试,可能是延时时间太长了

{uint num,num2;                                             //这个为什么在这里定义,每次循环还重新定义下,建议放在while外面
                  for(num2=0;num2<8;num2++)
                  {          P2=0xff;
                      DelayMS(10);
                             P2=DSY_CODE2[num2]; //wei            //这里定义了位码
                        for(num=0;num<8;num++)
                     {
                             P0=DSY_CODE1[num]; //duan  
                             DelayMS(10);
                             P0=0xff;
                       P2=_crol_(P2,1);                                  //这里又移动位码   你要实现什么样的功能,是一个数码管里面来回滚动显示数字,还是一个数码管显示一个数字,数码管和数字都滚动显示?  
                              
                         }                                   
      }      

建议改成

        uint num,num2;
         P2 = 0xfe;
        while(1)
       {      
                     for(num=0;num<8;num++)
                     {
                             P0=DSY_CODE1[num]; //duan  
                             DelayMS(10);
                             P0=0xff;
                            P2=_crol_(P2,1);   
                              
                         }                                                                                      
         }                       
或者
  for(num2=0;num2<8;num2++)
{                    P2=0xff;
                      DelayMS(10);
                      P2=DSY_CODE2[num2]; //wei
                      for(num=0;num<8;num++)
                     {
                             P0=DSY_CODE1[num]; //duan  
                             DelayMS(10);
                             P0=0xff;                           
                         }                                                                                          
           }                                             

这个只有一个原因扫描速度不够

延时改成1~3MS左右最佳

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top