qq_59182874 2021-06-10 10:52 采纳率: 50%
浏览 169
已采纳

找个人帮忙写一下代码。

 

  • 写回答

2条回答 默认 最新

  • soar3033 2021-06-10 12:31
    关注
    byte num_0[8] = { B00000000,B00000000,B01111100,B01000100,B01111100,B00000000,B00000000,B00000000 };//定义数组 用于让led显示0
    byte num_1[8] = { B00000000,B00000000,B00000000,B01111110,B01111110,B00000000,B00000000,B00000000 }; //定义数组 用于让led显示1
    byte num_2[8] = { B00000000,B00000000,B01110100,B01010100,B01010100,B01011100,B00000000,B00000000 }; //定义数组 用于让led显示2
    byte num_3[8] = { B00000000,B00000000,B01010100,B01010100,B01010100,B01111100,B00000000,B00000000 }; //定义数组 用于让led显示3
    byte num_4[8] = { B00000000,B00000000,B00011100,B00010000,B00010000,B01111100,B00000000,B00000000 }; //定义数组 用于让led显示4
    byte num_5[8] = { B00000000,B00000000,B01011100,B01010100,B01010100,B00100100,B00000000,B00000000 }; //定义数组 用于让led显示5
    byte num_6[8] = { B00000000,B00000000,B01111100,B01010010,B01010010,B01011110,B00000000,B00000000 }; //定义数组 用于让led显示6
    byte num_7[8] = { B00000000,B00000000,B01000000,B01000110,B01011000,B01100000,B00000000,B00000000 }; //定义数组 用于让led显示7
    byte num_8[8] = { B00000000,B00000000,B01111110,B01011010,B01011010,B01111110,B00000000,B00000000 }; //定义数组 用于让led显示8
    byte num_9[8] = { B00000000,B00000000,B01110010,B01010010,B01010010,B01111110,B00000000,B00000000 }; //定义数组 用于让led显示9
    
    struct Button{
      int pin;
      int last_p;
    };
    
    //7-segs 74HC595 引脚 驱动点阵
    constexpr int latch_pin = 1;
    constexpr int clock_pin = 2;
    constexpr int data_pin = 3;
    
    //7-segs 74HC595 引脚 驱动跑马灯
    constexpr int latch_pin2 = 4;
    constexpr int clock_pin2 = 5;
    constexpr int data_pin2 = 6;
    
    //开始暂停按键
    constexpr int inpt=7;
    
    //模拟量输入
    constexpr int an=8;
    
    int last_dy_time;//用于电压滚动显示时间
    int last_p_time;//用于按键防抖
    int last_pmd_time;//用于跑马灯循环时间
    int st;//标记跑马灯启停
    int last_p;//用于确认单击
    int an_v;//模拟量读数
    int dy_b;//电压滚动显示的位
    int pmd;//跑马灯变量
    
    int but(Button b){
      if(!digitalRead(b.pin)){
        if(micros()-last_p_time>50000){
          last_p_time=micros();
          if(b.last_p==0){
            return 1;    
          }
          b.last_p=1;
        }
      }
      b.last_p=0;
      return 0;
    }
    
    //驱动点阵
    void led(int n,int b,int dp){
      int tmp=n;
      if(dp){
        tmp&=0x7f;
      }
      for(int i=0;i<8;i++){
        digitalWrite(data_pin,(tmp & 0x80)!=0);
        digitalWrite(clock_pin, HIGH);
        digitalWrite(clock_pin,LOW);
        tmp<<=1;
      }
      tmp=1<<b;
      tmp=~tmp;
      for(int i=0;i<8;i++){
        digitalWrite(data_pin,(tmp & 0x80)!=0);
        digitalWrite(clock_pin, HIGH);
        digitalWrite(clock_pin,LOW);
        tmp<<=1;
      }
        digitalWrite(latch_pin, HIGH);
        digitalWrite(latch_pin, LOW);
    }
    
    //驱动跑马灯
    void led2(int n){
      int tmp=1<<n;
      for(int i=0;i<16;i++){
        digitalWrite(data_pin,(tmp & 0x8000)!=0);
        digitalWrite(clock_pin, HIGH);
        digitalWrite(clock_pin,LOW);
        tmp<<=1;
      }
        digitalWrite(latch_pin, HIGH);
        digitalWrite(latch_pin, LOW);
    }
    
    Button b_in;
    
    void setup()    //arduino主函数 用于初始化
    {
      b_in.pin=inpt;
      last_p_time=0;
      last_pmd_time=0;
      st=1;
      last_p=0;
      dy_b=3;
    
      pinMode(latch_pin,OUTPUT);
      pinMode(clock_pin,OUTPUT);
      pinMode(data_pin,OUTPUT);  
      pinMode(latch_pin2,OUTPUT);
      pinMode(clock_pin2,OUTPUT);
      pinMode(data_pin2,OUTPUT);
      pinMode(inpt,OUTPUT);
      pinMode(an,INPUT);
    }
    
    void loop()//arduino主循环
    {
        if(but(b_in)){
          st=~st;
        }
        an_v=analogRead(an);
        if(st){//跑马灯循环
           if(micros()-last_pmd_time>an_v*1000){
              pmd++;
              if(pmd>9){
                pmd=0;
              }
              led2(pmd);
           }
        }
        if(micros()-last_dy_time>1000000){
          dy_b--;
          if(dy_b==-1){
            dy_b=3;
          }
        }
        an_v=(an_v/(int)pow(10,dy_b))%10;
        
        int dpst=0;
        if(dy_b==3){
          dpst=1;
        }
        
        switch(an_v/200){ //显示电压值
          case 0:
            for(int i=0;i<8;i++){
              led(num_0[i],i,dpst);
            }
          case 1:
            for(int i=0;i<8;i++){
              led(num_1[i],i,dpst);
            }
          case 2:
            for(int i=0;i<8;i++){
              led(num_2[i],i,dpst);
            }
          case 3:
            for(int i=0;i<8;i++){
              led(num_3[i],i,dpst);
            }
          case 4:
            for(int i=0;i<8;i++){
              led(num_4[i],i,dpst);
            }
          case 5:
            for(int i=0;i<8;i++){
              led(num_5[i],i,dpst);
            }     
          case 6:
            for(int i=0;i<8;i++){
              led(num_6[i],i,dpst);
            } 
          case 7:
            for(int i=0;i<8;i++){
              led(num_7[i],i,dpst);
            } 
          case 8:
            for(int i=0;i<8;i++){
              led(num_8[i],i,dpst);
            } 
          case 9:
            for(int i=0;i<8;i++){
              led(num_9[i],i,dpst);
            } 
        }
    
     
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码