CD74HC4067模拟开关指食用指南——Arduino为例

 

CD74HC4067 16 通道多路复用器功能

当电路中有许多模拟输入时,可以使用 CD74HC4067 16 通道模拟数字多路复用器模块。

在这种情况下,每次都需要选择并处理其中一个输入。

此多路复用器可用于从 16 个模拟输入中进行选择。

有四个 S0-3 引脚,通过提供适当的值,将其中一个模拟输入设置为 SIG 引脚中的输出。

(总感觉就是个3-8译码器)

CD74HC4067 16 通道多路复用器引脚排列

该模块有24个引脚:

  • VCC:模块电源-5V
  • GND:接地
  • EN:启用引脚(低电平有效)
  • S0-3:选择16个模拟输入引脚之一作为最终输出信号
  • C0-15:模拟输入
  • SIG:输出信号

 

连接方式

 按照上图连接分压电路。将以下代码上传到Arduino。上传代码后,打开串行监视器。

 

 /* 
Modified on Nov 28, 2020
Modified by MehranMaleki from Arduino Examples
Home
*/


//选择器输入引脚
int s0 = 8;
int s1 = 9;
int s2 = 10;
int s3 = 11;

//SIG PIN的选择
int SIG_pin = 0;


void setup(){
  pinMode(s0, OUTPUT); 
  pinMode(s1, OUTPUT); 
  pinMode(s2, OUTPUT); 
  pinMode(s3, OUTPUT); 

  digitalWrite(s0, LOW);
  digitalWrite(s1, LOW);
  digitalWrite(s2, LOW);
  digitalWrite(s3, LOW);

  Serial.begin(9600);
}


void loop(){

  //Loop through and read all 16 values
  for(int i = 0; i < 16; i ++){
    Serial.print("Value at channel ");
    Serial.print(i);
    Serial.print("is : ");
    Serial.println(readMux(i));
    delay(1000);
  }

}


float readMux(int channel){
  int controlPin[] = {s0, s1, s2, s3};

  int muxChannel[16][4]={
    {0,0,0,0}, //channel 0
    {1,0,0,0}, //channel 1
    {0,1,0,0}, //channel 2
    {1,1,0,0}, //channel 3
    {0,0,1,0}, //channel 4
    {1,0,1,0}, //channel 5
    {0,1,1,0}, //channel 6
    {1,1,1,0}, //channel 7
    {0,0,0,1}, //channel 8
    {1,0,0,1}, //channel 9
    {0,1,0,1}, //channel 10
    {1,1,0,1}, //channel 11
    {0,0,1,1}, //channel 12
    {1,0,1,1}, //channel 13
    {0,1,1,1}, //channel 14
    {1,1,1,1}  //channel 15
  };

  //设置PIN
  for(int i = 0; i < 4; i ++){
    digitalWrite(controlPin[i], muxChannel[channel][i]);
  }

  //读取SIGPIN
  int val = analogRead(SIG_pin);

  //返回阻值
  float voltage = (val * 5.0) / 1024.0;
  return voltage;
}

 不要看网上的教程悬空EN引脚!!!

由于单片机时序不精准,每一次循环后时序可能有混乱

尽量通过使能引脚在循环开始时使能,结束时候失能CD4067

 

 

posted @ 2025-03-29 18:07  mcwhirr  阅读(188)  评论(0)    收藏  举报