guyong2012 发表于 2011-8-15 20:19:36

刚刚做完的16×16LED点阵滚动显示,为什么点阵能看到闪烁?大街上的显示屏看不到啊?求高

#include <reg51.h>
unsigned char const tab={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
unsigned char code digittab[]={
0x18,0x18,0x0C,0x30,0x06,0x60,0x3F,0xFC,0x31,0x8C,0x31,0x8C,0x3F,0xFC,0x31,0x8C,
0x31,0x8C,0x3F,0xFC,0x01,0x80,0x01,0x80,0xFF,0xFF,0x01,0x80,0x01,0x80,0x01,0x80,
0x00,0x60,0x18,0x60,0x18,0x60,0x18,0x60,0x18,0x60,0x1F,0xFE,0x18,0x00,0x18,0x00,
0x18,0x00,0x1F,0xF0,0x18,0x30,0x18,0x30,0x18,0x30,0x30,0x30,0x30,0x30,0x60,0x30,
0x18,0x00,0x19,0xF8,0x19,0x98,0x19,0x98,0xFF,0x98,0x19,0x98,0x39,0x98,0x3D,0x98,
0x7F,0x98,0x7F,0x98,0xD9,0x98,0x19,0x9B,0x19,0x9B,0x1B,0x1B,0x1B,0x0F,0x1E,0x00,
0x0C,0x30,0x0C,0x18,0x19,0x8C,0x31,0x86,0x63,0xC0,0x06,0x60,0x0C,0x30,0x38,0x1C,
0xE0,0x07,0x1F,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0xF8,0x18,0x18,
0x3F,0xF8,0x07,0x70,0x01,0xC0,0x3F,0xFC,0x31,0x8C,0x3F,0xFC,0x31,0x8C,0x3F,0xFC,
0x31,0x8C,0x33,0x0C,0x03,0x00,0x7F,0xFC,0x06,0x0C,0x0C,0x0C,0x18,0x78,0x70,0x30,
0x00,0x00,0x00,0x00,0x00,0x20,0x0F,0xC0,0x04,0x80,0x04,0x80,0x04,0xFC,0x3F,0x84,
0x24,0x84,0x14,0x68,0x10,0x08,0x10,0xE8,0x1F,0x18,0x00,0x10,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x40,0x02,0x40,0x02,0x40,0x02,0x48,0x02,0x98,0x3E,0xA0,
0x02,0xC0,0x02,0x80,0x0E,0x82,0x72,0x42,0x02,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x0F,0xC0,0x00,0x80,0x00,0x80,0x00,0x80,
0x00,0x80,0x01,0x00,0x01,0x00,0x01,0x7E,0x7E,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x40,0x02,0x40,0x02,0x40,0x02,0x48,0x12,0x58,
0x1A,0x50,0x0A,0x60,0x02,0x40,0x02,0x40,0x03,0xFE,0x3C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x78,0x1F,0x80,
0x01,0x00,0x01,0x80,0x02,0x80,0x02,0x40,0x04,0x20,0x08,0x38,0x10,0x04,0x00,0x00,
0x00,0x00,0x00,0x30,0x05,0x20,0x04,0x40,0x00,0x48,0x0F,0xBE,0x30,0x88,0x27,0xC0,
0x01,0x00,0x00,0xFC,0x3F,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x03,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xBC,0x04,0xCC,0x3A,0x84,0x22,0x78,0x1A,0x88,0x22,0x88,
0x22,0xF4,0x3E,0x84,0x20,0x84,0x01,0x04,0x01,0x0C,0x02,0x18,0x04,0x08,0x00,0x00,
0x00,0x00,0x00,0x60,0x04,0x40,0x08,0x70,0x10,0xC0,0x18,0x9C,0x0F,0xE4,0x0A,0xA8,
0x11,0xD0,0x30,0x30,0x50,0xCE,0x12,0x62,0x13,0x08,0x14,0x84,0x10,0x7C,0x00,0x00,
0x00,0x00,0x00,0x30,0x05,0x20,0x04,0x40,0x00,0x48,0x0F,0xBE,0x30,0x88,0x27,0xC0,
0x01,0x00,0x00,0xFC,0x3F,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x03,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xC0,0x3C,0x40,0x28,0x78,0x29,0x80,0x2A,0x20,0x2D,0xC0,
0x24,0x30,0x23,0xC0,0x20,0xC0,0x21,0x40,0x22,0x44,0x24,0x3E,0x00,0x00,0x00,0x00};


void delay(unsigned int i)
{
unsigned int j;
for(j=0;j<i;j++);               
}
void main(void)
{
unsigned int j=0;
unsigned int q=0;
unsigned char r;
unsigned char t=0;
P1=0x00;
P3=0x00;
while(1)
{
   for(r=0;r<20;r++)
    for(j=q;j<32+q;j++)
   {
    P2=tab;
        P3=digittab;
        j++;
        P1=digittab;
        delay(150);
        t++;
        if(t==16)t=0;
   }
   q=q+32;
   if(q==480)q=0;
}
}

这是源程序,求高手解答

guyong2012 发表于 2011-8-15 20:21:03

回复【楼主位】guyong2012
-----------------------------------------------------------------------

我用的是154译码列选,P1,P3口行选,为什么有闪烁感?是不是用串行口+164 就没有闪烁了???求高手指点

jemofh 发表于 2011-9-26 23:29:32

单片机速度不够快吧

woshigeshuai 发表于 2011-9-27 00:07:09

LZ点下面的资料。看看我发过的帖子

e315 发表于 2011-9-27 08:41:35

delay(150);

这个延时的时间改小点,试试。

你主要是扫描速度不够快引起的。

kerrwang1982 发表于 2011-9-27 09:16:12

回复【4楼】e315 陈。
delay(150);
这个延时的时间改小点,试试。
你主要是扫描速度不够快引起的。
-----------------------------------------------------------------------

是这个原因,把延时改小,这样不容易变暗。。

或者提高晶振频率,

不过这样亮度会减小。。。

ayumi8 发表于 2011-9-27 09:19:03

扫描 速度 速度啊   不然肯定会闪滴···

sheva21 发表于 2011-9-27 17:30:53

想不闪用定时器软延时吧

kerrwang 发表于 2011-9-27 20:41:43

回复【5楼】kerrwang1982
回复【4楼】e315 陈。
delay(150);
这个延时的时间改小点,试试。
你主要是扫描速度不够快引起的。
-----------------------------------------------------------------------
是这个原因,把延时改小,这样不容易变暗。。
或者提高晶振频率,
不过这样亮度会减小。。。
-----------------------------------------------------------------------

是容易变暗

xl_liao 发表于 2011-9-27 20:46:42

把每次扫描的时间改短点,然后同一个内容循环多次,没有闪烁的感觉.

thinking2737 发表于 2011-9-29 09:26:11

闪烁说明扫描速度被肉眼识别了,你就降低延迟不久好了

zhaohongxian 发表于 2011-10-3 06:44:34

应该是扫描速度不够快

enun123 发表于 2011-10-7 23:39:38

根据你的源程,主函数这样改看可以吗?
void main(void)
{
unsigned int j=0;
unsigned int q=0;
unsigned char r;
unsigned char t=0;
P1=0x00;
P3=0x00;
while(1)
{
   for(r=0;r<200;r++) //
    for(j=q;j<32+q;j++)
   {
    P2=tab;
P3=digittab;
j++;
P1=digittab;
delay(15); //
t++;
if(t==16)t=0;
   }
   q=q+32;
   if(q==480)q=0;
}
}

pangjineng 发表于 2012-5-2 16:50:25

这种点阵的驱动跟大街上的没得比。

aaron96031 发表于 2012-7-21 21:41:00

不错,但是否做成 单元板的格式,
看看这个, 利用单元板一个个串接而成的, 很方便。
http://bbs.eetop.cn/viewthread.php?tid=342461&page=1&extra=#pid7017398
页: [1]
查看完整版本: 刚刚做完的16×16LED点阵滚动显示,为什么点阵能看到闪烁?大街上的显示屏看不到啊?求高