嵌入式

Arduino IO扩展神器74HC595

2022-07-03  本文已影响0人  Charles2018
原型 引脚 引脚说明

实验一

将一组数据11110010通过74HC595驱动8个LED 只占用处理器三个IO口。

电路图

代码

int SHCP = PD2;
int STCP = PD3;
int DS = PD4;

void setup()
{
    pinMode(SHCP, OUTPUT);
    pinMode(STCP, OUTPUT);
    pinMode(DS, OUTPUT);
}

void loop()
{
    digitalWrite(STCP, LOW);        // 将STCP加低电平让芯片准备好接受数据
    show();
    digitalWrite(STCP,HIGH);        // 将STCP引脚恢复到高电平
}

void show() 
{
    digitalWrite(SHCP, LOW);
    digitalWrite(DS, 1);
    digitalWrite(SHCP, HIGH);

    digitalWrite(SHCP, LOW);
    digitalWrite(DS, 1);
    digitalWrite(SHCP, HIGH);

    digitalWrite(SHCP, LOW);
    digitalWrite(DS, 1);
    digitalWrite(SHCP, HIGH);

    digitalWrite(SHCP, LOW);
    digitalWrite(DS, 1);
    digitalWrite(SHCP, HIGH);


    digitalWrite(SHCP, LOW);
    digitalWrite(DS, 0);
    digitalWrite(SHCP, HIGH);

    digitalWrite(SHCP, LOW);
    digitalWrite(DS, 0);
    digitalWrite(SHCP, HIGH);

    digitalWrite(SHCP, LOW);
    digitalWrite(DS, 1);
    digitalWrite(SHCP, HIGH);

    digitalWrite(SHCP, LOW);
    digitalWrite(DS, 0);
    digitalWrite(SHCP, HIGH);
}
演示.jpg

实验二

使用ShiftOut函数 8个LED随机点亮。
电路图参考实验二。

代码

int SHCP = PD2;
int STCP = PD3;
int DS = PD4;

void setup()
{
    pinMode(SHCP, OUTPUT);
    pinMode(STCP, OUTPUT);
    pinMode(DS, OUTPUT);
}

void loop()
{
    for(int i = 0;i <= 250;i++)
    {
        digitalWrite(STCP, LOW);        // 将STCP加低电平让芯片准备好接受数据
        shiftOut(DS,SHCP,LSBFIRST,i);
        digitalWrite(STCP, HIGH);       // 将STCP引脚恢复到高电平
        delay(100);
    }
}

主要说明

void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val);
参数 dataPin; 数据输入引脚
参数 clockPin; 时钟引脚
参数 bitOrder; MSBFIRST(高位在前,也就是从数据的左边开始)、LSBFIRST(低位在前,也就是从数据的右边开始)
参数 val; 需要移位的数据
演示
上一篇 下一篇

猜你喜欢

热点阅读