使用 AT89S52 單片機驅動 ADC0809 進行模數轉換,並通過 8 位共陽數碼管動態掃描顯示電壓值。包含硬件連接、關鍵時序控制、電壓換算公式及完整 C 代碼。
| 端口 | 功能 |
|---|---|
| P0 | 數碼管段碼輸出 / ADC0809 數據總線 |
| P2.0 (cs1) | 段碼鎖存時鐘 (wr) |
| P2.1 (cs2) | 位碼鎖存時鐘 |
| P2.2 (wr) | 共用寫脈衝 |
| P2.3 (adc_eoc) | ADC 轉換完成標誌 |
| P2.4 (adc_cs) | ADC 片選 (可接地) |
| P2.5 (adc_rd) | ADC 讀使能 |
| P2.6 (adc_wr) | ADC 啟動轉換 / 鎖存通道地址 |
adc_eoc=1、adc_rd=1、adc_wr=1、adc_cs=0 準備總線。adc_wr=0 鎖存通道地址(ALE 上升沿),adc_wr=1 產生啟動脈衝(下降沿)。adc_eoc 直到為高,表示轉換結束。adc_rd=0 使能輸出,讀取 P0 口數據至 v2,隨後拉高 adc_rd 釋放總線。v = (unsigned long)v2 * 5000 / 255; // 5V 參考,8位精度 // 動態掃描:從最低位開始,依次取模 10 送段碼,送位碼 (1<<i),延時 1ms 消影
// 延時、ADC讀取、數碼管顯示三大模塊
void ys(unsigned x); // 粗略延時
void adc(void); // ADC0809 驅動
void xianshi(void); // 8位數碼管動態掃描
main() { while(1) { adc(); xianshi(); } }
P0=0xFF 使其為高阻態輸入。DSY_CODE 對應共陽極編碼(0~9、熄滅、負號)。wr=0; wr=1; 產生上升沿鎖存 74HC574 等鎖存器數據。