一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 2787|回复: 18
收起左侧

大神看看我的LED 64*32 的只能闪一下黑屏的现象

[复制链接]
发表于 2016-3-5 09:49 | 显示全部楼层 |阅读模式
我的双色LED 32*64的用51的片子或者12C5A60S2的片子都一个效果。就是通断电时闪一下就灭了。但就亮那么一下,我看到显示的是正确的。不知道哪出问题了。求大神解答!!!
1457142237377.jpg

硬件晶振是12M。换了22.1184M也不行。
基本上,参考了开心锅锅的程序。程序如下:
#include <intrins.h>
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define _Nop() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_()
sbit HC138_A=P1^0;        
sbit HC138_B=P1^1;   
sbit HC138_C=P1^2;   
sbit HC138_D=P1^3;           //138, 4, 5
sbit HC138_OE=P1^4;         //138 6

sbit HC595_CLK=P1^5;    //595 11 时钟
sbit HC595_GD=P1^6;    //595 14
sbit HC595_LAT=P1^7;    //595 12 STR锁屏
sbit HC595_RD=P3^5;    //595 14

//sbit SERg2= P2^5;

//sbit SERr2= P2^3;            //数据
/*
sbit HC138_A=P3^7;        
sbit HC138_B=P3^2;   
sbit HC138_C=P1^0;   
sbit HC138_D=P3^3;           //138, 4, 5
sbit HC138_OE=P1^5;         //138 6
sbit HC595_LAT=P1^1;    //595 12
sbit HC595_CLK=P3^4;    //595 11
sbit HC595_GD=P1^2;    //595 14
sbit HC595_RD=P3^5;    //595 14
*/

/******************/
#define  scan0    {HC138_A=0;HC138_B=0;HC138_C=0;HC138_D=0;}
#define  scan1    {HC138_A=1;HC138_B=0;HC138_C=0;HC138_D=0;}
#define  scan2    {HC138_A=0;HC138_B=1;HC138_C=0;HC138_D=0;}
#define  scan3    {HC138_A=1;HC138_B=1;HC138_C=0;HC138_D=0;}
#define  scan4    {HC138_A=0;HC138_B=0;HC138_C=1;HC138_D=0;}
#define  scan5    {HC138_A=1;HC138_B=0;HC138_C=1;HC138_D=0;}
#define  scan6    {HC138_A=0;HC138_B=1;HC138_C=1;HC138_D=0;}
#define  scan7    {HC138_A=1;HC138_B=1;HC138_C=1;HC138_D=0;}
#define  scan8    {HC138_A=0;HC138_B=0;HC138_C=0;HC138_D=1;}
#define  scan9    {HC138_A=1;HC138_B=0;HC138_C=0;HC138_D=1;}
#define scan10    {HC138_A=0;HC138_B=1;HC138_C=0;HC138_D=1;}
#define scan11    {HC138_A=1;HC138_B=1;HC138_C=0;HC138_D=1;}
#define scan12    {HC138_A=0;HC138_B=0;HC138_C=1;HC138_D=1;}
#define scan13    {HC138_A=1;HC138_B=0;HC138_C=1;HC138_D=1;}
#define scan14    {HC138_A=0;HC138_B=1;HC138_C=1;HC138_D=1;}
#define scan15    {HC138_A=1;HC138_B=1;HC138_C=1;HC138_D=1;}
/******************/
unsigned char r_data[8], g_data[8];
unsigned char k, t, m, n, p, state;

