最新消息:380元/半年,推荐全网最具性价比的一站式编程学习平台码丁实验室

Arduino+两块74HC595 驱动四位数码管显示模块

Arduino 少儿编程 2768浏览 0评论

友情提示:380元/半年,儿童学编程,就上码丁实验室

这个四位数码管模块采用2片74hc595芯片驱动,需要Arduino3个数字端口,根据数码管动态扫描原理进行显示,宽工作电压3.3V到5V,PCB板尺寸:40mm*22mm,数码管型号:0.36、四位、共阳

Arduino+两块74HC595 驱动四位数码管显示模块
四位数码管模块 两块74HC595驱动

移位寄存器74hc595参考教程及Arduino ShiftOut(移位输出)函数范例程序:

Arduino – ShiftOut www.arduino.ccArduino+两块74HC595 驱动四位数码管显示模块

Arduino+两块74HC595 驱动四位数码管显示模块
74hc595 移位寄存器芯片

程序1:个位显示数字0~9

int clockPin=2;
int latchPin=3;
int dataPin=4;
unsigned char num[]={0xC0, //"0"
                     0xF9, //"1"
                     0xA4, //"2"
                     0xB0, //"3"
                     0x99, //"4"
                     0x92, //"5"
                     0x82, //"6"
                     0xF8, //"7"
                     0x80, //"8"
                     0x90  //"9"
};
void setup(){
  pinMode(latchPin,OUTPUT);
  pinMode(clockPin,OUTPUT);
  pinMode(dataPin,OUTPUT);
}
void disp(){
  for(int i=0;i<10;i++){
    shiftOut(dataPin,clockPin,MSBFIRST,num[i]);  
    shiftOut(dataPin,clockPin,MSBFIRST,0b00000001); 
    digitalWrite(latchPin, HIGH);
    delay(500);
    digitalWrite(latchPin,LOW);
  }
}
void loop(){
  disp();
}

Arduino+两块74HC595 驱动四位数码管显示模块 74hc595驱动数码管 Arduino程序 https://www.zhihu.com/video/1017740611738341376

程序2:动态显示一个四位数

int clockPin=2;
int latchPin=3;
int dataPin=4;
unsigned char num[]={0xC0, //"0"
                     0xF9, //"1"
                     0xA4, //"2"
                     0xB0, //"3"
                     0x99, //"4"
                     0x92, //"5"
                     0x82, //"6"
                     0xF8, //"7"
                     0x80, //"8"
                     0x90  //"9"
};
void setup(){
  pinMode(latchPin,OUTPUT);
  pinMode(clockPin,OUTPUT);
  pinMode(dataPin,OUTPUT);
}
void disp(int n){
  int t=3;
  int ge=(int)n%10;
  int shi=((int)n/10)%10;
  int bai=((int)n/100)%10;
  int qian=((int)n/1000)%10;
  
  shiftOut(dataPin,clockPin,MSBFIRST,num[ge]);  
  shiftOut(dataPin,clockPin,MSBFIRST,0b00000001); 
  digitalWrite(latchPin, HIGH);
  delay(t);
  digitalWrite(latchPin,LOW);

  shiftOut(dataPin,clockPin,MSBFIRST,num[shi]);  
  shiftOut(dataPin,clockPin,MSBFIRST,0b00000010); 
  digitalWrite(latchPin, HIGH);
  delay(t);
  digitalWrite(latchPin,LOW);
  
  shiftOut(dataPin,clockPin,MSBFIRST,num[bai]);  
  shiftOut(dataPin,clockPin,MSBFIRST,0b00000100); 
  digitalWrite(latchPin, HIGH);
  delay(t);
  digitalWrite(latchPin,LOW);

  shiftOut(dataPin,clockPin,MSBFIRST,num[qian]);  
  shiftOut(dataPin,clockPin,MSBFIRST,0b00001000); 
  digitalWrite(latchPin, HIGH);
  delay(t);
  digitalWrite(latchPin,LOW);
}
void loop(){
  disp(1234);
}
Arduino+两块74HC595 驱动四位数码管显示模块

程序3:显示固定带一位小数的浮点数

int clockPin=2;
int latchPin=3;
int dataPin=4;
unsigned char num[]={0xC0, //"0"
                     0xF9, //"1"
                     0xA4, //"2"
                     0xB0, //"3"
                     0x99, //"4"
                     0x92, //"5"
                     0x82, //"6"
                     0xF8, //"7"
                     0x80, //"8"
                     0x90  //"9"
};
void setup(){
  pinMode(latchPin,OUTPUT);
  pinMode(clockPin,OUTPUT);
  pinMode(dataPin,OUTPUT);
}
void disp(float n){
  int t=3;
  int yi=((int)(n*10))%10;
  int ge=(int)n%10;
  int shi=((int)n/10)%10;
  int bai=((int)n/100)%10;
  if(bai>0){
    shiftOut(dataPin,clockPin,MSBFIRST,num[bai]);  
  }else{
    shiftOut(dataPin,clockPin,MSBFIRST,0xFF);  
  }
  shiftOut(dataPin,clockPin,MSBFIRST,0b00001000); 
  digitalWrite(latchPin, HIGH);
  delay(t);
  digitalWrite(latchPin,LOW);
  
  if(shi>0){
    shiftOut(dataPin,clockPin,MSBFIRST,num[shi]);  
  }else{
    if(bai>0){
      shiftOut(dataPin,clockPin,MSBFIRST,num[0]);  
    }else{
      shiftOut(dataPin,clockPin,MSBFIRST,0xFF);   
    }
  }
  shiftOut(dataPin,clockPin,MSBFIRST,0b00000100); 
  digitalWrite(latchPin, HIGH);
  delay(t);
  digitalWrite(latchPin,LOW);

  shiftOut(dataPin,clockPin,MSBFIRST,num[ge]&0x7F);//与运算加入小数点
  shiftOut(dataPin,clockPin,MSBFIRST,0b00000010); 
  digitalWrite(latchPin, HIGH);
  delay(t);
  digitalWrite(latchPin,LOW);
  
  shiftOut(dataPin,clockPin,MSBFIRST,num[yi]);  
  shiftOut(dataPin,clockPin,MSBFIRST,0b00000001); 
  digitalWrite(latchPin, HIGH);
  delay(t);
  digitalWrite(latchPin,LOW);
}
void loop(){
  disp(92.7);
}

//注意:“去零”的修正方法
Arduino+两块74HC595 驱动四位数码管显示模块

始发于知乎专栏:牧之

您必须 登录 才能发表评论!