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); } } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥40 复杂的限制性的商函数处理
- ¥15 程序不包含适用于入口点的静态Main方法
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置
- ¥15 有没有研究水声通信方面的帮我改俩matlab代码