HC6800 ES V2.0 8*8点阵问题请教
请各位大侠指点,自己经过代码发现,595连接的是点阵的正极;P0口连接的是点阵的负极。各种图片,能够正确显示。是这么理解吗,还是逻辑图是正确的,我的理解是错误的。问普中的工程师,答复:点阵部分正负极?对这个答复表示疑问。请高手指点,谢谢!
不知道你怎么从程序分析的,从点阵的接线图和结构图来看,P0口接的是点阵的正极,也就是点阵LED的正极,595是接点阵的负极,也就是点阵LED的负极,如果两者与点阵之间没有其他任何芯片,那么应该是当P0口置1,595置0是,点阵点亮。
LED点阵仍然属于LED,具有单向通电特性,所以是要分正负极的。
好了,以上是只看了连接图的部分引脚做出的结论,又仔细看了一下,首先要确定的是LED一定是分正负的,其次,估计你看这个程序已经看得头昏了,分不清到底哪个端口接正极,哪个接口接负极了,不过这个结论也是对的,因为这个连接图只是按引脚次序和端口次序进行连接,并没有按照正负极的区分来连接,所以这个程序应该很难看懂。
举个例子,ROW 1和COL 1的LED,正极是点阵引脚9,接P03,负极是点阵引脚13,接595的D0,但是ROW 7和COL 4的LED,正极是点阵引脚2,接595的D6,负极是点阵引脚10,接P02,另外还有就是ROW 7和COL 1的LED,则正极是点阵引脚2,接595的D6,负极是点阵引脚13,接595的D0。
所以从接线图看,个人觉得这个程序理解起来会挺乱的。
我忘了说了一点:看视频的时候,照着代码敲了,实验结果很乱。我就去看示例代码,开头就说,JOE要短接GND。然后实验就成功了,同样的代码。
下面我把代码展示下:这个代码,在8*8上显示一个“十”字:
/*8*8点阵的使用*/
#include <reg51.h>
#include <intrins.h>
typedef unsigned char uc8;
typedef unsigned int ui16;
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
void delay(ui16 i)
{
while(i--);
}
void hc595send(uc8 dat)
{
uc8 a;
SRCLK=0;
RCLK=0;
for(a=0;a<8;a++)
{
SER=dat>>7;
dat<<=1;
SRCLK=1;
_nop_();
_nop_();
SRCLK=0;
}
RCLK=1;
_nop_();
_nop_();
RCLK=0;
}
void main()
{
int hang[]={0x80,0x40,0x20,0x10,0x08,0x04};
int lie[]={0xdf,0x07,0xdf,0xdf,0xdf,0xdf};
while(1)
{
int qq=0;
for(;qq<6;qq++)
{
hc595send(hang[qq]); //控制行,高电压,当为1时,整行亮。正极。
P0=lie[qq]; //控制列,低电压,当为0时,行为1,才能亮。负极。
delay(100);
hc595send(0x00); //消隐
}
}
}
谢谢指点。
你确定这个程序可以正确显示你所想显示的内容吗,根据你的程序,线路连接是以行和列来对应595和P0端口连接的,但是接线图和LED点阵的结构图来看却是根据LED点阵的引脚次序连接的,确定LED点阵的结构图和实物能对应吗。
是否能正确显示英文字符。
英文字符我还没试呢,晚上回去试试,我一直怀疑普中给的文档有问题。晚上试了,明天贴代码,谢谢!
英文字符没问题,但是,又出现新问题了,就是有些点,会亮的很暗,即使消隐,也不行。
还有,就是,如下的代码:为什么,不加最后一句消隐,整个8*8的点阵都不亮,这是为什么,谢谢指教。
void main()
{
while(1)
{
senddata(0xff]);
P0=0x00;
senddata(0x00);
}
}
}