C51 (点阵led灯动画)

开发板原理图:

在这里插入图片描述
在这里插入图片描述
(在这里我们只需要像数码管,按键扫描一样赋高低电平即可选中)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
下面我们讲讲工作原理:(左边是串行数据,右边是输出缓存)
1.SER : 输入寄存器, 给左边的串行数据进行输入;
2.SERCLK : 串行时钟,上升沿移位寄存器,将寄存器连续赋予低–>高电平,会将SER输入的数据一位一位的往下移动;
3.RCLK : 寄存器时钟,上升沿锁存(程序员根据需要人为控制),将八位数据同时移动到输出缓存区
4.QH` : 当数据满了之后,再从SER中输入串行数据,会将数据移动到(QH’)下一片74H595(到一定程度,一次移动到缓存区就会像动漫一样)

在这里插入图片描述
(这里只需要把点阵上的行列(D1~D8)赋予高电平,在纵列的(P0->P7)赋予相应的低电平,即可把相应的LED灯选中)

下面是其中控制的三个引脚的功能:(参考的是74hc95中文手册)

在这里插入图片描述

QH‘就是串行数据输出,用在多个芯片级连上,数据进去经过8个时钟周期后第一个数据会出现在QH’上。SRCLK是输入数据移位时钟,时序逻辑的时钟。RCLK是储存寄存器的时钟,串行数据经过8个时钟周期变成并行一个字节,同时输出就得有一个8×字节 大小的储存器给暂存一下。

在这里插入代码片:
#include <REGX52.H>
#include "Delay.h"

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

#define MATRIX_LED_PORT		P0

/**
  * @brief  74HC595写入一个字节
  * @param  Byte 要写入的字节
  * @retval 无
  */
void _74HC595_WriteByte(unsigned char Byte)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		SER=Byte&(0x80>>i);
		SCK=1;
		SCK=0;
	}
	RCK=1;
	RCK=0;
}

/**
  * @brief  LED点阵屏显示一列数据
  * @param  Column 要选择的列,范围:0~7,0在最左边
  * @param  Data 选择列显示的数据,高位在上,1为亮,0为灭
  * @retval 无
  */
void MatrixLED_ShowColumn(unsigned char Column,Data)   //行  ,列
{
	_74HC595_WriteByte(Data);
	MATRIX_LED_PORT=~(0x80>>Column);
	Delay(1);
	MATRIX_LED_PORT=0xFF;
}

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);
	}
}


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

The endeavor

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值