51微控制器實現數碼管顯示
本次的實現效果方式採用模擬進行,晶片為AT89C51,開發軟體為keil5,proteus
上程式碼
程式碼如下:
#include <reg51.h>
void delay(unsigned int i);//延時函式
unsigned int i=0;
void main() {
unsigned char button=0,flag=0;
unsigned char digitCodes[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0xbf};
P0 = 0xff; // 初始化P0口為高電平,準備讀取按鍵狀態
P1 = digitCodes[8]; // 初始顯示空格
while (1) {
if(flag==0)//如果沒有其他的選手按下
{
button = P0; // 第一次讀取按鍵狀態
delay(1200); // 延時消抖
button = P0; // 第二次讀取按鍵狀態
if (button != 0xff) { // 如果有按鍵被按下
for (i = 0; i < 8; i++) {
if((button & (1 << i)) == 0)
{//檢測是那一個按鍵按下,進行位比較
P1 = digitCodes[i]; // 顯示對應的數字
flag=1;
}
}
}
}
}
}
void delay(unsigned int i) {
unsigned int k;
for (k = 0; k < i; k++);
}
效果展示
keil5開發介面
proteus介面:
介紹
一、系統概述
8路搶答器系統是一個用於競賽或活動中的搶答環節的裝置,能夠準確、快速地判斷哪位參賽者最先按下搶答按鈕,並在數碼管上顯示該參賽者的編號。系統由輸入電路、優先判斷電路、編碼與顯示電路以及控制電路等組成。
二、硬體設計
- 輸入電路設計:使用八個按鈕作為八路輸入,每個按鈕連線到一個數位電路輸入端。當參賽者按下按鈕時,輸入電路會檢測到這個訊號。
- 優先判斷電路設計:設計一個優先編碼器,用於檢測並判斷最先按下按鈕的輸入訊號。優先編碼器能夠處理多個同時輸入的訊號,並輸出最先到達訊號的編碼。
- 編碼與顯示電路設計:使用編碼器對優先順序訊號進行編碼,然後透過譯碼器解碼並顯示在數碼管上。這樣,觀眾和主持人都可以清晰地看到哪個參賽者最先搶答。
- 控制電路設計:設計一個控制電路,用於接收控制開關的訊號,並根據訊號控制搶答環節的啟動、結束以及必要的控制操作。
三、程式設計
程式設計:程式主要實現以下功能:
1.檢測並判斷最先按下搶答按鈕的選手編號。
2.將選手編號顯示在數碼管上。
3.控制搶答環節的啟動和重新開始。
四、模擬過程
1 模擬軟體選擇:選用適合數位電路模擬的軟體,本次實訓選擇Proteus進行模擬設計。
2 搭建模擬電路:在Proteus中搭建與數位電路設計相對應的模擬電路,包括輸入電路、優先編碼電路、鎖存與顯示電路以及控制電路(數碼管,AT89C51晶片,電阻,按鍵,電容,晶振)。
3 設定模擬引數:根據設計需求,設定模擬引數,如輸入訊號的波形、頻率等。
4執行模擬並觀察結果:啟動模擬,觀察數碼管的結果,選手是否搶答,按下是否能正確顯示
5 Proteus模擬圖片:
六、模擬結果分析
透過模擬,我們驗證了8路搶答器系統的功能和效能。模擬結果表明,系統能夠準確、快速地檢測並顯示最先按下搶答按鈕的選手編號。同時,系統還具備復位按鈕,當按下復位按鈕KEY1時能重新開始新一輪的競答。
-
模擬執行介面(等待搶答)
-
選手1號進行搶答:
七、最佳化與改進
根據模擬結果,我們對8路搶答器系統進行了最佳化和改進。例如,最佳化了優先編碼電路的設計,提高了判斷速度和準確性;改進了顯示電路的設計,增強了顯示效果和可讀性;簡化了控制電路的設計,將程式碼進行縮減。