freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于單片機(jī)的8路智能搶答器設(shè)計(jì)(操岳恒)(編輯修改稿)

2025-01-12 01:04 本頁面
 

【文章內(nèi)容簡介】 就需要 16 個按鈕。在設(shè)計(jì)中發(fā)現(xiàn),如果采用獨(dú)立鍵盤連接電路,則需要一個端口連接一個按鍵,所以需要占 用 16 個 I/O口,就會造成資源的浪費(fèi),成本增高。所以當(dāng)有 16 位選手參加搶答比賽時,需要 16 個鍵盤,采用 4 X 4 矩陣鍵盤只需要 8 個 I/O 口,從而大大減少了 I/O 口資源的浪費(fèi)。當(dāng)鍵盤個數(shù)超過 8 個,采用矩陣鍵盤是最為合適的。 相比獨(dú)立鍵盤,矩陣鍵盤的特點(diǎn)是:電路的 I/O 口需要相對較少,能有效節(jié)省 I/O 口資源浪費(fèi);但是硬件電路相對復(fù)雜,鍵盤掃描比獨(dú)立鍵盤掃描繁瑣,需要獨(dú)立軟件編程,完成鍵盤掃描,從而確定那個按鍵按下,做出相應(yīng)操作,矩陣鍵盤更適合多按鍵電路。 以下是搶答器系統(tǒng)的矩陣鍵盤輸入電路, P3 口高四位( )作為列線, P3 口低四位( )作為行線,電路如圖 所示: 14 圖 矩陣鍵盤電路 矩陣鍵盤接好以后,就要對應(yīng)的鍵盤掃描工作,判斷出那個按鍵按下,從而做出對應(yīng)操作。 當(dāng)沒有按鍵按下的時候所有行線和列線是開路的。當(dāng)鍵盤上的一個按鍵被按下的時候,該按鍵的行線和列線就會被短路。將所有的列線都置為高電平,行線逐個置為低電平。例如當(dāng)把第一行線置為低電平,第一行有按鍵按下時該按鍵的列線也會變成低電平,從而判斷第一行的某個按鈕被按下,以此類推,單片機(jī)根據(jù)電平的變化從而掃描出鍵 盤操作。 鍵盤的掃描分為循環(huán)掃描工作方式和中斷掃描工作方式。 循環(huán)掃描工作方式,是在單片機(jī)工作的過程中調(diào)用鍵盤掃描子程序來響應(yīng)按鍵輸入。此種掃描方式缺點(diǎn)是,不管鍵盤有無按下,單片機(jī)都會掃描鍵盤,然而在工作的過程中不需要按鍵按下,此時系統(tǒng)處于空掃描狀態(tài)。為了提高單片機(jī)的工作效率,采用中斷掃描,即只有按鍵按下時,才發(fā)送中斷申請,進(jìn)行鍵盤掃描。 [5] 本次設(shè)計(jì)采用了循環(huán)掃描的工作方式。 15 按鍵在按下的過程中有可能會產(chǎn)生抖動,此時邏輯電平是不穩(wěn)定,所以在鍵盤掃描過程中,一定要在軟件設(shè)計(jì)過程加入去抖部分。在本次設(shè)計(jì)中, 我們通過在軟件編程過程中,對按鍵掃描進(jìn)行延時的方法中來去除抖動。在按下按鍵并處理完相應(yīng)操作時,可以在軟件編程中增加鍵盤釋放的程序。 [6] 顯示電路設(shè)計(jì) 顯示電路是最常用的輸出設(shè)備。為觀察單片機(jī)的運(yùn)行狀態(tài),往往需要顯示器來直觀的表現(xiàn)出來。搶答器電路需要通過顯示電路,來顯示 目前的搶答階段、 搶答選手的標(biāo)號,和倒計(jì)時顯示。本系統(tǒng)采用 LED數(shù)碼管、 LED 點(diǎn)陣、以及液晶屏 顯示,數(shù)碼管前兩位顯示倒計(jì)時,后兩位顯示搶答選手的標(biāo)號。 下圖 是搶答器系統(tǒng)的顯示電路: 圖 顯示電路 16 四位一體數(shù)碼管 顯示 在經(jīng)過透明鎖存器的數(shù)據(jù)緩沖電路后,就會將數(shù)據(jù)傳輸?shù)斤@示器中。比較常用的顯示器有 1602 液晶顯示器、數(shù)碼管顯示等。由于搶答器電路中需要顯示的數(shù)據(jù)比較簡單,如若采用 1602 液晶顯示就會有些浪費(fèi)。所以本系統(tǒng)的顯示電路采用四位一體共陰數(shù)碼管顯示。每一位數(shù)碼管顯示是由 8 個發(fā)光二極管組成的,根據(jù)不同的二極管發(fā)光,從而顯示出不同的數(shù)據(jù)。 通常我們在顯示采用的方法有兩種:動態(tài)顯示和靜態(tài)顯示。 靜態(tài)顯示 原理是: 每個數(shù)碼管 由 8 個小型的發(fā)光二極管組成,所以不同的二極管發(fā)光便顯示出不同的字符, 8 個發(fā)光二極管 必須接一個 8 位數(shù)據(jù) 線來保持 所需 顯示的字形,當(dāng)送入一次字形碼 的編碼 后,即可一直顯示所需字形 ,直到送入 一個 新 的 字形 編 碼為止。 靜態(tài)顯示的優(yōu)點(diǎn)是占用 CPU 較少的 時間, 數(shù)碼 顯示便于控制。缺點(diǎn) 是:每一個字形需要一個數(shù)碼管,每個數(shù)碼管需要 8 位 I/O 口控制,所需 電路復(fù)雜 且成本高。 [8] 動態(tài)顯示 原理 是 : 將所有位數(shù)碼管的 8 位 發(fā)光二極管的 信號 線并聯(lián)在一起, 由一個特殊的 位選線控制那一位數(shù)碼管 顯示 。顯示特性沒有靜態(tài)顯示好,利用二極管發(fā)光的和人眼視覺的暫留作用,讓人感覺好像各位數(shù)碼管在同時顯示,稱為動態(tài)顯示。 數(shù)碼顯示分為共陰和共陽顯示兩種。下圖 是數(shù)碼管顯示的原理圖: 圖 共陰 數(shù)碼管原理圖 17 CS0、 CS CS CS3 分別為四位一體數(shù)碼管的位選端,當(dāng)其中一個端口置于低電平時,則這一位數(shù)碼管被選中;然后再設(shè)置段選端,段選端由 8 位數(shù)據(jù)線控制,當(dāng)一個端口處于高電平是則對應(yīng)的一段顯示。從而完成數(shù)碼顯示。 如圖 為所用數(shù)碼管: 圖 數(shù)碼管電路 圖中 A、 B、 C、 D 四個端口分別為數(shù)碼管顯示的位選, a、 b、 c、d、 e、 f、 g、 p 為數(shù)碼管的段選。 數(shù)碼管的位選由 控制,段選信號由 控制。 當(dāng)程序分別控制 P0 口 和 P1 口的時候,然后完成顯示功能。 報警電路設(shè)計(jì) 在搶答器系統(tǒng)里,當(dāng)搶答時間快要結(jié)束時或者答題時間快要結(jié)束時,需要一個報警電路來提示搶答選手,所以在本次設(shè)計(jì)中添加了報警電路部分。當(dāng)答題時間和搶答時間小于 5 秒后,則會啟動報警電路。如圖 所示,為報警電路。 18 圖 報警電路 如上圖所示為報警電路,當(dāng) 口為低電平時, LED 燈通路,則LED 燈亮。單片機(jī)的 口負(fù)責(zé)發(fā)聲電路,當(dāng) 為低電平時候,三極管導(dǎo)通,揚(yáng)聲器工作,從而完成發(fā)聲電路。 當(dāng)搶答時間和答題時間剩余 5 秒時,為了及時提示 選手,設(shè)置 LED燈和揚(yáng)聲器隔 1 秒工作一次,從而達(dá)到警示選手的作用。 報警電路中,揚(yáng)聲器部分采用 PNP 三極管驅(qū)動,當(dāng)基極為低電平時,三極管導(dǎo)通,從而驅(qū)動揚(yáng)聲器電路工作。 電源電路設(shè)計(jì) 在整個搶答系統(tǒng)中,一定會用到電源,而一般直流電源均為 的倍數(shù),單片機(jī)所需電源為 5V。所以電路中需要穩(wěn)壓電源來滿足單片機(jī)電路的電壓限制。在本次設(shè)計(jì)中,采用 7805 達(dá)到穩(wěn)壓的效果。 7805所需外圍電路簡單,內(nèi)部具有保護(hù)電路,用起來方便,并且價格便宜。在電子設(shè)計(jì)中得到了廣泛的運(yùn)用。 如下圖 所示為 7805 的外圍電路 : 19 圖 穩(wěn)壓器 7805 外圍電路 將 12V 直流電源接入左邊,右邊輸出是 5V 電壓。將單片機(jī)電源以及 74HC573 電源接入 5V 電源,即可使本系統(tǒng)工作。 下載器電路 當(dāng)完成上述工作后,一個完整的系統(tǒng)基本完成,此時需要一個下載器電路將軟件程序下載達(dá)到 STC89C52 單片機(jī)中才能實(shí)現(xiàn)搶答器功能。 下載器需要和單片機(jī)的 、 、 、 RST 端口連接起來,只有這樣才能將軟件程序下載到 STC89C52 中。 下載電路連接方式如圖 所示: 20 圖 下載電路 連接方式 將下載器一端與單片機(jī)按照上圖連接起來,同時將下載器 USB 一端插入電腦,通過燒寫軟件將軟件程序?qū)懭氲?STC89C52 中。燒寫成功后,則可驗(yàn)證本系統(tǒng)的軟件部分與硬件部分是否對應(yīng),以及測試本系統(tǒng)的是否能實(shí)設(shè)計(jì)要求中的各個功能模塊。 總體電路設(shè)計(jì) 本章 詳細(xì)敘述了搶答器各個模塊的設(shè)計(jì)原理以及具體電路。在以STC89C52 為核心電路的基礎(chǔ)上,結(jié)合顯示電路、鍵盤輸入電路、報警電路、復(fù)位電路和外部時鐘電路等外圍電路,就設(shè)計(jì)出了基于單片機(jī)的搶答器系統(tǒng)。 下圖 是單片機(jī)搶答器系統(tǒng)的總圖。 圖 基于單片機(jī)的搶答器電路 總圖 21 實(shí)物電路制作 在 Proteus 上仿真完畢以后 ,將所需器件羅列出來,然后在實(shí)驗(yàn)室用萬能板將每個器件連接起來。焊接完畢后,將每個功能模塊一一測試出來。 調(diào)試出來的實(shí)物圖如下圖 所示: 圖 實(shí)物電路展示 22 4 軟件設(shè)計(jì) Keil C51 軟件 簡介 在硬件設(shè)計(jì)完畢后,就要通過軟件編程,將設(shè)計(jì)的功能逐一實(shí)現(xiàn)。寫單片機(jī)軟件語言時,我們可以采用匯編語言和 C 語言來完成,二者殊途同歸。匯編語言是機(jī)器語言,而 C 語言是中級語言。匯編語言 的特點(diǎn)是執(zhí)行效率高,對單片機(jī)中的寄存器直接操作,但是開發(fā)周期長,移植性不強(qiáng)。 C 語言具有使用范圍廣,可移植性強(qiáng),開發(fā)周期短,但是執(zhí)行效率較匯編語言低。 在本系統(tǒng)的軟件開發(fā)中,我們采用 C 語言在 Keil 軟件上來完成軟件編程。 主程序系統(tǒng)結(jié)構(gòu) 軟件設(shè)計(jì)分為以下 五 個部分:主程序設(shè)計(jì),開始鍵掃描子程序,搶答鍵盤掃描子程序,顯示程序,定時器中斷。 23 圖 主程序系統(tǒng)框圖 上圖為主程序系統(tǒng)框圖,程序代碼部分均參照上述邏輯設(shè)計(jì)。 程序流程圖 任何一 個 C 語言程序,都先從主程序開始執(zhí)行,從主程序執(zhí)行開始鍵掃描程序,若開始鍵按下,則觸發(fā)定時器中斷 1,并掃描鍵盤,若有搶答選手按下按鍵,則顯示剩余答題時間,并顯示 鎖存 搶答選手號碼 ,并且伴隨提示音 。 此外,當(dāng)有選手按下后,就要封鎖電路,禁止其他選手搶答。 若無 選手搶答,則倒計(jì)時,當(dāng)剩余五秒時,觸發(fā)報警程序,即定時器中斷 2。當(dāng)主持人按下開始鍵,活著復(fù)位鍵時,復(fù)位電路。重新開始電路。 下圖 為程序流程圖: 24 圖 程序流程圖 25 程序設(shè)計(jì) 主程序設(shè)計(jì) 主程序是軟件設(shè)計(jì)的靈魂部分,是關(guān)系到程序能否順利執(zhí)行的關(guān)鍵部分,主程序如下所示。 以下是定時參數(shù)的初始化: void init() { TMOD=0x01。 TH0=(6553650000)/256。 TL0=(6553650000)%256。 TH1=(6553650000)/256。 TL1=(6553650000)%256。 EA=1。 ET0=1。 ET1=1。 } 這部分選擇定時器工作方式的選擇;通過對方式寄 存器 TMOD 的設(shè)置,定時器 /計(jì)數(shù)器 T0, T1 可選擇 4 種不同的工作方式。 定時器中斷是當(dāng)數(shù)據(jù)溢出時觸發(fā)中斷,并且計(jì)數(shù)器是加 1 計(jì)數(shù)的,所以需要預(yù)先置入初始值,當(dāng)數(shù)據(jù)溢出時觸發(fā)中斷。 主程序首先將執(zhí)行判斷開始鍵是否按下,以下是開始鍵的掃描程序: void start_scan() { if(K0==0) { 26 delay(10)。 if(K0==0) { while(!K0)。 TR0=1。 time=qdtime。 flag=1。 s_flag=1。 b_flag=1。 beep=1。 gled=1。 key=0。 } } } 判斷是否開始鍵是否按下,對按鍵進(jìn)行去抖操作后,若開始鍵按下,則打開倒計(jì)時,將各個標(biāo)志位初始化, flag 為開始標(biāo)志位。當(dāng)開始按下時,即會顯示倒計(jì)時。 當(dāng)判斷完開始按鍵的 操作后,如果開始按鍵按下,則會出現(xiàn)兩種情況:開始鍵按下,無人搶答;開始鍵按下,有人搶答。 當(dāng)開始鍵按下,有人搶答時: if((flag==1)amp。(s_flag==0)) //當(dāng)開始鍵按下并有人搶答,進(jìn)行答題倒計(jì)時 { if(K_time==0) //開始答題按鍵掃描 { delay(10)。 //去抖操作 27 if(K_time==0) { while(!K_time)。 time=dttime。 TR0=1。 } } } 當(dāng)開始鍵按下時, s_flag 是矩陣鍵盤的標(biāo)志位, s_flag=0 表示矩陣鍵盤有人按下,即有人搶答。當(dāng)開始鍵按下,且矩陣鍵盤中有人按下,程序開始判斷答題按鍵是否按下,當(dāng)答題控制鍵按下,則啟動答題倒計(jì)時。 當(dāng)開始鍵按下, 無人搶答時: if((flag==1)amp。(s_flag==1)) //開始鍵按下且答題鍵沒有人按下,進(jìn)行鍵盤掃描 { keyscan()。 //鍵盤掃描子函數(shù)調(diào)用 } 當(dāng)開始鍵按下, s_flag=1 表示沒人搶答,則進(jìn)行 矩陣 鍵盤掃描。矩陣鍵盤掃描過程中,如果鍵盤沒有人按下,則 s_flag=1,所以一直掃描鍵盤,當(dāng)?shù)褂?jì)時剩余 5 秒,就會報警。若倒計(jì)時為 0 秒時還沒人搶答,則主持人按下開始按鈕即可。若鍵盤有人按下則 s_flag=0,進(jìn)入有人搶答的程序中。 [9] 延時子程序 在單片機(jī)軟件操作過程中會用到許多的延時程序,譬如,當(dāng)要去除鍵盤抖動時,就需要延時程序來達(dá)到。在數(shù)碼管的動態(tài)顯示上,也需要通過延時程序來達(dá)到目的。 28 void delay(uint z) { uint x,y。 for(x=z。x0。x) for(y=110。y0。y)。 } 以上就是延時函數(shù),參數(shù) z 為形式參數(shù),當(dāng)需要調(diào)用延時函數(shù)時,只需在函數(shù)里賦值,即可
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1