🎊专栏【51单片机】
🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。
🎆音乐分享【Waiting For Love】
大一同学小吉,欢迎并且感谢大家指出我的问题🥰
目录
🍔74HC595图片
🍔74HC595原理
🍔”上升沿“是什么意思
🎆LED点阵屏显示图形
🎈现象
🎈代码(三部分)
main.c
Delay.c
Delay.h
🎈代码分析
建议小白仔细阅读下面的内容
🍔74HC595图片
🍔74HC595原理
给SERCLK这个上升沿移位给低电平(因为上电的时候默认是高电平):比如给SER输入一个值(第一个值是最高位),然后再给上升沿一位给高电平,进行移位,当给最到满了给上升沿锁存放置高电平,存放在右边,
QH’指的是多片级联,如果超过8位的时候就使用这个多片级联,这样就可以实现三位控制八位,十六位,三十二位等等这种,大大节省了io口,常常用于io口的扩展。
刚开始是空的,然后后面会从SER口传入数据
RCLK有什么用呢
看下图
就是把左边的复制到右边去,进行存储
如果存满了,还从SER口传入数据 ,会怎么样呢
会从右边的QH',再开辟一个空间进行存储
🍔”上升沿“是什么意思
在数字电路中,“上升沿”是指当一个数字信号由低电平变为高电平的瞬间。也就是说,在上升沿之前这个信号的电平始终是低电平,在上升沿之后这个信号的电平就变成了高电平。
与“上升沿”相对应的是“下降沿”,即当一个数字信号由高电平变为低电平的瞬间。在下降沿之前这个信号的电平始终是高电平,在下降沿之后这个信号的电平就变成了低电平。
在数字电路中,上升沿和下降沿通常被用作时序分析和时序控制的基础。比如,在移位寄存器中,时钟脉冲的上升沿通常被用来控制数据的向寄存器内部移动。当时钟脉冲发生上升沿时,数据就会被“锁存”到寄存器内部,然后在下一个时钟周期内再根据时钟脉冲的控制进行移位操作。
🎆LED点阵屏显示图形
🎈现象
🎈代码(三部分)
main.c
#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);
}
}
Delay.c
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
不明白这一段代码怎么写的同学建议看一下这一篇博客
【51单片机】使用STC烧录软件自动生成延时代码_在下小吉.的博客-CSDN博客
Delay.h
#ifndef __DELAY_H__
#define __DELAY_H__
void Delay(unsigned int xms);
#endif
🎈代码分析
建议小白仔细阅读下面的内容
🥰如果大家有不明白的地方,或者文章有问题,欢迎大家在评论区讨论,指正🥰