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