谁能帮帮我解决一下点阵闪烁问题呀,感激不尽了!!



2008-09-27_003136.png

/***********************************************************************************************
16X64点阵。
p0,p2口接行,p0接前几行,p2接后几行,第一行在上面,最后一行在下面。
p3口接8个74hc595移位寄存器,连接到列中,第一列在左边,最后一例在右边。
通过移位寄存器一列一列的扫描,同时送行代码,以显示图形

出现的问题:就是显示闪烁问题,不知道为什么??我无论怎么修改延时时间还是闪烁,
但是如果我只扫描32列就没闪烁问题,就是把循环语句中的64改成32.
是不是扫描64列时仿真软件反应不过来??在实际中会不会有问题呢??
哪位高手能指点一下呀,帮我修改一下程序,感激不尽了。。。。。。。。。。。。。
************************************************************************************************/
#include <AT89X52.H>
/********************************行代码**********************************************************/
unsigned char code graph[]={
                                  0x00,0x00,0x00,0x01,0xE0,0x0F,0xF0,0x1F,0xF0,0x1F,0x18,0x30,0x08,0x20,0x08,0x20,
                                  0x08,0x20,0x08,0x20,0x08,0x20,0x38,0x38,0xF0,0x1F,0xE0,0x0F,0xC0,0x07,0x00,0x00,
                                                //0
                                  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x20,0x10,0x20,0x10,0x20,0xF8,0x3F,
                                  0xF8,0x3F,0xF8,0x3F,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00 ,     
                                              //1
          0x00,0x00,0x00,0x00,0x20,0x30,0x70,0x30,0x78,0x38,0x08,0x3C,0x08,0x34,0x08,0x36,
                                  0x08,0x32,0x08,0x33,0x88,0x31,0xF8,0x31,0xF8,0x30,0x70,0x38,0x00,0x08,0x00,0x00,
                      //2
          0x00,0x00,0x00,0x00,0x30,0x18,0x30,0x18,0x38,0x38,0x08,0x20,0x88,0x21,0x88,0x21,
                                  0x88,0x21,0x88,0x21,0xD8,0x21,0xF8,0x3B,0x70,0x1E,0x20,0x1E,0x00,0x04,0x00,0x00,
                                              //3
                               };  
/**********************************************************************************************/     
sbit ds=P3^5;    //data
sbit shcp=P3^6;  // 移位,数据从ds进入移位寄存器
sbit stcp=P3^7;  //移出,数据从移位寄存器输出到i,o口。
void delay(unsigned char c)  //delay 1 ms   
    {
      unsigned char i,j;
      for(i=0;i<c;i++)
      for(j=0;j<120;j++);
     }
void datain(void)  //data in
{
   shcp=0;
   shcp=1;
}
void dataout(void)  //data out
{
   stcp=0;               
   stcp=1;
}
void main(void)
{
  int i;
  while(1)
    {
  ds=0;  //送数据0,低电平有效,点阵第一列点亮。
     for(i=0;i<=64;i++)
   {
    datain();   //送数据
    dataout();   //输出显示
       P0=graph[2*i];    //行代码,高电平有效
    P2=graph[1+2*i];  //行代码,高电平有效
    delay(3);
    ds=1;    //移位数据,下一列点亮,其它列熄灭。
  
   }
  
    }
}

电子屏.rar
(2008-09-27 00:38:40, Size: 82.1 KB, Downloads: 9)


我也来说两句 查看全部回复

最新回复

  • tkgg1086 (2008-9-27 13:17:50)

    时间短些是否可行呢?
  • tkgg1086 (2008-9-27 13:21:05)

    时间短些是否可行呢?
  • qhh78 (2008-9-27 16:05:10)

    调时间是调不了的了,只能看一下程序还有哪里可以改进的了。。。。。。。。
    我猜想是软件仿真的问题,在实际中应该时间是可以调的。。。。。。。。
  • victoire (2008-9-27 18:46:01)

    频率不够高,会造成频闪,!!!!!!!!
  • 陈正509 (2008-9-27 20:58:45)

    肯定频率不够啊
    没有办法啊
    想办法加大频率啊
  • nbbao (2008-10-04 18:09:57)

    重画图,可能是画图问题.请试一下.