基于51單片機的四路搶答器Protues仿真設計

一、設計背景

? ? ? ? 近年來隨著科技的飛速發展,單片機的應用正在不斷的走向深入。本文闡述了基于51單片機的八路搶答器設計。本設計中,51單片機充當了核心控制器的角色,通過IO口與各個功能模塊相連接。按鍵模塊負責檢測參與者的搶答動作,當有人按下搶答按鈕時,會通過IO口電平的變化通知單片機,單片機會記錄按鍵的次序,并通過數碼管顯示當前的搶答結果。

? ? ? ? 為了保證搶答過程的準確性和公平性,設計中還需要考慮到以下因素。首先,按鍵模塊需要具備快速響應和高可靠性,以確保搶答者的動作能夠被準確地捕捉到。其次,顯示屏模塊需要能夠實時更新搶答結果,并顯示相應的信息,比如參與者的編號和搶答時間。最后,在電路連接方面,需要注意各個模塊之間的線路布局,以避免信號干擾和電氣問題。

? ? ? ?軟件系統采用C語言編寫程序,包括顯示程序,定時中斷服務,延時程序等,并在KEIL5中調試運行,硬件系統利用PROTEUS8.11強大的功能來實現,簡單切易于觀察,在仿真中就可以觀察到實際的工作狀態。

二、實現功能

? ? ? ? 以51單片機為控制核心,設計一種四路搶答器。整個系統包括MCU、晶振電路、時鐘電路、功能按鍵以及數碼管顯示。該系統利用共陽數碼管實時顯示搶答倒計時時間,通過獨立按鍵設計控制搶答器的啟動、復位、以及不同選手的搶答。可具體實現以下功能:

? ? ? ? (1) 按下啟動鍵后,在10s倒計時的過程中,按下任意路搶答按鍵,數碼管上對應顯示搶答選手的序號并開始60s倒計時,60s倒計時結束后,搶答數據清零。

? ? ? ? (2) 按下復位鍵后,搶答器復位,再次按下啟動鍵可以實現新一輪的搶答。

? ? ? ? (3)·定時器定時50ms,20次定時可產生1秒鐘計時。

三、仿真演示

未運行仿真時,數碼管不顯示。

運行仿真后,進入準備界面,數碼管顯示默認搶答序號0和搶答倒計時10秒。

按下啟動按鍵,進入搶答界面,開始10秒搶答倒計時,并在數碼管上實時顯示。

在搶答倒計時范圍內,按下序號為1~4的選手搶答按鍵,搶答倒計時歸零,數碼管上顯示搶答選手序號和倒計時60秒。

60s倒計時結束后,數碼管顯示0-00,表示1次搶答結束。

按下復位按鈕恢復到準備界面,以便進行下一次搶答。

四、源程序(部分)

#include "reg52.h"
#include "delay.h"
#include "smg.h"
#include "timer.h"sbit key1 = P1^0;	//四位選手
sbit key2 = P1^1;
sbit key3 = P1^2;
sbit key4 = P1^3;sbit start_stop = P3^6;	//搶答按鈕_bool action = 0;
_bool key1_flag = 0;
_bool key2_flag = 0;
_bool key3_flag = 0;
_bool key4_flag = 0;_bool reset_flag = 0; //復位標志位
_bool start_stop_flag = 0; //搶答標志位uint8 second = 10;	//時間
uint8 timer0_count = 0;	//定時器1計數值
uint8 number = 0; //隊號
uint8 number_display = 0;	//隊號顯示uint8 key_scan8(void);
void start_stop_keyscan(void);
/*-----------------------------------------------------------
主函數
------------------------------------------------------------*/
void main()
{ConfigTimer0();//定時器初始化while(1){start_stop_keyscan();//開始按鍵while(action)//按下開始鍵為1,搶答結束為0{while(!key_scan8()&&!reset_flag)	//無隊搶答{display(number_display,second);if(second == 0){break;}}if(number_display)//有隊搶答{second=60;}while(number_display&&!reset_flag){display(number_display,second);TR0 = 1;if(second == 0){break;}}TR0 = 0;//時間到display(number_display,second);action = 0;//搶答結束break;}display(number_display,second);	}
}/*-----------------------------------------------------------
中斷服務函數
------------------------------------------------------------*/
void timer0() interrupt 1
{TH0 = (65536-50000)/256; //50msTL0 = (65536-50000)%256;	timer0_count ++;if(timer0_count == 20)//1s{timer0_count = 0;second--;	//10s倒計時if(second == 0)//計時結束{TR0 = 0;number_display = 0;action = 0;}}	
}/*-----------------------------------------------------------
開始鍵掃描函數
------------------------------------------------------------*/
void start_stop_keyscan(void)
{if(start_stop == 0){Delay_ms(8);if((start_stop == 0)&&(!start_stop_flag)){start_stop_flag = 1;action = 1;TR0 = 1;reset_flag = 0;}}else{start_stop_flag = 0;	}
}/*-----------------------------------------------------------
四位搶答鍵掃描函數
------------------------------------------------------------*/
uint8 key_scan8(void)
{if(key1 == 0){Delay_ms(8);if((key1 == 0)&&(!key1_flag)){key1_flag = 1;number  = 1;number_display = number;}}else{key1_flag = 0;number  = 0;	}if(key2 == 0){Delay_ms(8);if((key2 == 0)&&(!key2_flag)){key2_flag = 1;number  = 2;number_display = number;}}else{key2_flag = 0;number  = 0;	}if(key3 == 0){Delay_ms(8);if((key3 == 0)&&(!key3_flag)){key3_flag = 1;number  = 3;number_display = number;}}else{key3_flag = 0;number  = 0;	}if(key4 == 0){Delay_ms(8);if((key4 == 0)&&(!key4_flag)){key4_flag = 1;number  = 4;number_display = number;}}else{key4_flag = 0;number  = 0;	}if(number_display != 0)	{return 1;}else{return 0;}	
}/*-----------------------------------------------------------
復位鍵外部中斷函數
------------------------------------------------------------*/
void EXINT0() interrupt 0  //外部中斷0觸發函數
{if(!reset_flag){reset_flag = 1;number_display = 0;action=0;second=10;}}

