打印
[51单片机]

七段数码管闪屏问题

[复制链接]
2372|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等芯片吧,几毛钱,省很多的事情,

使用特权

评论回复
5
handlike| | 2013-12-16 08:54 | 只看该作者
动太扫描间隔大且间隔大小不一致造成的视觉影响吧。

使用特权

评论回复
6
ayb_ice| | 2013-12-16 10:41 | 只看该作者
周期50MS,频率才20HZ,太慢了,即使仿真不闪烁,实机也会闪烁的

使用特权

评论回复
7
ningling_21| | 2013-12-16 13:52 | 只看该作者
一般情况下2MS扫描一次肯定不闪烁...

使用特权

评论回复
8
XZL| | 2013-12-16 13:58 | 只看该作者
估计是定时扫描显示程序被中断所致!也就是中断程序影响了显示

使用特权

评论回复
9
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;

}

使用特权

评论回复
10
a20084666| | 2013-12-17 07:51 | 只看该作者
yangfan19641964 发表于 2013-12-16 16:51
初学者对动态显示都是这样做,方法不对。应该用中断。LED器件的帧频要达到60Hz以上,你用1/2扫,所以应达到 ...

不错的想法

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