打印
[51单片机]

数码管动态扫描

[复制链接]
1675|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhuxing_1026|  楼主 | 2013-7-31 23:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大神,请教一个问题:
程序如下,为什么用动态扫描的时候,在显示完了一个位之后必须delay(·)呢,如果不delay的话就会乱


//将一个三位整数分离出每一位,分别送给相应位的数码管,动态扫描显示

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39, 0x5e,0x79,0x71
};                                                                                               
sbit wela=P2^7;
sbit dula=P2^6;
void delay(uint);
void display(uchar,uchar,uchar);
void main()
{
        uint temp=350;
        uchar bai,shi,ge;

        bai=temp/100;
        shi=(temp%100)/10;
        ge=(temp%100)%10;

        while(1)
        {
                 wela=0;
                dula=0;
                P0=0;
                 display(bai,shi,ge);       

        }


}

void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=114;y>0;y--);
}

void display(uchar x,uchar y,uchar z)  //显示子程序
{
        dula=1;
        P0=table[x];
        dula=0;
        P0=0xff;//防止位锁存器打开的瞬间P0口上的段选码被送到位锁存器造成混乱
        wela=1;
        P0=0xfe;
        wela=0;
        P0=0x00;
        //delay(1);

        dula=1;
        P0=table[y];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfd;
        wela=0;
        P0=0x00;
        //delay(1);

        dula=1;
        P0=table[z];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfb;
        wela=0;
        P0=0x00;
        //delay(1);          
       
}                               

相关帖子

沙发
林志财| | 2013-7-31 23:36 | 只看该作者
LZ问的问题特有意思,

使用特权

评论回复
板凳
efen| | 2013-8-1 00:10 | 只看该作者
delay是要保证每一位显示的亮度,同时扫描周期又不能<50HZ

使用特权

评论回复
地板
minDragon| | 2013-8-1 09:43 | 只看该作者
如果不加delay的话,当第一位还没显示稳定就立马显示下一位,由于频率很快,就会出现看不清 ,乱码的情况啦~
让每一位的显示都稳定下来,再显示下一位,位与位之间的延时小于人的视觉停留的时间就不会出现闪烁的情况了~

使用特权

评论回复
5
568581185| | 2013-8-1 14:54 | 只看该作者
动态扫描就是一个时间点内只有一个数码管被选中,被点亮。当然肉眼是识别不出来那那个时间点的,如果有高速数码相机就能拍到一个灯点亮。
延时就是为了保证点亮时间

使用特权

评论回复
6
zhuxing_1026|  楼主 | 2013-8-1 21:21 | 只看该作者
林志财 发表于 2013-7-31 23:36
LZ问的问题特有意思,

呵呵 有意思??我不知道哪里有意思  难道阁下就一定明白为什么吗??最看不起的就是这种人,首先自己就不一定懂,就算就算你懂,那又怎样呢 知识这东西 总有先知与后知  就算你先知 能说明你很牛吗   不知天高地厚  一辈子成不了气候  强烈鄙视!!!!!!

使用特权

评论回复
7
梦那些年| | 2013-8-2 08:50 | 只看该作者
因为单片机的执行速度非常快,人眼是无法反映过来,加上这个延时后人就解决了单片机速度上的问题,从而人眼也能反应过来了,楼主可把延时函数里的参数改改,下到单片机里看看现象,之后就明白了。

使用特权

评论回复
8
zhuxing_1026|  楼主 | 2013-8-2 20:56 | 只看该作者
梦那些年 发表于 2013-8-2 08:50
因为单片机的执行速度非常快,人眼是无法反映过来,加上这个延时后人就解决了单片机速度上的问题,从而人眼 ...

嗯 谢谢 你说的我也知道 就是delay一下 会更加稳定,但是从动态扫描的原理上讲,既然当两次闪烁间隔时间小于人眼视觉暂留时间时,人眼就认为是连续的,那么,难道这个时间不是越小越好吗,

使用特权

评论回复
9
rambler| | 2013-8-2 22:45 | 只看该作者
如果点亮的时间太短,LED可能还没有充分点亮就关闭了,从而可能得不到最好的效果。扫描间隔肯定是越快越好

使用特权

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

本版积分规则

20

主题

51

帖子

1

粉丝