仿真源文件及源程序百度網盤鏈接:https://pan.baidu.com/s/1xKDNPqCrTqCiqI-F8pCGcQ?
提取碼:v8a3?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/41996.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41996.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41996.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

線程交互現象

線程交互現象 小明對自家的狗子有個規定,就是在狗狗還沒吃完的時候,可以繼續給他加飯 不好的解決方式 狗狗感覺一千年沒吃飯了,狼吞虎咽起來,最后飯只剩下最后一點點,吃飯線程中使用while循環判斷是否是1,如果是1那么就一直循環,知道加飯又重新回到了起點,這雖然是狗狗…

GEE代碼實例教程詳解:湖泊面積分析

GEE代碼實例教程詳解:湖泊面積分析 完整代碼 // 定義研究區域的坐標點 var coordinates [[42.000552219688586, 38.18969302118053],[43.868228000938586, 38.18969302118053],[43.868228000938586, 39.209978258633186],[42.000552219688586, 39.20997825863318…

C++ --> 類和對象(一)

歡迎來到我的Blog,點擊關注哦💕 前言 前面講到了C的入門需要學習的知識,是為了后面更好的學習。學習是不斷深入的,內容是不斷復雜的。篤定信心。 一、面向對象編程(OOP)和面向過程編程(POP)的認識 面向過程編程(Proc…

力扣-貪心算法4

406.根據身高重建隊列 406. 根據身高重建隊列 題目 假設有打亂順序的一群人站成一個隊列,數組 people 表示隊列中一些人的屬性(不一定按順序)。每個 people[i] [hi, ki] 表示第 i 個人的身高為 hi ,前面 正好 有 ki 個身高大于或…

MyBatis的簡介與使用

Mybatis JDBC操作數據庫的缺點 存在大量的冗余代碼。手工創建 Connection、Statement 等,效率低下。手工將結果集封裝成實體對象。查詢效率低,沒有對數據訪問進行優化。 Mybatis框架 簡介 MyBatis 本是 apache 的一個開源項目 iBatis, 2010年這個項目由…

imx6ull/linux應用編程學習(14) MQTT基礎知識

什么是mqtt? 與HTTP 協議一樣, MQTT 協議也是應用層協議,工作在 TCP/IP 四層模型中的最上層(應用層),構建于 TCP/IP協議上。 MQTT 最大優點在于,可以以極少的代碼和有限的帶寬,為連接…

網絡資源模板--Android Studio 外賣點餐App

目錄 一、項目演示 二、項目測試環境 三、項目詳情 四、完整的項目源碼 原創外賣點餐:基于Android studio 實現外賣(點)訂餐系統 非原創奶茶點餐:網絡資源模板--基于 Android Studio 實現的奶茶點餐App報告 一、項目演示 網絡資源模板--基于Android …

在AvaotaA1全志T527開發板上使用AvaotaOS 部署 Docker 服務

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然后發布到任何流行的 Linux或Windows操作系統的機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。 準備…

dolphinscheduler-springboot集成

springboot集成dolphinscheduler 說明 為了避免對DolphinScheduler產生過度依賴,實踐中通常不會全面采用其內置的所有任務節點類型。相反,會選擇性地利用DolphinScheduler的HTTP任務節點功能,以此作為工作流執行管理的橋梁,對接…

信息技術課上的紀律秘訣:營造有序學習環境

信息技術課是學生們探索數字世界的樂園,但同時也是課堂紀律管理的挑戰場。電腦、網絡、游戲等元素可能分散學生的注意力,影響學習效果。本文將分享一些有效的策略,幫助教師在信息技術課上維持課堂紀律,確保教學活動順利進行。 制…

幾何建模基礎-樣條曲線和樣條曲面介紹

1.概念介紹 1.1 樣條曲線的來源 樣條的英語單詞spline來源于可變形的樣條工具,那是一種在造船和工程制圖時用來畫出光滑形狀的工具:富有彈性的均勻細木條/金屬條/有機玻璃條,它圍繞著按指定位置放置的重物或者壓鐵做彈性彎曲,以…

JS實現一個簡單的模糊匹配

1、示例數據如下: // 示例數據 const data [ { name: ‘Alice’, age: 25 }, { name: ‘Bob’, age: 30 }, { name: ‘Charlie’, age: 35 }, { name: ‘David’, age: 40 }, { name: ‘Eve’, age: 45 } ]; 2、模糊匹配函數 // 模糊匹配函數 function fuzzyMatch(…

基于LangChain的RAG開發教程(二)

v1.0官方文檔:https://python.langchain.com/v0.1/docs/get_started/introduction/ 最新文檔:https://python.langchain.com/v0.2/docs/introduction/ LangChain是一個能夠利用大語言模型(LLM,Large Language Model)能…

植物大戰僵尸融合嫁接版 MAC 版本下載安裝詳細教程

繼植物大戰僵尸雜交版火了之后,PVZ改版可謂是百花齊放,最近又有一個非常好玩的模式被開發出來了,他們稱為《植物大戰僵尸融合嫁接版》 該版本并沒有對植物卡牌做改動,而是可以將任意兩種植物疊放到一起進行融合,產生新…

思路打開!騰訊造了10億個角色,驅動數據合成!7B模型效果打爆了

世界由形形色色的角色構成,每個角色都擁有獨特的知識、經驗、興趣、個性和職業,他們共同制造了豐富多元的知識與文化。 所謂術業有專攻,比如AI科學家專注于構建LLMs,醫務工作者們共建龐大的醫學知識庫,數學家們則偏愛數學公式與定…

lvgl 本地化

生成語言包文件: lv_i18n compile -t en-GB.yml -o ui 正則匹配中文 "[\u4e00-\u9fa5]" _("[\u4e00-\u9fa5]") https://www.cnblogs.com/jerryqi/p/9604828.html 查找多個漢字體的 ("[\u4e00-\u9fa5]"[)]) _($1) "科室:"…

數據分析與挖掘實戰案例-電商產品評論數據情感分析

數據分析與挖掘實戰案例-電商產品評論數據情感分析 文章目錄 數據分析與挖掘實戰案例-電商產品評論數據情感分析1. 背景與挖掘目標2. 分析方法與過程2.1 評論預處理1. 評論去重2. 數據清洗 2.2 評論分詞1. 分詞、詞性標注、去除停用詞2. 提取含名詞的評論3. 繪制詞云查看分詞效…

昇思25天學習打卡營第12天 | LLM原理和實踐:MindNLP ChatGLM-6B StreamChat

1. MindNLP ChatGLM-6B StreamChat 本案例基于MindNLP和ChatGLM-6B實現一個聊天應用。 ChatGLM-6B應該是國內第一個發布的可以在消費級顯卡上進行推理部署的國產開源大模型,2023年3月就發布了。我在23年6月份的時候就在自己的筆記本電腦上部署測試過,當…

UI自動化測試框架:PO 模式+數據驅動(超詳細)

1. PO 設計模式簡介 什么是 PO 模式? PO(PageObject)設計模式將某個頁面的所有元素對象定位和對元素對象的操作封裝成一個 Page 類,并以頁面為單位來寫測試用例,實現頁面對象和測試用例的分離。 PO 模式的設計思想與…

Python學習中進行條件判斷(if, else, elif)

條件判斷是編程中必不可少的一部分,它讓程序可以根據不同的條件執行不同的代碼塊。在Python中,主要使用if、elif和else語句來實現條件判斷。 基本語法 在Python中,條件判斷的基本語法如下: if condition:# 當condition為True時…