我有一块16*64的双 {MOD}LED点阵屏,74HC245+595+138...接口是 CLK STB DR DG EN A B C D 测试的时候发现一个很奇怪的问题,当我把EN接单片机的I/O时,点阵显示的内容没错,但是亮度很低,几乎看不见,就像是灯丝在亮一样,如果在晚上关灯还可以看见一点,白天完全看不见,我把EN接到电源时,嘿!亮了,但是一段时间后显示就出问题了,而且这种情况下芯片发热,请教一下各位,这个EN是怎么回事啊,不管我接高电平还是低电平都不亮,这屏我有两块,都一样,应该不是屏的问题。
这是接电源时的情况,几秒后就不正常了。
ourdev_617367OKHJC7.zip(文件大小:146K) (原文件名:摄像.zip)
积分:522
派别:
等级:------
来自:
一行数据发完之后,EN拉高,一行led就会亮,然后延迟一段时间,拉低,一行led熄灭,发送下一行数据,再拉高EN点亮下一行led,如此循环,适当改变延迟可调整亮度。
---------------------------------------------------------------------------------------------------------------------
我改了的,改到类似流水灯,还是一样不亮,这是程序。
#include <reg52.h>
#include <intrins.h>
#include "letter.h"
typedef unsigned char uchar;
typedef unsigned int uint;
sbit G_74138 = P2^4; //显示允许控制信号端口(EN)
sbit Sdata_R1 = P2^5; //串行数据输入(R1)
sbit RCK_595 = P2^6; //输出锁存器控制脉冲(L) STB
sbit SCLK_595 = P2^7; //移位时钟脉冲(S) CLK
sbit Addr_A = P2^0;
sbit Addr_B = P2^1;
sbit Addr_C = P2^2;
sbit Addr_D = P2^3;
unsigned char temp;
char code reserve[3] _at_ 0x3b; //保留0x3b开始的3个字节
/**********************************************************
将显示数据送入74HC595内部移位寄存器
**********************************************************/
void WR_595(void)
{
unsigned char x;
for (x=0; x<8; x++)
{
temp = temp << 1; //数据左移一位,最高位送入CY
Sdata_R1 = CY;
SCLK_595 = 1; //上升沿发生移位
_nop_();
SCLK_595 = 0;
}
}
/**********************************************************
点阵显示子函数
**********************************************************/
void display(uchar *data1,uchar *data2,uchar *data3,uchar *data4)
{
unsigned char i;
unsigned int n;
for(i=0;i<16;i++) //扫描16行
{
G_74138 = 1; //关闭显示
temp = (data1[2*i]); //一行写8个字节
WR_595();
temp = (data1[2*i+1]);
WR_595();
temp = (data2[2*i]);
WR_595();
temp = (data2[2*i+1]);
WR_595();
temp = (data3[2*i]);
WR_595();
temp = (data3[2*i+1]);
WR_595();
temp = (data4[2*i]);
WR_595();
temp = (data4[2*i+1]);
WR_595();
P2&= 0xf0; //行号清零
RCK_595 = 1;; //锁存数据
P2|= i; //行输出
RCK_595 = 0;
G_74138 = 0; //打开显示
n = 9;
while(n--); //延时,调节亮度
}
}
/**********************************************************
主函数
**********************************************************/
void main(void)
{
unsigned char num;
while(1)
{
for(num=0; num<200; num++)
display(Bmp[0],Bmp[1],Bmp[2],Bmp[3]);
for(num=0; num<200; num++)
display(Bmp[4],Bmp[5],Bmp[6],Bmp[7]);
}
}
一周热门 更多>