51单片机-第六节-LED点阵屏与_74HC595_

 

1.LED点阵屏的结构:

与数码管相同(数码管只是把LED排成8字结构),8*8的点阵屏有8+8=16个引脚。  

双色点阵屏有8+2*8=24个引脚,结构如图:

注:点阵屏引脚多为乱序排列, 控制需看单片机说明。

2.LED控制方法:

同动态数码管,利用人眼延迟,扫描法。

3.51单片机LED点阵屏原理:

其中P00-7为引脚,但D0-7是链接到74HC595上的。

4._74HC595_介绍:

74HC595是串行输入并行输出的移位寄存器,常用于IO口扩展。

原理:一位一位对8个位(D0-7)进行赋值,再一起输出。理论上来说,只要时间要求不高,可以             对很多位(32,64)进行赋值再输出,从而3位控制很多位。

其中SER为赋值的数据,SETCLK可使数据向下移位,RCLK会将缓存的数据同时输出。

例:要使D0-7依次为 0000 0101:

令SER=1,SETCLK=0,再令SETCLK=1,可使SER的1赋值给缓存区,得到1。

随后令SER=0,SETCLK=0,再令SETCLK=1,可使SER的0赋值得到 01。

依次类推,得到 0000 0101。

最后令RCLK=1输出。

5. sfr 与 sbit :寄存器声明:

sfr:声明寄存器

例:sfr P0 = 0x80;声明P0口寄存器,地址为0x80。

sbit:声明特殊位

例:sbit P0_1 = 0x81;声明P0寄存器的第一位。

例2:sbit RCLK = P3^5;给P3的第五位起别名RCLK。

6.集成_74HC595_使用函数:

使用方法:直接将要要传入的8位数据传给函数。

//74HC595写入字节,参数为要写入的字节
void _74HC595_WriteByte(unsigned char Byte)
{
	unsigned char i;
	for (i = 0; i < 8; i++)
	{
		SER = Byte & (0x80>>i);//8位赋值1位,非0赋值1,0赋0
		SCK = 1;//移进去
		SCK = 0;//复位
	}
	RCK = 1;
	RCK = 0;
}

7.实战:静态-笑脸显示:

void MatrixLED_ShowColumn(unsigned char Column, unsigned char Data)
{
	_74HC595_WriteByte(Data);
	P0 = ~(0x80 >> Column) ; //确定亮的是第几列
}
void main()
{
	SCK = 0;
	RCK = 0;
	while (1)
	{
		MatrixLED_ShowColumn(0, 0x3C);
		MatrixLED_ShowColumn(1, 0x42);
		MatrixLED_ShowColumn(2, 0xA9);
		MatrixLED_ShowColumn(3, 0x85);
		MatrixLED_ShowColumn(4, 0x85);
		MatrixLED_ShowColumn(5, 0xA9);
		MatrixLED_ShowColumn(6, 0x42);
		MatrixLED_ShowColumn(7, 0x3C);
	}
}

8.实战:动态- hello! 流动字幕:

unsigned char Animation[] = { 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0xFF,0x08,0x08,0x08,0xFF,0x00,0x0E,0x15,
	0x15,0x15,0x08,0x00,0x7E,0x01,0x02,0x00,
    0x7E,0x01,0x02,0x00,0x0E,0x11,0x11,0x0E,
	0x00,0x7D,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
void main()
{
	unsigned char i, Offset = 0, Count = 0;
	MatrixLED_Init();
	while (1)
	{
		for (i = 0; i < 8; i++)
		{
			MatrixLED_ShowColumn(i, Animation[i + Offset]);
		}
		Count++;
		if (Count > 10)
		{
			Count = 0;
			Offset++;
			if (Offset > 40)
			{
				Offset = 0;
			}
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值