[51单片机] 七段数码管闪屏问题

[复制链接]
2877|9
 楼主| Ricezhang 发表于 2013-12-15 21:37 | 显示全部楼层 |阅读模式
我想问一问大家 ,为什么有时候 在做七段数码管显示数时 会出现闪屏 但有的却不会  不知什么原因  路过的 希望能 解答一下。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
chunyang 发表于 2013-12-15 21:39 | 显示全部楼层
动态扫描的话,要注意扫描频率,足够高时,因人眼的视觉残留效应就不会感到闪烁了。

评分

参与人数 1威望 +1 收起 理由
Ricezhang + 1 很给力!

查看全部评分

 楼主| Ricezhang 发表于 2013-12-15 22:22 | 显示全部楼层
好的以了解
microcloud 发表于 2013-12-15 23:05 | 显示全部楼层
成本够的话,就用tm1620等芯片吧,几毛钱,省很多的事情,
handlike 发表于 2013-12-16 08:54 | 显示全部楼层
动太扫描间隔大且间隔大小不一致造成的视觉影响吧。
ayb_ice 发表于 2013-12-16 10:41 | 显示全部楼层
周期50MS,频率才20HZ,太慢了,即使仿真不闪烁,实机也会闪烁的
ningling_21 发表于 2013-12-16 13:52 | 显示全部楼层
一般情况下2MS扫描一次肯定不闪烁...
XZL 发表于 2013-12-16 13:58 | 显示全部楼层
估计是定时扫描显示程序被中断所致!也就是中断程序影响了显示
yangfan19641964 发表于 2013-12-16 16:51 | 显示全部楼层
初学者对动态显示都是这样做,方法不对。应该用中断。LED器件的帧频要达到60Hz以上,你用1/2扫,所以应达到120Hz以上的频率。我给提个方法,自己去改完。

#include<reg52.h>
#include<intrins.h>
void time0over();
sbit M2=P1^2;/*十位*/
sbit M3=P1^3;/*个位*/
char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int k=60,m=0;

unsigned char which=0,counter=0;
bit B1s=0;

void main()
{
        TMOD=0x01;
        TH0=0x  ;
        TL0=0x  ;/*5ms*/
        TR0=1;
        ET0=1;        EA=1;

        while(1)
        {
                if(B1s)
                {
                        B1s=0;
                        k--;
                        if(k==-1)k=60;
                }
        }
}

void T0_service interrupt 1
{
        TH0=0x  ;
        TL0=0x  ;/*5ms*/

        counter++;
        if (counter==200)
        {
                counter=0;        B1s=1;
        }


        switch(which)
        {
                case 0:
                        P0=table[k/10];        /*十位*/
                        M3=1;M2=0;                    /*个位关*/
                        M3=0;M2=0;                    /*个位开*/
                        break;
                case 1:
                        P0=table[k%10];        /*个位*/
                        M2=1;M3=0;                    /*十位关*/
                        M2=0;M3=0;                    /*十位开*/                                   
                        break;
        }

        which++;
        if (which==2)        which=0;

}

a20084666 发表于 2013-12-17 07:51 来自手机 | 显示全部楼层
yangfan19641964 发表于 2013-12-16 16:51
初学者对动态显示都是这样做,方法不对。应该用中断。LED器件的帧频要达到60Hz以上,你用1/2扫,所以应达到 ...

不错的想法
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部