proteus中仿真arduino利用74hc595控制LED及数码管

时间:2024-03-25 19:08:51

我们都知道,任何芯片的IO资源是有限的,往往有的器件,如数码管等简单的器件却需要大量的IO口,这样造成大量的IO资源被占用,而74hc595以及74hc164等芯片可以解决这样的简单器件对IO口的需求。

下面我们来看看一个最简单的例子,用595来实现LED的流水灯,连接图如下:
proteus中仿真arduino利用74hc595控制LED及数码管

二进制模拟显示代码:



int latchPin=12;
int clockPin=8;
int dataPin=11;



void setup () {

pinMode(latchPin,OUTPUT);
pinMode(clockPin,OUTPUT);
pinMode(dataPin,OUTPUT);

}

void loop()
{

for(int x=0; x<255; x++)
{
    digitalWrite(latchPin,LOW); 
    shiftOut(dataPin,clockPin,MSBFIRST,x);
    digitalWrite(latchPin,HIGH); 
    delay(10); 
  }
}



}

流水灯显示代码:

int latchPin=8; //ST CP of 74HC595
int clockPin=12;//SH CP of 74HC595
int dataPin=11; //DS of 74HC595
char LED_pin=0x00;
void setup() {
      pinMode(latchPin, OUTPUT);
      pinMode(clockPin, OUTPUT);
      pinMode(dataPin, OUTPUT); 
}
void loop()
{
   for(int i=0; i<8; i++)
   {
      LED_pin=~(0x01<<i);
      digitalWrite(latchPin,LOW); //低电位表示启动
      shiftOut(dataPin,clockPin,LSBFIRST,~LED_pin);
      digitalWrite(latchPin,HIGH); //高电位表示停止
      delay(25);
   }
     LED_pin=0x01;
}

注意: 函数shiftout目的在于1个执行时间内输出第4个参数j的某一个位。1个字符有8个位,若希望从高位(左边)开始,第三个参数设定为MSBFIRST;若从低位右边)开始,则设定为LSBFIRST。前两个参数只是引脚定义。shiftOut的详细用法可以参看我的博文《Arduino中shiftOut怎么用?