51微控制器實現數碼管顯示

少年执笔發表於2024-11-09

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. 編碼與顯示電路設計:使用編碼器對優先順序訊號進行編碼,然後透過譯碼器解碼並顯示在數碼管上。這樣,觀眾和主持人都可以清晰地看到哪個參賽者最先搶答。
  4. 控制電路設計:設計一個控制電路,用於接收控制開關的訊號,並根據訊號控制搶答環節的啟動、結束以及必要的控制操作。
    三、程式設計
    程式設計:程式主要實現以下功能:
    1.檢測並判斷最先按下搶答按鈕的選手編號。
    2.將選手編號顯示在數碼管上。
    3.控制搶答環節的啟動和重新開始。
    四、模擬過程
    1 模擬軟體選擇:選用適合數位電路模擬的軟體,本次實訓選擇Proteus進行模擬設計。
    2 搭建模擬電路:在Proteus中搭建與數位電路設計相對應的模擬電路,包括輸入電路、優先編碼電路、鎖存與顯示電路以及控制電路(數碼管,AT89C51晶片,電阻,按鍵,電容,晶振)。
    3 設定模擬引數:根據設計需求,設定模擬引數,如輸入訊號的波形、頻率等。
    4執行模擬並觀察結果:啟動模擬,觀察數碼管的結果,選手是否搶答,按下是否能正確顯示

5 Proteus模擬圖片:
在這裡插入圖片描述
六、模擬結果分析
透過模擬,我們驗證了8路搶答器系統的功能和效能。模擬結果表明,系統能夠準確、快速地檢測並顯示最先按下搶答按鈕的選手編號。同時,系統還具備復位按鈕,當按下復位按鈕KEY1時能重新開始新一輪的競答。

  1. 模擬執行介面(等待搶答)
    在這裡插入圖片描述

  2. 選手1號進行搶答:
    在這裡插入圖片描述

七、最佳化與改進
根據模擬結果,我們對8路搶答器系統進行了最佳化和改進。例如,最佳化了優先編碼電路的設計,提高了判斷速度和準確性;改進了顯示電路的設計,增強了顯示效果和可讀性;簡化了控制電路的設計,將程式碼進行縮減。

相關文章