11.8

今天學習了用串口把數據傳遞給寄存器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); //上沿鎖存

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容