本人使用的51开发板为 郭天祥C51 TX-1C开发板 ;
本笔记部分根据B站up主:江科大自化协、郭天祥的教学视频 整理得到
74HC573 和 74HC595 是两种完全不同的器件。74HC573 是个锁存器,而 74HC595 则是一个串转并的芯片。
74HC573 锁存器
74HC573 为锁存器,输入并行信号输出并行信号。
LE:锁存器的锁存端。LE 为高,输出端跟随着输入端变化而变化;LE 为低时,输出端保持着先前 LE 为高的值不变
OE:输出使能。一般为低电平
从上图右边可知:
当 OE 为高电平:输出为高阻态;
当 OE 为低电平:锁存器的锁存端 LE 为高电平时,那么输入端为高电平,输出端也为高电平,输入端为低电平,输出端也为低电平;锁存器的锁存端 LE 为低电平时,输出端保持原来的值不变,相当于值被锁存住了。
同时,锁存器的主要目的是为了节省 IO 口(驱动数码管)和增加驱动电流。
74HC595 移位寄存器
74HC595 是串行输入并行输出的移位寄存器,可用 3 根线输入串行数据,8 根线输出并行数据,多片级联后,可输出 16 位、24位、32位等,常用于 IO 口扩展。
OE:输出使能。一般为低电平
SERCLR:串行清 0 端。接VCC,表示不清 0
SER:串行数据,在时钟的激励下一位一位传输
SERCLK:串行时钟(时钟每给一个上升沿,数据向下进行移位一次)
RCLK:寄存器时钟(寄存器时钟每一次上升沿,这 8 位数据同时搬运到右边输出缓存寄存)
//main.c
#include <REGX52.H>
#include "intrins.h"
#include "delay.h"
sbit RCK = P3^5;
sbit SCK = P3^6;
sbit SER = P3^4;
void _74HC595_WriteByte(unsigned char byte);
void MatrixLED_ShowColumn(unsigned char column, unsigned char byte);
void main(void)
{
SCK = 0;
RCK = 1;
while(1)
{
MatrixLED_ShowColumn(0, 0x80);
MatrixLED_ShowColumn(1, 0x40);
MatrixLED_ShowColumn(2, 0x20);
MatrixLED_ShowColumn(3, 0x10);
}
}
void _74HC595_WriteByte(unsigned char byte)
{
unsigned char i = 0;
for(i = 0; i < 8; i++)
{
SER = byte & (0x80 >> i);
SCK = 1;
SCK = 0;
}
RCK = 1;
RCK = 0;
}
void MatrixLED_ShowColumn(unsigned char column, unsigned char byte)
{
_74HC595_WriteByte(byte);
P0 = ~(0x80 >> column);
delay_ms(1); //消影
P0 = 0xff;
}
输出结果:
#include <REGX52.H>
#include "intrins.h"
#include "delay.h"
sbit RCK = P3^5;
sbit SCK = P3^6;
sbit SER = P3^4;
#define MATRIXLED_PORT P0
void _74HC595_WriteByte(unsigned char byte);
void MatrixLED_ShowColumn(unsigned char column, unsigned char byte);
void main(void)
{
SCK = 0;
RCK = 1;
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);
}
}
void _74HC595_WriteByte(unsigned char byte)
{
unsigned char i = 0;
for(i = 0; i < 8; i++)
{
SER = byte & (0x80 >> i);
SCK = 1;
SCK = 0;
}
RCK = 1;
RCK = 0;
}
void MatrixLED_ShowColumn(unsigned char column, unsigned char byte)
{
_74HC595_WriteByte(byte);
MATRIXLED_PORT = ~(0x80 >> column);
delay_ms(1);
MATRIXLED_PORT = 0xff;
}
#include <REGX52.H>
#include "MatrixLED.h"
#include "delay.h"
unsigned char code Animation[]={0x3C,0x42,0xA9,0x85,0x85,0xA9,0x42,0x3C,
0x3C,0x42,0xA1,0x85,0x85,0xA1,0x42,0x3C,
0x3C,0x42,0xA5,0x89,0x89,0xA5,0x42,0x3C};
void main(void)
{
unsigned char i, offset = 0, count;
SCK = 0;
RCK = 1;
while(1)
{
for(i = 0; i < 8; i++)
{
MatrixLED_ShowColumn(i, Animation[i + offset]);
}
count++;
if(count >= 15)
{
count = 0;
offset += 8;
if(offset > 16)
{
offset = 0;
}
}
}
}
版权声明:本文为CSDN博主「叫我谢布斯」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiebs/article/details/122248815
本人使用的51开发板为 郭天祥C51 TX-1C开发板 ;
本笔记部分根据B站up主:江科大自化协、郭天祥的教学视频 整理得到
74HC573 和 74HC595 是两种完全不同的器件。74HC573 是个锁存器,而 74HC595 则是一个串转并的芯片。
74HC573 锁存器
74HC573 为锁存器,输入并行信号输出并行信号。
LE:锁存器的锁存端。LE 为高,输出端跟随着输入端变化而变化;LE 为低时,输出端保持着先前 LE 为高的值不变
OE:输出使能。一般为低电平
从上图右边可知:
当 OE 为高电平:输出为高阻态;
当 OE 为低电平:锁存器的锁存端 LE 为高电平时,那么输入端为高电平,输
版权声明:本文为CSDN博主「叫我谢布斯」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiebs/article/details/122248815
暂无评论