开发板原理图:
(在这里我们只需要像数码管,按键扫描一样赋高低电平即可选中)
下面我们讲讲工作原理:(左边是串行数据,右边是输出缓存)
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);
}
}