unsigned char code hanzi[17][32]={                 //二维数据

/*--  文字0:  零  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x1F,0xF8,0x01,0x00,0x7F,0xFE,0x41,0x04,0x1D,0x70,0x01,0x00,0x1D,0x70,0x02,0x80,
0x04,0x60,0x1A,0x1E,0xE1,0x08,0x1F,0xE0,0x00,0x40,0x02,0x80,0x01,0x00,0x01,0x00,
/*--  文字1:  一  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x04, 0x7F,0xFE,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*--  文字2:  二  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x00,0x10,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,
/*--  文字3:  三  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x00,0x00,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x00,0x00,0x00,0x00,
/*--  文字4:  四  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x7F,0xFC,0x44,0x84,0x44,0x84,0x44,0x84,0x44,0x84,0x44,0x84,0x44,0x84,
0x48,0x84,0x48,0x7C,0x50,0x04,0x60,0x04,0x40,0x04,0x7F,0xFC,0x40,0x04,0x00,0x00,
/*--  文字5:  五  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x7F,0xF8,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x20,0x3F,0xF0,
0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x24,0xFF,0xFE,0x00,0x00,0x00,0x00,
/*--  文字6:  六  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x04,0x00,0x03,0x00,0x01,0x80,0x01,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x04,0x80,
0x06,0x40,0x04,0x20,0x08,0x10,0x08,0x18,0x10,0x0C,0x20,0x0C,0x40,0x08,0x00,0x00,
/*--  文字7:  七  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0xFE,0x7F,0x00,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0xF8,0x00,0x00,
/*--  文字8:  八  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x00,0x40,0x04,0x60,0x06,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x08,0x20,
0x08,0x20,0x10,0x10,0x10,0x10,0x20,0x08,0x40,0x0E,0x80,0x04,0x00,0x00,0x00,0x00,
/*--  文字9:  九  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x20,0x7F,0xF0,0x02,0x20,0x02,0x20,0x04,0x20,
0x04,0x20,0x04,0x20,0x08,0x20,0x08,0x24,0x10,0x24,0x20,0x26,0x40,0x3C,0x00,0x00,
/*--  文字10:  十  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00,
/*--  文字11:  测  --*/
/*--  幼圆12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x44,0xC4,0x8C,0x98,0xF8,0xFC,0xE4,0xF4,0xFC,0xFC,0xF8,0xFC,0xFC,0xFC,0xFC,0x00,
0x80,0xE0,0x79,0xBD,0xCF,0xFF,0x7F,0x1F,0x3F,0xFF,0xCF,0x9F,0x9F,0xFF,0xFF,0x00,

/*--  文字12:  试  --*/
/*--  幼圆12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x80,0x84,0x9C,0x9C,0x10,0x10,0x10,0x10,0x10,0x10,0xFC,0xFC,0x1C,0x1C,0x38,0x00,
0x00,0x00,0x7F,0x7F,0x60,0x71,0x51,0x7F,0x3F,0x21,0x23,0x3F,0xFF,0xE0,0xF8,0x00,

/*--  文字13:  开  --*/
/*--  幼圆12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x04,0x04,0xFC,0xFC,0xFC,0x04,0x04,0x04,0x04,0xFC,0xFC,0xFC,0x04,0x04,0x00,
0x01,0x81,0xC1,0xFD,0x7F,0x0F,0x01,0x01,0x01,0x01,0xFF,0xFF,0xFF,0x01,0x01,0x00,

/*--  文字14:  始  --*/
/*--  幼圆12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0xD0,0xFE,0x7E,0x10,0xF0,0xF0,0xE0,0xF8,0xBC,0x8C,0x80,0x98,0xF8,0xE0,0x00,
0x80,0xC7,0xFF,0x78,0x7E,0xEF,0xC3,0xFC,0xFC,0x84,0x84,0x84,0x84,0xFC,0xFD,0x00,

/*--  文字15:  结  --*/
/*--  幼圆12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xC0,0xF0,0xFC,0x9C,0xF4,0x70,0x90,0x90,0x90,0xFC,0xFC,0xFC,0x90,0x90,0x90,0x00,
0xC0,0xCC,0x4F,0x4F,0x6D,0x24,0xFC,0xFC,0x84,0x84,0x84,0x84,0x84,0xFC,0xFC,0x00,

/*--  文字16:  束  --*/
/*--  幼圆12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x08,0xC8,0xC8,0xE8,0x28,0x28,0x28,0xFE,0xFE,0x28,0x28,0x28,0xE8,0xC8,0xC8,0x08,
0x80,0x83,0xC3,0x67,0x62,0x3A,0x1E,0xFF,0xFF,0x1E,0x32,0x72,0x67,0xC7,0x83,0x80,

};


//delay us
void Delay(uchar us)  //5,7,9
{
while(--us);  
}


//delay ms
void DelayMS(uint iMs)
{
uint i,j;
  for(i=0;i<iMs;i++)
  for(j=0;j<65;j++) Delay(1);

}

void write595(unsigned char rdd, gdd)
{
        unsigned char i;
        for (i=0;i<8;i++)
        {
                HC595_RD=rdd&0x80;
                rdd=rdd<<1;
                HC595_GD=gdd&0x80;
                gdd=gdd<<1;
               
                HC595_CLK=0;
                HC595_CLK=1;
        }
}

/*****不影响其他端口的扫描*************************/
void scan(unsigned char Value)
{switch(Value)
        {case  0: scan0;break;
                  case  1: scan1;break;
                   case  2: scan2;break;
                    case  3: scan3;break;
             case  4: scan4;break;
                      case  5: scan5;break;
                       case  6: scan6;break;
                        case  7: scan7;break;
                 case  8: scan8;break;
                       case  9: scan9;break;
                      case 10:scan10;break;
                     case 11:scan11;break;
            case 12:scan12;break;
                  case 13:scan13;break;
                 case 14:scan14;break;
            case 15:scan15;break;
           default:break;
        }
}
/*****************************************/
void main (void)
{
        n=0;
        state=0;
        while(1)
        {
            for (p=0;p<64;p++)
                {
                        for (t=0;t<16;t++)
                        {
                                scan(t);

                                HC595_LAT=0;
                                HC595_CLK=0;       
                                HC138_OE=1;
                        // HC138_OE=0;
                                if (state==0)
                                {
                                        for (k=0;k<4;k++)
                                        {
                                                g_data[2*k]=0xff-hanzi[0+k][t*2];
                                                g_data[2*k+1]=0xff-hanzi[0+k][t*2+1];
                                                r_data[2*k]=0xff-hanzi[0+k][t*2];
                                                r_data[2*k+1]=0xff-hanzi[0+k][t*2+1];
                                        }
                                }
                                else if (state==1)
                                {
                                        for (k=0;k<8;k++)
                                        {
                                                g_data[k]=0x00;
                                                r_data[k]=0xff;
                                        }
                                }
                                else if (state==2)
                                {
                                        for (k=0;k<8;k++)
                                        {
                                                g_data[k]=0xff;
                                                r_data[k]=0x00;
                                        }
                                }
                                else if (state==3)
                                {
                                        for (k=0;k<2;k++)
                                        {
                                                g_data[2*k]=0xff-hanzi[4+k][t*2];
                                                g_data[2*k+1]=0xff-hanzi[4+k][t*2+1];
                                                r_data[2*k]=0xff-hanzi[4+k][t*2];
                                                r_data[2*k+1]=0xff-hanzi[4+k][t*2+1];
                                        }
                                        for (k=2;k<4;k++)
                                        {
                                                g_data[2*k]=0xff-hanzi[6+k][t*2];
                                                g_data[2*k+1]=0xff-hanzi[6+k][t*2+1];
                                                r_data[2*k]=0xff-hanzi[6+k][t*2];
                                                r_data[2*k+1]=0xff-hanzi[6+k][t*2+1];
                                        }
                                }
                        for (k=0;k<8;k++)
                        {
                                write595(r_data[k], g_data[k]);  
                        }
                                //HC138_OE=1;
                               HC138_OE=0;
                        //        HC595_LAT=1;
                        //        HC595_LAT=0;
                        //        HC595_CLK=0;
        /*
                                HC138_A=t&0x01;
                                HC138_B=t&0x02;
                                HC138_C=t&0x04;
                                HC138_D=t&0x08;
         */

                               

                                HC138_OE=0;

                                Delay(100);
                                HC138_OE=1;

                        }        //end for t
                }  //end for p

        state=state+1;
        if (state>3) state=0;
        }        //end while
}

发表于 2016-3-5 10:57 来自手机 | 显示全部楼层
有足够的电流吗?
发表于 2016-3-5 15:16 | 显示全部楼层
电源是不是不行啊?屏幕熄灭后,电源输出电压正常吗?
发表于 2016-3-5 16:26 | 显示全部楼层
换个功率大的电源,不信你测下屏幕亮起瞬间电压都掉到多少了,程序肯定也有关系,

我也正被这个问题搞得头疼,电源线要尽量短点,不然肯定是不行
听说把本站有此功能,为了支持站长,求打赏,哈哈
 楼主| 发表于 2016-3-5 21:43 | 显示全部楼层
本帖最后由 douxiu 于 2016-3-5 21:45 编辑

我检查过了。可我用的是标准开关电源。没有问题的。电压5V,电流20A。
不是电源的问题啊。我觉得是时序的问题。是晶振引起的,刷新不够快把
发表于 2016-3-5 23:23 | 显示全部楼层
会不会是OE没有反转?
发表于 2016-3-6 20:05 | 显示全部楼层
检查电路没问题,试用那个三种显示的时钟,接线没问题就会正常显示
发表于 2016-3-7 20:46 | 显示全部楼层
                            HC138_OE=1;
                        // HC138_OE=0;

改改HC138_OE=?吧
 楼主| 发表于 2016-3-7 22:56 | 显示全部楼层
改了HC138_OE,屏完全不亮了。

#define uchar unsigned char
#define uint unsigned int
sbit HC138_A=P0^0;        
sbit HC138_B=P0^1;   
sbit HC138_C=P0^2;   
sbit HC138_D=P0^3;           //138, 4, 5
sbit HC138_OE=P1^4;         //138 6
#define _Nop() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_()
sbit HC595_CLK=P1^5;    //595 11 时钟
sbit HC595_GD=P1^6;    //595 14
sbit HC595_LAT=P1^7;    //595 12 STR锁屏
sbit HC595_RD=P3^5;    //595 14
unsigned char r_data[8], g_data[8];
unsigned char k, t, m, n, p, state;
//********************///////////
void Delay(uchar us)  //5,7,9
{
while(--us);  
}
//************************//////////////
void write595(unsigned char rdd, gdd)
{
        unsigned char i;
        for (i=0;i<8;i++)
        {
               
                HC595_RD=rdd&0x80;
                rdd=rdd<<1;
                HC595_GD=gdd&0x80;
                gdd=gdd<<1;

                HC595_CLK=1;
                HC595_CLK=0;
        }
        HC595_LAT=0;
        HC595_LAT=1;
}
/********************/
void main (void)
{
        n=0;
        state=0;
        while(1)
        {
            for (p=0;p<64;p++)
                {
                        for (t=0;t<16;t++)
                        {
                               

                                HC595_LAT=0;
                                HC595_CLK=0;       
                                HC138_OE=1;
                        
                                if (state==0)
                                {
                                        for (k=0;k<4;k++)
                                        {
                                                g_data[2*k]=0xff-hanzi[0+k][t*2];
                                                g_data[2*k+1]=0xff-hanzi[0+k][t*2+1];
                                                r_data[2*k]=0xff-hanzi[0+k][t*2];
                                                r_data[2*k+1]=0xff-hanzi[0+k][t*2+1];
                                        }
                                }
                                else if (state==1)
                                {
                                        for (k=0;k<8;k++)
                                        {
                                                g_data[k]=0x00;
                                                r_data[k]=0xff;
                                        }
                                }
                                else if (state==2)
                                {
                                        for (k=0;k<8;k++)
                                        {
                                                g_data[k]=0xff;
                                                r_data[k]=0x00;
                                        }
                                }
                                else if (state==3)
                                {
                                        for (k=0;k<2;k++)
                                        {
                                                g_data[2*k]=0xff-hanzi[4+k][t*2];
                                                g_data[2*k+1]=0xff-hanzi[4+k][t*2+1];
                                                r_data[2*k]=0xff-hanzi[4+k][t*2];
                                                r_data[2*k+1]=0xff-hanzi[4+k][t*2+1];
                                        }
                                        for (k=2;k<4;k++)
                                        {
                                                g_data[2*k]=0xff-hanzi[6+k][t*2];
                                                g_data[2*k+1]=0xff-hanzi[6+k][t*2+1];
                                                r_data[2*k]=0xff-hanzi[6+k][t*2];
                                                r_data[2*k+1]=0xff-hanzi[6+k][t*2+1];
                                        }
                                }
                        for (k=0;k<8;k++)
                        {
                                write595(r_data[k], g_data[k]);  
                        }
                       
                        HC138_OE=0;
                       // HC138_OE=0;
                        HC595_LAT=1;
                        HC595_LAT=0;
                        HC595_CLK=0;
                       
                       
                        HC138_A=t&0x01;
                        HC138_B=t&0x02;
                        HC138_C=t&0x04;
                        HC138_D=t&0x08;

                        Delay(2);
                        //HC138_OE=0;
                        }        //end for t
                }  //end for p

        state=state+1;
        if (state>3) state=0;
        }        //end while
}
发表于 2016-3-8 08:36 | 显示全部楼层
595使能OE都是低电平,你这个程序好像在哪里见过,你可以把数据写入0x00, 循环行扫描看看有没有亮

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-3-29 17:03 , Processed in 0.055326 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表