xiaoqi976633690 发表于 2023-2-14 20:14

arduino 2个74hc595级联驱动8位数码管

本帖最后由 xiaoqi976633690 于 2023-2-14 20:41 编辑

arduino 2个74hc595级联驱动8位数码管
C代码:
/*
   Arduino code for Individual control over each pin
   Support for 40+ 74HC595 8 bit shift registers
   http://bildr.org/2011/02/74hc595/
*/

#define DATA_PIN8// Pin connected to DS of 74HC595串行数据输入
#define LATCH_PIN 9// Pin connected to STCP of 74HC595上升沿数据从寄存器输出到引脚
#define CLOCK_PIN 10 // Pin connected to SHCP of 74HC595上升沿串行数据移位存入寄存器

void disp(uint16_t V1,uint16_t V2);
void write_74hc595(uint8_t *data);
//数码管数量
#define NUM_SHIFT_REGS8
//共阳数码管
unsigned char leddata[]={
                0xC0,//"0"
                0xF9,//"1"
                0xA4,//"2"
                0xB0,//"3"
                0x99,//"4"
                0x92,//"5"
                0x82,//"6"
                0xF8,//"7"
                0x80,//"8"
                0x90,//"9"
                0x88,//"A"
                0x83,//"B"
                0xC6,//"C"
                0xA1,//"D"
                0x86,//"E"
                0x8E,//"F"
                0x89,//"H"
                0xC7,//"L"
                0xC8,//"n"
                0xC1,//"u"
                0x8C,//"P"
                0xA3,//"o"
                0xBF,//"-"
                0xFF,//熄灭
                0xFF//自定义

                         };
uint8_t x595={0x00,0xff};

void setup() {
pinMode(DATA_PIN, OUTPUT);
pinMode(CLOCK_PIN, OUTPUT);
pinMode(LATCH_PIN, OUTPUT);
Serial.begin(9600);
pinMode(A0,INPUT);
pinMode(A1,INPUT);
}

bool toggle = false;
uint16_tx1=1990,x2=3520;
uint16_t time=0;
uint16_t ADC_vlue1=0,ADC_vlue2=0;
float volt1,volt2;
void loop() {
      ADC_vlue1=analogRead(A0);
      ADC_vlue2=analogRead(A1);
      volt1=ADC_vlue1*0.48828125;
      volt2=ADC_vlue2*0.48828125;
      time++;
      disp(volt1,volt2);
      if(time==100)
      {
      time=0;
      x1++;
      x2++;
      Serial.println(volt1);
      }

}


void write_74hc595(uint8_t *data)
{
uint8_t m;
digitalWrite(LATCH_PIN, LOW);
for(int x=0;x<2;x++)
{
    m=data;
    for(int i=0;i<8;i++)
      {
      digitalWrite(CLOCK_PIN, LOW);
      digitalWrite(DATA_PIN,(m&0x80)>1?HIGH:LOW);
      digitalWrite(CLOCK_PIN, HIGH);
      m<<=1;
      }

}
digitalWrite(LATCH_PIN, HIGH);//上升沿输出
}

void disp(uint16_t V1,uint16_t V2)
{

for(int8_t i=0;i<NUM_SHIFT_REGS;i++)
{
      switch(i)
      {
      case 0:
      if(V1>=1000) x595=leddata;   
      else x595=0xff;//小于1000的千位不显示
      x595=1<<i;write_74hc595(x595);break;
      case 1: x595=leddata;x595=1<<i;write_74hc595(x595);break;
      case 2: x595=leddata;x595=1<<i;write_74hc595(x595);break;
      case 3: x595=leddata;x595=1<<i;write_74hc595(x595);break;

      case 4:
      if(V2>=1000) x595=leddata;   
      else x595=0xff;//小于1000的千位不显示
      x595=1<<i;write_74hc595(x595);break;
      case 5: x595=leddata;x595=1<<i;write_74hc595(x595);break;
      case 6: x595=leddata;x595=1<<i;write_74hc595(x595);break;
      case 7: x595=leddata;x595=1<<i;write_74hc595(x595);break;
      }

}
      x595=0x7F;x595=1<<1;
      write_74hc595(x595);
      x595=0x7F;x595=1<<5;
      write_74hc595(x595);
}


