11.8

作者: 李响lx | 来源:发表于2017-11-08 19:42 被阅读0次

    今天学习了用串口把数据传递给寄存器595扩展IO口,同时控制4个七段数码管。

    核心思想:

    1.每个D触发器能存储1位数据,

    2.D端数据输入端,Q数据输出端.当脉冲信号来时。这里脉冲取反。下降沿触发,D端数据被存储进触发器。

    3.8位数据依次从低位或最高位存入左边的8个触发器。当右边LATCH CLOCK触发器触发,左边8个触发器传递给右边8个触发器。形成一次输出。

    4.R触发器时,全部置零。

    下午编写了电压表程序。

    #define DATA_PIN 2 //74HC595的14脚 数据输入引脚SI

    #define  SCLK_PIN  5 //74hc595的11脚 时钟线 SCK

    #define LATCH_PIN  4 //74hc595的12脚 输出存储器锁存线RCK

    const uint8_t decode[] = {~0x3f, ~0x06, ~0x5b, ~0x4f, ~0x66, ~0x6d, ~0x7d, ~0x07, ~0x7f, ~0x6f, ~0x77, ~0x7c, ~0x39, ~0x5e, ~0x79, ~0x71}; //共阳极译码值

    void setup() {

    pinMode(DATA_PIN, OUTPUT);

    pinMode(SCLK_PIN, OUTPUT);

    pinMode(LATCH_PIN, OUTPUT);

    Serial.begin(9600);

    }

    void loop() {

    float dian=analogRead(A0);

    Serial.println(dian);

    int temp=dian*500 /1024;

    int a=temp/100;

    int b=(temp-a*100)/10;

    int c=(temp-a*100-b*10);

    digitalWrite(LATCH_PIN, LOW);

    display(0xff);

    display(decode[a]&0b01111111);

    display(decode[b]);

    display(decode[c]);

    digitalWrite(LATCH_PIN, HIGH);

    }

    void display(uint8_t val) {

    // digitalWrite(LATCH_PIN, LOW);

    shiftOut(DATA_PIN, SCLK_PIN, MSBFIRST, val);// **串行数据输出,高位在先

    // digitalWrite(LATCH_PIN, HIGH); //上沿锁存

    }

    相关文章

      网友评论

          本文标题:11.8

          本文链接:https://www.haomeiwen.com/subject/bgwymxtx.html