8*8LED点阵图原理(74HC595芯片使用方法)

1.LED灯排线图
8*8LED点阵图原理(74HC595芯片使用方法)_第1张图片
1.该线为共阳极点阵图,一行的阳极都是接在一条线上的
如果要亮第一排第一个灯,需要9号行位置为1(即5V),13号列为0(即0V)形成电流,该灯就亮。
2.故行为1000 000控制只有第一行有入口是高电压的,列为0111 1111控制只有第一列为低电压。
控制一个LED灯可以直接控制,但控制两个不在同一行的LED灯得用动态显示。

3.动态思想:我们确认好每行亮那几个LED灯,然后用1000 0000不断右移动,每次只亮一行的LED灯,然后每行变化很快(其实每次只有一行亮,但因为切换快,人眼看到是所有行),就可以看到显示所要显示的灯。
8*8LED点阵图原理(74HC595芯片使用方法)_第2张图片
2.LED点阵屏的连接(74HC595)
8*8有16个接口,而16乘16就有32个接口,而通常都是成千上万的LED灯,不可能都用单片机的接口,这样耗费资源,故就用到74H595芯片。
3. 74HC595
74HC595芯片是一种串入平出的芯片,广泛用于LED屏显示。
8*8LED点阵图原理(74HC595芯片使用方法)_第3张图片
串行平出就是8位数据可以一个一个排队通过一条通道,然后多行输出
平行平入就是一位数据一个通道,这样虽然很快,但是耗费的接口很多,然而LED并不需要这么快。
8*8LED点阵图原理(74HC595芯片使用方法)_第4张图片
1.Q0到Q7就是数据输出端,连接8个LED灯端口
2.Q7’(第九脚)是串行数据输出,(连接的是两个该芯片,有16个端口,会传入16位数据,但都是只传入到第一片芯片中,然后由Q7‘把数据不断分配)(这个连到下一片的ds端口,没有下一片就不连)。
8*8LED点阵图原理(74HC595芯片使用方法)_第5张图片
3.MR(第10脚),低电平时将寄存器数据清除,所有通常直接连到电源(开机就保存数据,关机就没)。
4.SH-CP(14脚),数据输入时间线,每片芯片的该端口都连到一个I/O口,通过产生一次上升沿(数据从0变成1,即电压从0V到5V),就录入一位数据到芯片寄存器内。
5.ST-CP(第12脚),通过产生一次上升沿(数据从0变成1,即电压从0V到5V),输出存在该芯片内寄存器的数据,直接8位数据通过Q0到Q7输出。
6.OE(第13脚),当它为高电平时为高阻态,所有通常把它接入地线。

所以只有到三个接口就可以控制到88的点阵屏(如果要1616的点阵屏,就在接两个该芯片,同样是3个接口)。
三个接口中
CLK为控制接收数据节奏(通过上升沿一位位接受)。
DI为传入数据的端口。
LE控制全部输入数据到寄存器内时输入到每个芯片的8个接口(通过上升沿直接全部输出)。
代码展示
这是阳极LED点阵,只有阴极用到了74HC595

#include "reg51.h"			
#include "intrins.h"

typedef unsigned int u16;	  
typedef unsigned char u8;

u8 ledduan[] ={0x7E,0x3C,0x00,0x81,0x81,0xC3,0xE7,0xFF
                  };//每行亮的位置
sbit SRCLK=P3^6;     //移位数据时钟
sbit RCLK=P3^5;      //输出数据时钟
sbit SER=P3^4;       //数据输入口(一位一位)
void delay(unsigned int z)
{
	unsigned int x,y;
	for(x=z;x>0;x--)
	   for(y=120;y>0;y--);
}
void Hc595SendByte(u8 dat)  //74HC595芯片使用的程序
{
	u8 a;
	SRCLK = 0;
	RCLK = 0;              //全部归0,以便拉高形成上升沿
	for(a=0;a<8;a++)		 
	{
		SER = dat >> 7;	  //接受第8位数据	 
		dat <<= 1;        //通过数据左移动,不断接受所有数据

		SRCLK = 1;        //每得到一位就通过移位数据时钟(为一,产生上升沿)传入寄存器  
		SRCLK = 0;	      //归0
	}
	RCLK = 1;             //数据8位直接输出
	RCLK = 0;
}
void main()
{	 
	u8 i,ROW;
	while(1)
	{
		ROW = 0x80;            //从第一行开始1000 0000
	    for(i=0;i<8;i++)     
		{
			P0=ledduan[i];     //我们这开发板是8个口是直接连到P0位置端口,这是阳极
			Hc595SendByte(ROW);  //发送列数据,阳极对应的行与阴极对应亮那里就控制了这一行亮的灯
			ROW = _cror_(ROW,1);  //控制阳极的”1“位移,需要用到头文件。
		}
	}
}

结果
8*8LED点阵图原理(74HC595芯片使用方法)_第6张图片

你可能感兴趣的:(51清翔笔记,嵌入式,单片机)