基于單片機的簡(jiǎn)易定時(shí)報警器電路設計
設計一個(gè)單片機控制的簡(jiǎn)易定時(shí)報警器。要求根據設定的初始值(1-59秒)進(jìn)行倒計時(shí),當計時(shí)到0時(shí)數碼管閃爍“00”(以1Hz閃爍),按鍵功能如下:
(1)設定鍵:在倒計時(shí)模式時(shí),按下此鍵后停止倒計時(shí),進(jìn)入設置狀態(tài);如果已經(jīng)處于設置狀態(tài)則此鍵無(wú)效。
(2)增一鍵:在設置狀態(tài)時(shí),每按一次遞增鍵,初始值的數字增1。
(3)遞一鍵:在設置狀態(tài)時(shí),每按一次遞減鍵,初始值的數字減1。
(4)確認鍵:在設置狀態(tài)時(shí),按下此鍵后,單片機按照新的初始值進(jìn)行倒計時(shí)及顯示倒計時(shí)的數字。如果已經(jīng)處于計時(shí)狀態(tài)則此鍵無(wú)效。
3.1.2 模塊1:系統設計
(1)任務(wù)分析與整體設計思路
根據題目的要求,需要實(shí)現如下幾個(gè)方面的功能。
計時(shí)功能:要實(shí)現計時(shí)功能則需要使用定時(shí)器來(lái)計時(shí),通過(guò)設置定時(shí)器的初始值來(lái)控制溢出中斷的時(shí)間間隔,再利用一個(gè)變量記錄定時(shí)器溢出的次數,達到定時(shí)1秒中的功能。然后,當計時(shí)每到1秒鐘后,倒計時(shí)的計數器減1。當倒計時(shí)計數器到0時(shí),觸發(fā)另一個(gè)標志變量,進(jìn)入閃爍狀態(tài)。
顯示功能:顯示倒計時(shí)的數字要采用動(dòng)態(tài)掃描的方式將數字拆成“十位”和“個(gè)位”動(dòng)態(tài)掃描顯示。如果處于閃爍狀態(tài),則可以不需要動(dòng)態(tài)掃描顯示,只需要控制共陰極數碼管的位控線(xiàn),實(shí)現數碼管的滅和亮。
鍵盤(pán)掃描和運行模式的切換:主程序在初始化一些變量和寄存器之后,需要不斷循環(huán)地讀取鍵盤(pán)的狀態(tài)和動(dòng)態(tài)掃描數碼管顯示相應的數字。根據鍵盤(pán)的按鍵值實(shí)現設置狀態(tài)、計時(shí)狀態(tài)的切換。
(2)單片機型號及所需外圍器件型號,單片機硬件電路原理圖
選用MCS-51系列AT89S51單片機作為微控制器,選擇兩個(gè)四聯(lián)的共陰極數碼管組成8位顯示模塊,由于A(yíng)T89S51單片機驅動(dòng)能力有限,采用兩片74HC244實(shí)現總線(xiàn)的驅動(dòng),一個(gè)74HC244完成位控線(xiàn)的控制和驅動(dòng),另一個(gè)74HC244完成數碼管的7段碼輸出,在輸出口上各串聯(lián)一個(gè)100歐姆的電阻對7段數碼管限流。
由于鍵盤(pán)數量不多,選擇獨立式按鍵與P1口連接作為四個(gè)按鍵輸入。沒(méi)有鍵按下時(shí)P1.0-P1.3為高電平,當有鍵按下時(shí),P1.0-P1.3相應管腳為低電平。電路原理圖如圖3-1所示。
圖3-1 定時(shí)報警器電路原理圖
(3)程序設計思路,單片機資源分配以及程序流程
①單片機資源分配
采用單片機的P3口作為按鍵的輸入,使用獨立式按鍵與P3.0-P3.3連接,構成四個(gè)功能按鍵。
在計時(shí)功能中,需要三個(gè)變量分別暫存定時(shí)器溢出的次數(T1_cnt)、倒計時(shí)的初始值(init_val)以及當前倒計時(shí)的秒數(cnt_val)。
按鍵掃描功能中,需要兩個(gè)變量,一個(gè)變量(key_val_new)用來(lái)存儲當前掃描的鍵值(若無(wú)按鍵按下則為255),另一個(gè)變量(key_val_old)用來(lái)存儲上一次掃描的鍵值。只有這兩個(gè)變量值不一樣時(shí),才能說(shuō)明是一次新的按鍵按下或彈起了,同時(shí)將新的鍵值賦給key_val_old變量。
在顯示功能中,需要定義一組數組(code類(lèi)型),值為0-9數字對應的數碼管7段碼。還需要定義一個(gè)變量(show_val)暫存要顯示的數據,用于動(dòng)態(tài)掃描顯示中。
在整個(gè)程序中,定義了一個(gè)狀態(tài)變量(state_val)用來(lái)存儲當前單片機工作在哪種狀態(tài)。
②程序設計思路
鑒于題目要求,存在三種工作模式:初始值設置模式、倒計時(shí)模式、計時(shí)到0時(shí)的閃爍模式。變量state_val為0時(shí),處于倒計時(shí)模式。變量state_val為1時(shí),處于初始值設置模式。變量state_val為2時(shí),處于閃爍模式。這些狀態(tài)的切換取決于按下哪一個(gè)鍵以及是否計時(shí)到0。狀態(tài)的切換圖如圖3-2
圖3-2 狀態(tài)的切換
單片機復位之后,默認處于倒計時(shí)模式,啟動(dòng)定時(shí)器,定時(shí)器每隔250us溢出一次,根據定時(shí)器溢出次數來(lái)計時(shí),到1秒時(shí)將時(shí)間的計數器減1。當“設置鍵”按下時(shí),變量state_val由0變?yōu)?,切換到設置模式??梢允褂谩斑f增鍵”“遞減鍵”對計時(shí)初始值進(jìn)行修改。按下“確認鍵”時(shí),回到計時(shí)模式開(kāi)始以新的初始值進(jìn)行倒計時(shí)。當倒計時(shí)到0時(shí),變量state_val由1變?yōu)?,處于閃爍狀態(tài),在這種狀態(tài)下,根據按鍵的情況分別又切換到計時(shí)和設置狀態(tài)。
③程序流程
主程序首先需要初始化定時(shí)器的參數和一些變量,然后進(jìn)入一個(gè)循環(huán)結構,在循環(huán)中始終只做兩件事,一是鍵盤(pán)的掃描,二是數碼管的動(dòng)態(tài)掃描。
在掃描鍵盤(pán)后,根據前一次按鍵的結果是否與本次鍵值相同。如果不同,表示有鍵按下或彈起,同時(shí)用本次按鍵值更新上一次的按鍵值。這樣設計旨在避免一個(gè)按鍵長(cháng)時(shí)間按下時(shí)被重復判為有新鍵按下,使得當前按下的鍵只有松開(kāi)后,下一次按下時(shí)才算為一次新的按鍵。
根據按鍵的值分別改變變量(state_val)的值或者在設置狀態(tài)時(shí)的倒計時(shí)初始值。完整的主程序圖如圖3-3所示。
圖3-3 主程序的流程圖
在定時(shí)器的參數中,選擇定時(shí)器T1的8位自動(dòng)裝載模式,每250us產(chǎn)生一次溢出中斷,中斷服務(wù)程序如圖3-4所示。
中斷服務(wù)程序流程圖
(4)軟硬件調試方案
軟件調試方案:偉福軟件中,在“文件新建文件”中,新建C語(yǔ)言源程序文件,編寫(xiě)相應的程序。在“文件新建項目”的菜單中,新建項目并將C語(yǔ)言源程序文件包括在項目文件中。
在 “項目編譯”菜單中將C源文件編譯,檢查語(yǔ)法錯誤及邏輯錯誤。在編譯成功后,產(chǎn)生以 “*.hex”和“*.bin” 后綴的目標文件。
硬件調試方案:在設計平臺中,將單片機的P3.0-P3.3分別與獨立式鍵盤(pán)的相應位通過(guò)插線(xiàn)連接起來(lái)。
在偉福中將程序文件編譯成目標文件后,運行MCU下載程序,選擇相應的flash 數據文件,點(diǎn)擊“編程”按鈕,將程序文件下載到單片機的Flash中。
然后,上電重新啟動(dòng)單片機,檢查所編寫(xiě)的程序是否達到題目的要求,是否全面完整地完成試題的內容。

評論