电路图json:
{
"version": 1,
"author": "Anderson Costa",
"editor": "wokwi",
"parts": [
    { "type": "wokwi-arduino-uno", "id": "uno", "top": 0, "left": 0, "attrs": {} },
    { "type": "wokwi-74hc595", "id": "sr1", "top": 255, "left": 200, "attrs": {} },
    { "type": "wokwi-74hc595", "id": "sr2", "top": 255, "left": 360, "attrs": {} },
    {
      "type": "wokwi-resistor",
      "id": "r1",
      "top": 330,
      "left": 140,
      "rotate": 90,
      "attrs": { "value": "180" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r2",
      "top": 330,
      "left": 160,
      "rotate": 90,
      "attrs": { "value": "180" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r3",
      "top": 330,
      "left": 180,
      "rotate": 90,
      "attrs": { "value": "180" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r4",
      "top": 330,
      "left": 200,
      "rotate": 90,
      "attrs": { "value": "180" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r5",
      "top": 330,
      "left": 220,
      "rotate": 90,
      "attrs": { "value": "180" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r6",
      "top": 330,
      "left": 240,
      "rotate": 90,
      "attrs": { "value": "180" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r7",
      "top": 330,
      "left": 260,
      "rotate": 90,
      "attrs": { "value": "180" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r8",
      "top": 330,
      "left": 280,
      "rotate": 90,
      "attrs": { "value": "180" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r9",
      "top": 330,
      "left": 300,
      "rotate": 90,
      "attrs": { "value": "180" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r10",
      "top": 330,
      "left": 320,
      "rotate": 90,
      "attrs": { "value": "180" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r11",
      "top": 330,
      "left": 340,
      "rotate": 90,
      "attrs": { "value": "180" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r12",
      "top": 330,
      "left": 360,
      "rotate": 90,
      "attrs": { "value": "180" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r13",
      "top": 330,
      "left": 380,
      "rotate": 90,
      "attrs": { "value": "180" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r14",
      "top": 330,
      "left": 400,
      "rotate": 90,
      "attrs": { "value": "180" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r15",
      "top": 330,
      "left": 420,
      "rotate": 90,
      "attrs": { "value": "180" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r16",
      "top": 330,
      "left": 440,
      "rotate": 90,
      "attrs": { "value": "180" }
    },
    {
      "type": "wokwi-led",
      "id": "led1",
      "top": 380,
      "left": 154,
      "rotate": 180,
      "attrs": { "color": "red" }
    },
    {
      "type": "wokwi-led",
      "id": "led2",
      "top": 380,
      "left": 174,
      "rotate": 180,
      "attrs": { "color": "red" }
    },
    {
      "type": "wokwi-led",
      "id": "led3",
      "top": 380,
      "left": 194,
      "rotate": 180,
      "attrs": { "color": "red" }
    },
    {
      "type": "wokwi-led",
      "id": "led4",
      "top": 380,
      "left": 214,
      "rotate": 180,
      "attrs": { "color": "red" }
    },
    {
      "type": "wokwi-led",
      "id": "led5",
      "top": 380,
      "left": 234,
      "rotate": 180,
      "attrs": { "color": "red" }
    },
    {
      "type": "wokwi-led",
      "id": "led6",
      "top": 380,
      "left": 254,
      "rotate": 180,
      "attrs": { "color": "red" }
    },
    {
      "type": "wokwi-led",
      "id": "led7",
      "top": 380,
      "left": 274,
      "rotate": 180,
      "attrs": { "color": "red" }
    },
    {
      "type": "wokwi-led",
      "id": "led8",
      "top": 380,
      "left": 294,
      "rotate": 180,
      "attrs": { "color": "red" }
    },
    {
      "type": "wokwi-led",
      "id": "led9",
      "top": 380,
      "left": 314,
      "rotate": 180,
      "attrs": { "color": "red" }
    },
    {
      "type": "wokwi-led",
      "id": "led10",
      "top": 380,
      "left": 334,
      "rotate": 180,
      "attrs": { "color": "red" }
    },
    {
      "type": "wokwi-led",
      "id": "led11",
      "top": 380,
      "left": 354,
      "rotate": 180,
      "attrs": { "color": "red" }
    },
    {
      "type": "wokwi-led",
      "id": "led12",
      "top": 380,
      "left": 374,
      "rotate": 180,
      "attrs": { "color": "red" }
    },
    {
      "type": "wokwi-led",
      "id": "led13",
      "top": 380,
      "left": 394,
      "rotate": 180,
      "attrs": { "color": "red" }
    },
    {
      "type": "wokwi-led",
      "id": "led14",
      "top": 380,
      "left": 414,
      "rotate": 180,
      "attrs": { "color": "red" }
    },
    {
      "type": "wokwi-led",
      "id": "led15",
      "top": 380,
      "left": 434,
      "rotate": 180,
      "attrs": { "color": "red" }
    },
    {
      "type": "wokwi-led",
      "id": "led16",
      "top": 380,
      "left": 454,
      "rotate": 180,
      "attrs": { "color": "red" }
    },
    {
      "type": "wokwi-7segment",
      "id": "sevseg3",
      "top": 529.21,
      "left": 225.9,
      "attrs": { "digits": "4" }
    },
    {
      "type": "wokwi-7segment",
      "id": "sevseg1",
      "top": 528.62,
      "left": 436.56,
      "attrs": { "digits": "4" }
    },
    { "type": "wokwi-potentiometer", "id": "pot1", "top": 71.57, "left": 402.18, "attrs": {} },
    { "type": "wokwi-potentiometer", "id": "pot2", "top": 73.12, "left": 519.64, "attrs": {} }
],
"connections": [
    [ "uno:GND.2", "sr1:OE", "black", [ "v50", "h102" ] ],
    [ "uno:GND.2", "sr2:OE", "black", [ "v50", "h102" ] ],
    [ "uno:GND.2", "sr1:GND", "black", [ "v50", "h150", "v50", "h-45" ] ],
    [ "uno:GND.2", "sr2:GND", "black", [ "v50", "h300", "v50", "h-9" ] ],
    [ "uno:GND.2", "led1:C", "black", [ "v50", "h150", "v137", "h-143" ] ],
    [ "uno:GND.2", "led2:C", "black", [ "v50", "h150", "v137", "h-143" ] ],
    [ "uno:GND.2", "led3:C", "black", [ "v50", "h150", "v137", "h-143" ] ],
    [ "uno:GND.2", "led4:C", "black", [ "v50", "h150", "v137", "h-143" ] ],
    [ "uno:GND.2", "led5:C", "black", [ "v50", "h150", "v137", "h-143" ] ],
    [ "uno:GND.2", "led6:C", "black", [ "v50", "h150", "v137", "h-143" ] ],
    [ "uno:GND.2", "led7:C", "black", [ "v50", "h150", "v137", "h-143" ] ],
    [ "uno:GND.2", "led8:C", "black", [ "v50", "h150", "v137", "h-143" ] ],
    [ "uno:GND.2", "led9:C", "black", [ "v50", "h150", "v137", "h-143" ] ],
    [ "uno:GND.2", "led10:C", "black", [ "v50", "h150", "v137", "h-143" ] ],
    [ "uno:GND.2", "led11:C", "black", [ "v50", "h150", "v137", "h-143" ] ],
    [ "uno:GND.2", "led12:C", "black", [ "v50", "h150", "v137", "h-143" ] ],
    [ "uno:GND.2", "led13:C", "black", [ "v50", "h150", "v137", "h-143" ] ],
    [ "uno:GND.2", "led14:C", "black", [ "v50", "h150", "v137", "h-143" ] ],
    [ "uno:GND.2", "led15:C", "black", [ "v50", "h150", "v137", "h-143" ] ],
    [ "uno:GND.2", "led16:C", "black", [ "v50", "h150", "v137", "h-143" ] ],
    [ "uno:5V", "sr1:VCC", "red", [ "v44", "h61" ] ],
    [ "uno:5V", "sr1:MR", "red", [ "v44", "h61" ] ],
    [ "uno:5V", "sr2:VCC", "red", [ "v44", "h61" ] ],
    [ "uno:5V", "sr2:MR", "red", [ "v44", "h61" ] ],
    [ "uno:8", "sr1:DS", "orange", [ "v-20", "h111", "v222", "h-42" ] ],
    [ "uno:9", "sr1:STCP", "purple", [ "v-27", "h129", "v237", "h-34" ] ],
    [ "uno:10", "sr1:SHCP", "brown", [ "v-34", "h147", "v252", "h-29" ] ],
    [ "uno:9", "sr2:STCP", "purple", [ "v-27", "h129", "v237", "h-34" ] ],
    [ "uno:10", "sr2:SHCP", "brown", [ "v-34", "h147", "v252", "h-29" ] ],
    [ "sr1:Q7S", "sr2:DS", "orange", [ "h0", "v-9", "h112" ] ],
    [ "sr1:Q0", "r1:1", "green", [ "v-7", "h-50" ] ],
    [ "sr1:Q1", "r2:1", "green", [ "v8", "h-15" ] ],
    [ "sr1:Q2", "r3:1", "green", [ "v13", "h-5" ] ],
    [ "sr1:Q3", "r4:1", "green", [ "v24", "h6" ] ],
    [ "sr1:Q4", "r5:1", "green", [ "v21", "h17" ] ],
    [ "sr1:Q5", "r6:1", "green", [ "v17", "h29" ] ],
    [ "sr1:Q6", "r7:1", "green", [ "v13", "h38" ] ],
    [ "sr1:Q7", "r8:1", "green", [ "v9", "h48" ] ],
    [ "sr2:Q0", "r9:1", "green", [ "v-4", "h-41" ] ],
    [ "sr2:Q1", "r10:1", "green", [ "v8", "h-15" ] ],
    [ "sr2:Q2", "r11:1", "green", [ "v13", "h-5" ] ],
    [ "sr2:Q3", "r12:1", "green", [ "v24", "h6" ] ],
    [ "sr2:Q4", "r13:1", "green", [ "v21", "h17" ] ],
    [ "sr2:Q5", "r14:1", "green", [ "v17", "h29" ] ],
    [ "sr2:Q6", "r15:1", "green", [ "v13", "h38" ] ],
    [ "sr2:Q7", "r16:1", "green", [ "v9", "h48" ] ],
    [ "led1:A", "r1:2", "green", [ "v0" ] ],
    [ "led2:A", "r2:2", "green", [ "v0" ] ],
    [ "led3:A", "r3:2", "green", [ "v0" ] ],
    [ "led4:A", "r4:2", "green", [ "v0" ] ],
    [ "led5:A", "r5:2", "green", [ "v0" ] ],
    [ "led6:A", "r6:2", "green", [ "v0" ] ],
    [ "led7:A", "r7:2", "green", [ "v0" ] ],
    [ "led8:A", "r8:2", "green", [ "v0" ] ],
    [ "led9:A", "r9:2", "green", [ "v0" ] ],
    [ "led10:A", "r10:2", "green", [ "v0" ] ],
    [ "led11:A", "r11:2", "green", [ "v0" ] ],
    [ "led12:A", "r12:2", "green", [ "v0" ] ],
    [ "led13:A", "r13:2", "green", [ "v0" ] ],
    [ "led14:A", "r14:2", "green", [ "v0" ] ],
    [ "led15:A", "r15:2", "green", [ "v0" ] ],
    [ "led16:A", "r16:2", "green", [ "v0" ] ],
    [ "sevseg3:DIG1", "r1:1", "green", [ "v-32.82", "h-179.17", "v-217.55" ] ],
    [ "sevseg3:DIG2", "r2:1", "green", [ "v-38.39", "h-200.56", "v-176.05", "h37.06" ] ],
    [ "sevseg3:DIG3", "r3:1", "green", [ "v-44.88", "h-203.68", "v-162.15", "h47.26" ] ],
    [ "sevseg3:DIG4", "r4:1", "green", [ "v27", "h-205.87", "v-294.65", "h44.48" ] ],
    [ "sevseg1:DIG1", "r5:1", "green", [ "v-53.55", "h-362.03", "v-138.99", "h38.92" ] ],
    [ "sevseg1:DIG2", "r6:1", "green", [ "v-59.11", "h-385.28", "v-128.79", "h26.87" ] ],
    [ "sevseg1:DIG3", "r7:1", "green", [ "v-62.82", "h-387.47", "v-119.53", "h27.8" ] ],
    [ "sevseg1:DIG4", "r8:1", "green", [ "v40.56", "h-392.44", "v-285.39", "h44.48" ] ],
    [ "sevseg3:A", "r9:1", "green", [ "v-106.96", "h205.95", "v-80.61", "h-53.74" ] ],
    [ "sevseg3:A", "sevseg1:A", "green", [ "v-106.96", "h142.94" ] ],
    [ "sevseg3:B", "r10:1", "green", [ "v-99.55", "h185.15", "v-93.58", "h-34.28" ] ],
    [ "sevseg1:B", "sevseg3:B", "green", [ "v-98.68", "h-209.9", "v99.27" ] ],
    [ "sevseg3:C", "sevseg1:C", "green", [ "v53.27", "h96.46" ] ],
    [ "sevseg1:C", "r11:1", "green", [ "v53.26", "h122.12", "v-319.91", "h-142.52" ] ],
    [ "sevseg3:D", "sevseg1:D", "green", [ "v64.1", "h61.54" ] ],
    [ "sevseg1:D", "r12:1", "green", [ "v64.09", "h148.54", "v-336.14", "h-197.24" ] ],
    [ "sevseg3:E", "sevseg1:E", "green", [ "v76.13", "h36.26" ] ],
    [ "sevseg1:E", "r13:1", "green", [ "v75.51", "h167.16", "v-353.58", "h-173.78" ] ],
    [ "sevseg3:F", "sevseg1:F", "green", [ "v-88.27", "h210.66" ] ],
    [ "sevseg1:F", "r14:1", "green", [ "v-87.17", "h156.37", "v-128.48", "h-248.86" ] ],
    [ "sevseg3:G", "sevseg1:G", "green", [ "v32.83", "h80.84" ] ],
    [ "sevseg1:G", "r15:1", "green", [ "v31.62", "h144.39", "v-319.47", "h-236.08" ] ],
    [ "sevseg3:DP", "sevseg1:DP", "green", [ "v89.25", "h100.12" ] ],
    [ "sevseg1:DP", "r16:1", "green", [ "v89.84", "h168.66", "v-210.58" ] ],
    [ "pot1:SIG", "uno:A0", "green", [ "v64.43", "h-232.5" ] ],
    [ "pot1:GND", "sr2:GND", "black", [ "v100.96", "h38.4", "v49.86", "h-32.47" ] ],
    [ "pot1:VCC", "sr2:MR", "red", [ "v95.74", "h-26.24" ] ],
    [ "pot2:SIG", "uno:A1", "green", [ "v57.36", "h-335.08" ] ],
    [ "pot1:GND", "pot2:GND", "black", [ "v30.78", "h63.24" ] ],
    [ "pot1:VCC", "pot2:VCC", "red", [ "v41.26", "h86.82" ] ]
],
"dependencies": {}
}


实验现象:

在线模拟链接:https://wokwi.com/

gaochy1126 发表于 2023-2-18 14:56

74hc595还需要动态刷新才行,现在有专用的驱动芯片可以使用。

gaochy1126 发表于 2023-2-18 14:56

数码管驱动芯片有狠毒,TM1650数码管驱动芯片带有矩阵按键扫码功能。

gaochy1126 发表于 2023-2-18 14:57

数码管驱动芯片大多用TM1668,TM1628,SM1668,SM1628。                              

gaochy1126 发表于 2023-2-18 14:57

TM1629与单片机的连接是串行接口,只需要4个引脚,单片机随便用4个I/O脚与TM1629连接就行了。

闻则123 发表于 2023-12-8 16:45

感谢楼主分享

WoodData 发表于 2024-4-26 10:42

感谢分享
页: [1]
查看完整版本: arduino 2个74hc595级联驱动8位数码管