拓展Arduino控制引脚---74HC59

视频来源:https://www.youtube.com/watch?v=OiKgWRRWj4c&list=PLdckmk1Jf8MYOED98iY13wdGi52h-O69X&index=12
bilibili:https://www.bilibili.com/video/BV1YW411Z76E?t=33&p=11

原理介绍

74HC59芯片电路原理图如下:
在这里插入图片描述
除去VCC,GND两个引脚外,共有8个输出引脚,在使用时,OE引脚接地,MR引脚置高位,DS,ST_CP,SH_CP为信号输入引脚
为了更好的去理解这个原件的工作逻辑,可将DS,ST_CP,SH_CP三个引脚分别比作“资料块”,“大平台”,“活塞”

在这里插入图片描述
其工作原理其实也很简单,当ST_CP也就是我们的大平台置低电位时,可以写入数据,通过给DS赋值,并使用SH_CP将其写入序列,之后再将ST_CP置高位,就可以的到自己想要的数据输出了。
在这里插入图片描述
在这里插入图片描述

代码演示V1.0

跟着原理来敲一遍代码:

/*74HC59实例*/
int big = 2;
int push = 3;
int datain = 4;

void setup() {
  pinMode(big,OUTPUT);			
  pinMode(push,OUTPUT);
  pinMode(datain,OUTPUT);
  
}

void loop() {
  digitalWrite(big,LOW);
  //No.1
  digitalWrite(push,LOW);
  digitalWrite(datain,1);
  digitalWrite(push,HIGH);
  //No.2
  digitalWrite(push,LOW);
  digitalWrite(datain,0);
  digitalWrite(push,HIGH);
  //No.3
  digitalWrite(push,LOW);
  digitalWrite(datain,1);
  digitalWrite(push,HIGH);
  //No.4
  digitalWrite(push,LOW);
  digitalWrite(datain,0);
  digitalWrite(push,HIGH);
  //No.5
  digitalWrite(push,LOW);
  digitalWrite(datain,1);
  digitalWrite(push,HIGH);
  //No.6
  digitalWrite(push,LOW);
  digitalWrite(datain,0);
  digitalWrite(push,HIGH);
  //No.7
  digitalWrite(push,LOW);
  digitalWrite(datain,1);
  digitalWrite(push,HIGH);
  //No.8
  digitalWrite(push,LOW);
  digitalWrite(datain,0);
  digitalWrite(push,HIGH);

  digitalWrite(big,HIGH);
  
}

代码优化V2.0

使用函数对代码进行优化

/*74HC59实例*/
int big = 2;
int push = 3;
int datain = 4;

void setup() {
  pinMode(big,OUTPUT);
  pinMode(push,OUTPUT);
  pinMode(datain,OUTPUT);
  
}

void loop() {
  digitalWrite(big,LOW);
  //No.1
  putOne();
  //No.2
  putZero();
  //No.3
  putOne();
  //No.4
  putZero();
  //No.5
  putOne();
  //No.6
  putZero();
  //No.7
  putOne();
  //No.8
  putZero();

  digitalWrite(big,HIGH);
  
}

void putOne(){
  digitalWrite(push,LOW);
  digitalWrite(datain,1);
  digitalWrite(push,HIGH);
}
void putZero(){
  digitalWrite(push,LOW);
  digitalWrite(datain,0);
  digitalWrite(push,HIGH);
}

代码优化V3.0

int big = 2;
int push = 3;
int datain = 4;

void setup() {
  pinMode(big,OUTPUT);
  pinMode(push,OUTPUT);
  pinMode(datain,OUTPUT);
  
}

void loop() {
  digitalWrite(big,LOW);
  //No.1
  putnumber(1);
  //No.2
  putnumber(0);
  //No.3
  putnumber(1);
  //No.4
  putnumber(0);
  //No.5
  putnumber(1);
  //No.6
  putnumber(0);
  //No.7
  putnumber(1);
  //No.8
  putnumber(0);

  digitalWrite(big,HIGH);
  
}

void putnumber(int number){
  digitalWrite(push,LOW);
  digitalWrite(datain,number);
  digitalWrite(push,HIGH);
}

代码优化v4.0

使用数组+for循环+自建函数

int big = 2;
int push = 3;
int datain = 4;
int datainput[8] = {1,0,1,0,1,0,1,0};

void setup() {
  pinMode(big,OUTPUT);
  pinMode(push,OUTPUT);
  pinMode(datain,OUTPUT);
  
}

void loop() {
  digitalWrite(big,LOW);
  for(int i=0;i<8;i++){
  putmunber(datainput[i]);
  }
}

void putnumber(int number){
  digitalWrite(push,LOW);
  digitalWrite(datain,number);
  digitalWrite(push,HIGH);
}

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值