资讯详情

机智云(esp8266)与74hc595控制16路继电器

机智云( esp8266)与74hc控制16路继电器 说明:使用74hc595编码器增加8266io只要使用三个口功能,就可以使用口功能io16路继电器。

简单介绍:

74HC595: 74HC位移缓存器为8位串行输入和并行输出:并行输出为三态输出。在SCK 串行数据由SDL输入内部的8位移缓存器Q7’输出,并行输出LCK将8位位移缓存器的数据存储到8位并行输出缓存器。串行数据输入端OE并行输出端的输出值等于并行输出缓存器存储的值。而当OE为高电位,即当输出关闭时,并行输出端将保持在高阻抗状态。

使用方法: 74595的数据端: Q0–Q7: 八个并行输出端可直接控制数字管的八段。 Q7’: 级联输出端。将其连接到595DS端。 DS: 串行数据输入端,级联连接到一级Q7’。 74595控制端说明: /MR(10脚): 移位寄存器的数据通常是低电清零的。通常收到VCC防止数据清零。 SH_CP(11脚):上升沿时数据寄存器的数据移位。Q0->Q1->Q2–>Q3–>…–>Q7.沿移位寄存器数据下降不变。(脉冲宽度:5V大于几十纳秒。我通常选择微秒级) ST_CP(12脚):沿时移位寄存器数据上升到数据存储寄存器,沿时存储寄存器数据下降不变。通常我会ST_CP当移位结束时,将其放置为低电平ST_CP端产生正脉冲(5)V时间大于几十纳秒。我通常选择微秒级)更新显示数据。 /OE(13脚): 高电源通常禁止输出(高电阻状态)。如果单片机的引脚不紧,用引脚控制可以很容易地产生闪烁和熄灭效果。它比通过数据端移位控制节省时间和精力。 注1)74164和74595功能相似,均为8位串行输入并行输出移位寄存器。74164驱动电流(25mA)比74595(35mA)小,14脚封装,体积小。 2)74595的主要优点是有数据存储和寄存器,输出端的数据可以在移位过程中保持不变。这在串行速度慢的情况下非常有用,数字管没有闪烁感。 3)595串入并出具定功能移位寄存器,使用方法非常简单,如下面的真值表,正常使用时ST_CP为低电平, /OE低电平DS每次输入一个数据,串行输入时钟SH_CP上升边缘有效一次,直到八位数据输入完成,输出时钟ST_CP此时,输入的数据被发送到输出端。 我们在这里使用它的二次电路,用两个595输出16路,如图所示:

机智云: 一个成熟的物联网平台,有自己的内部协议,只需要在平台上生成代码,稍微修改一下,将固件烧到8266,就可以链接到平台,平台提供手机开源app,8266链接可以通过手机配网链接上网,更商业化。(可以去官网详细了解) 8266与74hc595驱动程序: /*

  • relay16.c
  • Created on: 2018年11月2日
  •  Author: 小罗 

*/ #include “ets_sys.h” #include “driver/relay16.h” #include “osapi.h” #include “eagle_soc.h” ///放在初始化函数中:void ICACHE_FLASH_ATTR user_init(void) void ICACHE_FLASH_ATTR hc595Iinit(void) //gpio初始化 { PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTMS_U,FUNC_GPIO14); PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U,FUNC_GPIO13); PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12); PIN_PULLUP_EN(PERIPHS_IO_MUX_MTMS_U);//上拉使能 PIN_PULLUP_EN(PERIPHS_IO_MUX_MTCK_U); PIN_PULLUP_EN(PERIPHS_IO_MUX_MTDI_U); gpio_output_set(0,0,GPIO_ID_PIN(12)|GPIO_ID_PIN(13)|GPIO_ID_PIN(14),0); hc595sendbyte(0xffff); //关闭所有继电器 os_printf(“hc595Iinit\r\n”); } void hc595sendbyte(unsigned int temp) { unsigned char i; for(i=0;i<16;i ) { if((temp<<i) & 0x8000) DS1; else DS0; SH0; os_delay_us(5); SH1; } ST0; os_delay_us(5); ST1; } /将某个人改为0/1,flag=0/1, position=1-16/ unsigned int bit_set(unsigned int data,unsigned char flag,unsigned char position ) { if (flag)//置1 { data |= (1<<position-1); } else { data &= ~(1<<position-1); } return data; } //放在int8_t ICACHE_FLASH_ATTR gizwitsEventProcess(eventInfo_t *info, uint8_t data, uint32_t len)使用 //gizwits_product.c ///按这些按钮改变网络 //sta=1/0 void relay(unsigned char sta,unsigned char n) { //继电器开关状态,1开0关 static unsigned int state=0xffff;///当前开关状态 switch(n) { case 1: if(sta)state=bit_set(state,1、1);//第一位置1 else state=bit_set(state,0,1);//第一位0 break; case 2: if(sta)state=bit_set(state,1、2);//第x位置1 else state=bit_set(state,0,2);//第x位置0 break; case 3: if(sta)state=bit_set(state,1、3);//第x位置1 else state=bit_set(state,0,3);//第x位置0 break; case 4: if(sta)state=bit_set(state,1、4);//第x位置1 else state=bit_set(state,0,4);//第x位置0 break; case 5: if(sta)state=bit_set(state,1、5);//第x位置1 else state=bit_set(state,0,5);//第x位置0 break; case 6: if(sta)state=bit_set(state,1、6);//第x位置1 else state=bit_set(state,0,6);//第x位置0 break; case 7: if(sta)state=bit_set(state,1、7);//第x位置1 else state=bit_set(state,7);//第x位置0 break; case 8: if(sta)state=bit_set(state,1、8);//第x位置1 else state=bit_set(state,0,8);//第x位置00 break; case 9: if(sta)state=bit_set(state,1、9);//第x位置1 else state=bit_set(state,0,9);//第x位置00 break; case 10: if(sta)state=bit_set(state,1、10);/第x位置1 else state=bit_set(state,0,10) break; case 11: if(sta)state=bit_set(state,1、11) else state=bit_set(state,0,11) break; case 12: if(sta)state=bit_set(state,1、12);//X位置1 else state=bit_set(state,0,12) break; case 13: if(sta)state=bit_set(state,1,13);//第x位置1 else state=bit_set(state,0,13) break; case 14: if(sta)state=bit_set(state,1、14) else state=bit_set(state,0,14) break;case 15: if(sta)state=bit_set(state,1,15);//第x位置1 else state=bit_set(state,0,15);//第x位置0 break; case 16: if(sta)state=bit_set(state,1,16);//第x位置1 else state=bit_set(state,0,16);//第x位置0 break; default: //断掉所有继电器 //断开继电器 break; } hc595sendbyte(state);//发送state的状态 } /

  • relay16.h
  • Created on: 2018年11月2日
  •  Author: 小罗
    

/ #ifndef APP_INCLUDE_DRIVER_RELAY16_H_ #define APP_INCLUDE_DRIVER_RELAY16_H_ #include <stdio.h> #include <c_types.h> #include <gpio.h> #include <eagle_soc.h> #define DS1 GPIO_OUTPUT_SET(GPIO_ID_PIN(14), 1) #define DS0 GPIO_OUTPUT_SET(GPIO_ID_PIN(14), 0) #define ST0 GPIO_OUTPUT_SET(GPIO_ID_PIN(13), 0)//输出低 #define ST1 GPIO_OUTPUT_SET(GPIO_ID_PIN(13), 1)//输出高 #define SH0 GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 0)//输出低 #define SH1 GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 1)//输出高 void hc595Iinit(void); void hc595sendbyte(unsigned int temp); unsigned int bit_set(unsigned int data,unsigned char flag,unsigned char position ); void relay(unsigned char sta,unsigned char n); #endif / APP_INCLUDE_DRIVER_RELAY16_H_ */ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 把这俩程序添加到工程文件里就可以了,稍作修改编译 原文链接:https://blog.csdn.net/weixin_43796593/article/details/84639021

标签: 54继电器sta继电器101继电器10q继电器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台