11.8

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


11.8_第1张图片

核心思想:

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)