零知开源快速入门17-三个IO控制8个LED灯

在之前我们控制LED的时候,都是一个LED就需要一个对应的引脚。但是在我们板子引脚有限的情况下,这样使用就很浪费了,我们这里加上一个74HC595模块来实现只用3个IO引脚来控制8个LED。74HC595实际上就是一个串行输入并行输出的位移缓存器,因此它能使用少量IO来控制多个输出,这在引脚有限的情况下要控制很多LED是非常有用的。

一、工具原料

电脑,windows系统
零知开发板
micro-usb线
LED灯红色4个,绿色4个
220Ω 电阻8个
74HC595模块一个
面包板一个+若干跳线

二、硬件连接

1、硬件连接原理图

2、实际连线

三、方法步骤

1、打开零知实验室软件开发工具,然后新建项目,输入以下代码:

2、按照之前的方式先【编译】,然后【上传】到开发板中。


							
	/**
	*    文件: 74HC595-8led.ino      by 零知实验室(www.lingzhilab.com)
	*    -- 零知开源,让电子制作变得更简单! --
	*    时间: 2018/06/27 13:39
	*    说明: 使用74HC595 模块控制8个led,显示从0-255的二进制编码,
	**/
	
	int data  = 1;//74HC595的14脚 数据输入引脚SI
	int clock = 3;//74hc595的11脚 时钟线 SCK
	int latch = 2;//74hc595的12脚 输出存储器锁存线RCK
	
	// the setup routine runs once when you press reset:
	void setup() {
	    // put your setup code here, to run once:
	        pinMode(data, OUTPUT);
	        pinMode(clock, OUTPUT);
	        pinMode(latch, OUTPUT);
	}
	
	// the loop routine runs over and over again forever:
	void loop() {
	    //8个灯,对应着74HC595的8个IO口,也就是有8位的二进制数,
	    //二进制数中1表示灯亮,0表示灯灭,那么8个灯就有256种组合  
	        for(int i = 0; i <256; i++)
	        {
	                digitalWrite(latch, LOW);
			//串行数据输出,MSBFIRST表示高位在先,~i表示i按位取反
	                shiftOut(data, clock, MSBFIRST, ~i);
	                digitalWrite(latch, HIGH);//锁存
	                delay(500);
	        }
	}										
						
							
						

四、成果展示

上面步骤成功完成后,我们就可以看到预期的结果了,如下: