标题: 数码管消影问题?如何选择延时时间 [打印本页]

作者: king@    时间: 2016-10-12 21:28
标题: 数码管消影问题?如何选择延时时间
#include<reg52.h>
sbit WEI = P1^6;    //定义位选
sbit DU = P1^7;     //定义段选
void SMG();
#define uchar unsigned char //  8bit, 0 ~     255
#define uint  unsigned int  // 16bit, 0 ~  65,535
void delayms(uint m)    // 11.0592MHz 晶振ms延时,偏差小于1%
{
    uint i, j;
    for(i=m; i>0; i--)
        for(j=114; j>0; j--);
}


void main(void)
{
  SMG();




}


void SMG()
{
   DU = 1;
   P0 = 0x00;
   DU = 0;                 //消影
  
   WEI = 1;
   P0 = 0xfe;        //位选,第一位
   WEI = 0;
   DU = 1;
   P0 = 0x01;         //段选,一横
   DU = 0;
   delayms(300);
}


如果延时选择 delayms(2);就会出现影子。而delayms(300);是试出来刚好合适只显示一横并且不会一横看起来不会有闪烁的的感觉。影子是怎样出现的,怎样选着合适的延时时间?



QQ截图20161012212428.png (103.94 KB, 下载次数: 71)

QQ截图20161012212428.png

QQ截图20161012212508.png (120.75 KB, 下载次数: 78)

QQ截图20161012212508.png

作者: STC89C51    时间: 2016-10-13 09:16
建议不要用延时来消隐,可以采用每次显示前给每位数码管清零,就是P0=0x00。
作者: wuyibin2003    时间: 2016-10-13 09:32
刷新时间变快一些

作者: yzwzfyz    时间: 2016-10-13 10:06
正确的做法:
1、将所有的显示动作数据都准备好(就剩一句送出数据不做,目的:以后可以以最短的时间送出数据)
2、一条命令,切断所有LED的显示。如图中的WE1-8。要点:指令少时间短。
3、送出准备好的数据。因为显示已切断,所以无闪动。要点:指令少时间短。这就时为何要事先准备好数据。
4、打开需要显示的那一个LED。
重复扫描显示......
作者: yzwzfyz    时间: 2016-10-13 10:08
关键点:
1、在不显示的时候切换显示数据。
2、不显示的时间要短。以提高显示亮度并减小闪动感。

作者: yzwzfyz    时间: 2016-10-13 10:12
为了达成以上目的:
硬件上,尽可能将显示扫描“开关”放在同一个口
软件上,先将需要显示的数据准备好,不要:“送出一个,再计算处理一个,再送一个。”。要以最短的时间,在不显示的时候送出。
作者: king@    时间: 2016-10-14 17:09
STC89C51 发表于 2016-10-13 09:16
建议不要用延时来消隐,可以采用每次显示前给每位数码管清零,就是P0=0x00。

谢谢,方法确实可行。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1