累加器实验

累加器实验

实验目的

每当按下一个按键,数码管显示值加一

代码编写

#include<Arduino.h>
//I/O定义
#define seg_a 2
#define seg_b 3
#define seg_c 4
#define seg_d 5
#define seg_e 6
#define seg_f 7
#define seg_g 8
#define seg_h 9
#define com1 10
#define com2 11
#define com3 12
#define com4 13
#define key 2
int sum = 0;
int flag_up = 1;
unsigned char table[10][8] = {
    
    
  {
    
    0,0,1,1,1,1,1,1},
  {
    
    0,0,0,0,0,1,1,0},
  {
    
    0,1,0,1,1,0,1,1},
  {
    
    0,1,0,0,1,1,1,1},
  {
    
    0,1,1,0,0,1,1,0},
  {
    
    0,1,1,0,1,1,0,1},
  {
    
    0,1,1,1,1,1,0,1},
  {
    
    0,0,0,0,0,1,1,1},
  {
    
    0,1,1,1,1,1,1,1},
  {
    
    0,1,1,0,1,1,1,1}
  };
  void setup() {
    
    
  // put your setup code here, to run once:
  //将引脚设置为输出
  pinMode(seg_a,OUTPUT);
  pinMode(seg_b,OUTPUT);
  pinMode(seg_c,OUTPUT);
  pinMode(seg_d,OUTPUT);
  pinMode(seg_e,OUTPUT);
  pinMode(seg_f,OUTPUT);
  pinMode(seg_g,OUTPUT);
  pinMode(seg_h,OUTPUT);
  pinMode(com1,OUTPUT);
  pinMode(com2,OUTPUT);
  pinMode(com3,OUTPUT);
  pinMode(com4,OUTPUT);
  pinMode(key,INPUT_PULLUP);
}
unsigned char Scankey(){
    
    
  //按键扫描程序
  if(flag_up && digitalRead(key) == LOW){
    
    //有按键按下
    flag_up = 0;
    delay(20);//延时去抖动
    if(digitalRead(key) == LOW){
    
    //有按键按下
      return 1;
      }
    }
  if(digitalRead(key) == HIGH){
    
    
    flag_up = 1;
    }
  return 0;
  }
void loop(){
    
    
  if(Scankey() == 1){
    
    
    sum++;
    if(sum>9999){
    
    
      sum = 9999;
      }
    }
   Display(1,sum/1000);
   delay(3);
   Display(2,sum%1000/100);
   delay(3);  
   Display(3,sum%100/10);
   delay(3);
   Display(4,sum%10);
   delay(3);   
  }
  void Display(unsigned char com,unsigned char num){
    
    
    //去除余晖
    digitalWrite(seg_a,LOW);
    digitalWrite(seg_b,LOW);
    digitalWrite(seg_c,LOW);
    digitalWrite(seg_d,LOW);
    digitalWrite(seg_e,LOW);
    digitalWrite(seg_f,LOW);
    digitalWrite(seg_g,LOW);
    digitalWrite(seg_h,LOW);
    switch(com){
    
    
        case 1:{
    
    //选择位1
            digitalWrite(com1,LOW);
            digitalWrite(com2,HIGH);
            digitalWrite(com3,HIGH);
            digitalWrite(com4,HIGH);
            break;
          }
        case 2:{
    
    //选择位2
            digitalWrite(com1,HIGH);
            digitalWrite(com2,LOW);
            digitalWrite(com3,HIGH);
            digitalWrite(com4,HIGH);
            break;
          }
        case 3:{
    
    
            digitalWrite(com1,HIGH);
            digitalWrite(com2,HIGH);
            digitalWrite(com3,LOW);
            digitalWrite(com4,HIGH);
            break;
          }
        case 4:{
    
    
            digitalWrite(com1,HIGH);
            digitalWrite(com2,HIGH);
            digitalWrite(com3,HIGH);
            digitalWrite(com4,LOW);          
            break;
          }
        default:
            break;
      }
      digitalWrite(seg_a,table[num][7]);
      digitalWrite(seg_b,table[num][6]);
      digitalWrite(seg_c,table[num][5]);
      digitalWrite(seg_d,table[num][4]);
      digitalWrite(seg_e,table[num][3]);
      digitalWrite(seg_f,table[num][2]);
      digitalWrite(seg_g,table[num][1]);
      digitalWrite(seg_h,table[num][0]);
    }

猜你喜欢

转载自blog.csdn.net/qq_45671732/article/details/108993365