51单片机——LED点阵屏显示图形

1.前言

1.1 LED点阵屏介绍

LED点阵屏由若干个独立的LED组成,LED以矩阵的形式排列,以灯珠亮灭来显示文字、图片、视频等。LED点阵屏广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等
LED点阵屏分类
    按颜色:单色、双色、全彩
    按像素:8*8、16*16等(大规模的LED点阵通常由很多个小点阵拼接而成)

1.2 显示原理

LED点阵屏的结构类似于数码管,只不过是数码管把每一列的像素以“8”字型排列而已
LED点阵屏与数码管一样,有共阴和共阳两种接法,不同的接法对应的电路结构不同
LED点阵屏需要进行逐行或逐列扫描,才能使所有LED同时显示

1.3 开发板引脚对应关系

51单片机——LED点阵屏显示图形_第1张图片

 点阵列P07到P00直接接到I/O口上,直接给P0口赋值就好了,点阵行D0到D7而是接到了8位的串行输入,并行输出的移位缓存器74HC595上。74HC595 可用3根线输入串行数据,8根线输出并行数据,多片级联后,可输出16位、24位、32位等,常用于IO口扩展。

(左:74HC595   右:LED点阵屏)

51单片机——LED点阵屏显示图形_第2张图片51单片机——LED点阵屏显示图形_第3张图片

(--OE)为Output Enable低电平有效,简单来说(--OE)为低电平时才有输出(J24中GND与OE短接);P35,P36,P4控制右边QA到QH的输出; (--SRCLR)串行清零端,SRCLK串行时钟,SER串行数据,共同控制输出;QH'是用来多片级联的。

51单片机——LED点阵屏显示图形_第4张图片

 左:移位寄存器;右:输出缓存器

SER:串行数据,在时钟的激励下一个一个数据从这个引线中出去,给移位寄存器输入数据,SERCLK:串行时钟,时钟每来一个上升沿,数据就会向下移位,数据一位一位往下走;RCLK:寄存器时钟如果寄存器时钟有上升沿的话,就会把移位寄存器中的数据同时搬运到输出缓存器中去。

2.源码

#include 

sbit RCK=P3^5;		//RCLK
sbit SCK=P3^6;		//SRCLK
sbit SER=P3^4;		//SER

#define MATRIX_LED_PORT		P0 //宏定义P0口

//延时函数
void Delay(unsigned int xms)
{
 unsigned char i,j;
	while(xms)
	{
	 i=2;
		j=239;
		do
		{
		while(--j);
		}while(--i);
	   xms--;
	}
}

void _74HC595_WriteByte(unsigned char Byte)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		SER=Byte&(0x80>>i);
		SCK=1;//时钟每来一个上升沿,数据就会往下移,循环8次,
              //把发送来的串行数据全部放到移位寄存中去;
		SCK=0;//为下次移位做准备;
	}
	RCK=1; //把移位寄存器的数据搬运到输出缓存器中;
	RCK=0;
}


void MatrixLED_ShowColumn(unsigned char Column,Data)
{
	_74HC595_WriteByte(Data);
	MATRIX_LED_PORT=~(0x80>>Column);//选中列; 1000 0000取反0111 1111即选中第一列
	Delay(1);
	MATRIX_LED_PORT=0xFF;//消影
}

void main()
{
	SCK=0;//单片机上电初始化后,所有I/O口都为高电平,所以上电后RCLK和SRCLK要置零;
	RCK=0;
	while(1)
	{
		//MatrixLED_ShowColumn(0,0x24);//显示第一列
		MatrixLED_ShowColumn(1,0x18);//显示第二列
		MatrixLED_ShowColumn(2,0x24);
		MatrixLED_ShowColumn(3,0x22);
	    MatrixLED_ShowColumn(4,0x11);
		MatrixLED_ShowColumn(5,0x22);
		MatrixLED_ShowColumn(6,0x24);
		MatrixLED_ShowColumn(7,0x18);
	}
}

你可能感兴趣的:(51单片机,51单片机,单片机,嵌入式硬件)