您好,欢迎来到伴沃教育。
搜索
您的当前位置:首页51单片机74HC595实现LED交替亮以及级联

51单片机74HC595实现LED交替亮以及级联

来源:伴沃教育

文章目录

  • 学习单片机经常忘记所以想记录一下
  • 一、74HC595介绍
  • 二、实现LED的亮暗亮交替
    • 原理图的设计
    • 实现代码
  • 三、595级联的实现
    • 原理图的设计
    • 实现代码
  • 总结


前言

学习单片机的过程刚好学到了74HC595,就想记录下来以免忘记了。


一、74HC595的简单介绍?

74HC595是什么?

74hc595是具有8位移位寄存器可一个存储器,三态输出功能。移位寄存器和存储器是分别的时钟。
工作原理:
数据在SHcp的上升沿输入,在STcp的上升沿进入的存储器中去,如果两个是中联在一起,则移位寄存器总是比存储器早一个脉冲。

这里用我自己的话再解释一下哈(以下说的数据均是串行输入的值转换成二进制之后的数据)

1.我们给DS引脚一个值,作为输入数据来源

2.串行数据的存入:我们需要利用移位寄存器,将数据一位一位地输入进去,需要知道的是我们需要将SHCP保持在一个处于上升沿状态,否则会存不进去。

对于如何将数据一位一位存进去:这里可能有点难以理解,就是595它的输入和输出的对应有点像数据结构中栈的特点(先进后出,后进先出)。又或者可以理解成一个只有入口的圆筒,我们从最后一位开始依次放进去,全部放进去之后在从圆筒的表面依次拿出。

例如:输入的数据转换成二进制是01010101, 如果按照我们常规的逻辑,输出的并行数据可能是(高到低)      01010101。但是实际上经过处理之后并行输出的数据就是    (低到高)      01010101


74HC595元件图片以及相关引脚显示:

 (注:左边的名称从上到下依次对应元件左边的引脚,右边很明显,就用说了嘿嘿)

二、实现LED的亮暗交替

1.原理图的设计

2.实现代码

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

//Òý½ÅÉèÖÃ
sbit SHCP=P2^0;
sbit STCP=P2^2;
sbit DS=P2^1;



	//595ʵÏÖº¯Êý
void SendBy595(uchar value)
{
	uchar i;
	
	SHCP=STCP=0;

	
	for(i=0;i<8;i++)
	{
		
		DS=value>>7;
		value<<=1;
		SHCP=1;
		_nop_();
		_nop_();
		SHCP=0;
	}
	
	
	
		STCP=1;
		_nop_();
		_nop_();
		STCP=0;
	
}
	
void main()
{
	
	P2=0x00;
	SendBy595(85);
	while(1);
}
	

三、595级联的实现

1.原理说明:

两个595级联就不只是连接8个LED灯了,而是16个LED灯。但是我们知道的是595输入的串行数据是一个8位的二进制数,那这个要怎么设计呢?

这就不得不将Q7'使用起来,它的作用就是当移位寄存器中的数据多于8位时,我们将多余的数据进行移出。因此在原理图的设计中,我们需要将第一个595的控制移出为引脚与第二个595的串行数据输入引脚进行连接,同时第二个595的SHTP,SCTP依旧和前面一个595的相同引脚连接到单片机上的同一引脚。

2.原理图设计


3.实现代码

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

//ÉèÖÃÒý½Å
sbit SHCP=P2^0;
sbit STCP=P2^1;
sbit DS=P2^2;



	
void SendBy595(uchar value)
{
	uchar i;
	uchar j=value;
	//³õʼSHCP  STCPÒý½Å
	SHCP=STCP=0;


	for(i=0;i<8;i++)
	{
		
		DS=value>>7;
		value<<=1;
		SHCP=1;
		_nop_();
		_nop_();
		SHCP=0;
	}
	
	//½øÐÐÏÂÒ»¸ö°Ëλ¶þ½øÖƵĴ®ÐÐÊý¾ÝÊäÈë
	for(i=0;i<8;i++)
	{
		
		DS=j>>7;
		j<<=1;
		SHCP=1;
		_nop_();
		_nop_();
		SHCP=0;
	}
	//²¢ÐÐÊä³öÌõ¼þÉèÖÃ
	STCP=1;
		_nop_();
		_nop_();
		STCP=0;
}
	
void main()
{
	
	P2=0xff;
	SendBy595(85);
	while(1);
}
	

总结

以上就是我个人目前对于74HC595的原理及使用方法的一个理解,可能存在一些错误认识,欢迎各位指出。

作者:Vuko-wxh

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- bangwoyixia.com 版权所有 湘ICP备2023022004号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务