利用單片機(jī)、若干個按鍵和6位數(shù)碼管,構(gòu)建時分秒實時時鐘。要求:(1)時間累進(jìn)最小單位為秒,數(shù)碼管為動態(tài)顯示,共陽共陰不限;(2)具有時鐘設(shè)置功能,參照如下要求設(shè)置:A、“設(shè)置”鍵按下,進(jìn)入設(shè)置狀態(tài);B、“選擇/移位”鍵按下,選定對時、對分、對秒設(shè)置;C、用上、下鍵(或加、減鍵)對選定的時、分、秒進(jìn)行設(shè)置,設(shè)定起點(diǎn)時間;D、“確認(rèn)”鍵按下后,從設(shè)定的起點(diǎn)時刻開始,實現(xiàn)時分秒時鐘;E、“取消”鍵按下后,本次所有設(shè)置無效,仍從“設(shè)置”按下前時刻開始計時。 我們用單片機(jī)的P0口的連接數(shù)碼管的段碼線, P2口連接數(shù)碼管的位選線,P1.0口為設(shè)置按鍵,P1.1口為選擇/移位按鍵,P1.2口為加一按鍵,P1.3口為減一按鍵,P1.4口為確認(rèn)按鍵,P1.5口為取消按鍵。單片機(jī)上電之后定時器T0開始計時,按下設(shè)置按鍵后進(jìn)入設(shè)置模式,按下不同的按鍵對應(yīng)設(shè)計要求的不同效果。 1.2 分析 根據(jù)題目,我們需要實現(xiàn)時分秒時鐘功能,并且進(jìn)入設(shè)置模式后,按下不同的按鍵能夠進(jìn)行不同的設(shè)置操作,從而實現(xiàn)更改時分秒的值等操作。因此,我們將總原理圖分為單片機(jī)最小系統(tǒng)模塊、獨(dú)立按鍵模塊、數(shù)碼管顯示模塊、數(shù)碼管鎖存驅(qū)動模塊等四個模塊。單片機(jī)最小系統(tǒng)為主控板處理信息;獨(dú)立按鍵模塊來實現(xiàn)按鍵信息的輸入;數(shù)碼管顯示模塊用來根據(jù)獨(dú)立按鍵模塊不同按鍵按下時讀取的鍵值來進(jìn)行段選和位選,從而完成時鐘顯示功能;數(shù)碼管驅(qū)動模塊用來增加數(shù)碼管的驅(qū)動能力,并且作為鎖存器,當(dāng)輸入的數(shù)據(jù)消失時,在芯片的輸出端數(shù)據(jù)仍然保持。 2.方案設(shè)計 2.1 系統(tǒng)總體框圖 圖2.1 系統(tǒng)總體框圖 2.2 系統(tǒng)總體框圖描述 AT89C51:作為主控芯片,來處理接收到的按鍵信息,并控制數(shù)碼管顯示相應(yīng)的數(shù)值。 晶振電路:單片機(jī)晶振的作用是為系統(tǒng)提供基本的時鐘信號,通常一個系統(tǒng)共用一個晶振,便于各部分保持同步。沒有晶振,就沒有時鐘周期,沒有時鐘周期,就無法執(zhí)行程序代碼,單片機(jī)就無法工作。 復(fù)位電路:在上電或復(fù)位的過程中,控制單片機(jī)的復(fù)位狀態(tài),這段時間讓單片機(jī)保持復(fù)位狀態(tài),而不是一上電或剛復(fù)位完畢就工作,防止單片機(jī)發(fā)出錯誤的指令、執(zhí)行錯誤操作,也可以提高電磁兼容性能。 按鍵控制電路:通過獨(dú)立按鍵來進(jìn)行對標(biāo)志位和引腳高低電平的判斷,“設(shè)置”鍵按下,進(jìn)入設(shè)置狀態(tài);“選擇/移位”鍵按下,選定對時、對分、對秒設(shè)置;用上、下鍵(或加、減鍵)對選定的時、分、秒進(jìn)行設(shè)置,設(shè)定起點(diǎn)時間;“確認(rèn)”鍵按下后,從設(shè)定的起點(diǎn)時刻開始,實現(xiàn)時分秒時鐘;“取消”鍵按下后,本次所有設(shè)置無效,仍從“設(shè)置”按下前時刻開始計時。 數(shù)碼管顯示電路:采用共陰極數(shù)碼管,單片機(jī)通過I/O輸出高低電平信號,從而使數(shù)碼管點(diǎn)亮不同的段,顯示不同的數(shù)字,實現(xiàn)時鐘功能。 數(shù)碼管驅(qū)動鎖存電路:74HC573包含八路3態(tài)輸出的非反轉(zhuǎn)透明鎖存器,是一種高性能硅柵CMOS器件。SL74HC573跟LS/AL573的管腳一樣。器件的輸入是和標(biāo)準(zhǔn)CMOS輸出兼容的,加上拉電阻他們能和LS/ALSTTL輸出兼容。當(dāng)鎖存使能端LE為高時,這些器件的鎖存對于數(shù)據(jù)是透明的(也就是說輸出同步)。當(dāng)鎖存使能變低時,符合建立時間和保持時間的數(shù)據(jù)會被鎖存。
3. 硬件設(shè)計 3.1 主要元器件介紹 3.1.1 獨(dú)立按鍵 獨(dú)立按鍵式直接用I/O口線構(gòu)成的單個按鍵電路,其特點(diǎn)式每個按鍵單獨(dú)占用一根I/O口線,每個按鍵的工作不會影響其他I/O口線的狀態(tài)。獨(dú)立式按鍵電路配置靈活,軟件結(jié)構(gòu)簡單,但每個按鍵必須占用一個I/O口線,因此,在按鍵較多時,I/O口線浪費(fèi)較大,不宜采用。本次課設(shè)只需要6個獨(dú)立按鍵來實現(xiàn)功能,因此不會有太大的影響。 獨(dú)立按鍵的軟件常采用查詢式結(jié)構(gòu)。先逐位查詢沒跟I/O口線的輸入狀態(tài),如某一根I/O口線輸入為低電平,則可確認(rèn)該I/O口線所對應(yīng)的按鍵已按下,然后,再轉(zhuǎn)向該鍵的功能處理程序。 根據(jù)設(shè)計要求:按下設(shè)置按鍵后進(jìn)入設(shè)置模式,此時按下不同的按鍵,進(jìn)行不同的操作,比如移位選擇時分秒、加一減一等操作。只需將P1.0口為設(shè)置按鍵,P1.1口為選擇/移位按鍵,P1.2口為加一按鍵,P1.3口為減一按鍵,P1.4口為確認(rèn)按鍵,P1.5口為取消按鍵。通過按鍵掃描函數(shù)不斷掃描鍵值來判斷是否進(jìn)入相應(yīng)的設(shè)置模式。 在獨(dú)立按鍵處理過程中,一旦檢測到有按鍵閉合與確認(rèn)按鍵已經(jīng)穩(wěn)定閉合期間,通過調(diào)用10-20ms延時子程序避開按鍵抖動問題。由于按鍵是機(jī)械器件,按下或者松開時有固定的機(jī)械抖動,抖動圖如圖所示: 圖3.1 按鍵抖動圖 按鍵去抖分為硬件去抖和軟件去抖,硬件去抖最簡單的是按鍵兩端并聯(lián)電容,容量根據(jù)實驗而定。軟件去抖使用方便不增加硬件成本,容易調(diào)試,所以現(xiàn)在處理按鍵抖動問題大部分選擇軟件去抖。軟件去抖操作步驟如下: ①檢測到按鍵按下后進(jìn)行10-15ms延時,用于跳過這個抖動區(qū)域。 ②延時后再檢測按鍵狀態(tài),如果沒有按下表明是抖動或者干擾造成,如果仍舊按下,可以認(rèn)為是真正的按下。并進(jìn)行對應(yīng)的操作。 ③同樣按鍵釋放后也要進(jìn)行去抖動延時,延時后檢測按鍵是否真正松開。 3.1.2 8位共陰極數(shù)碼管 要顯示8位數(shù)碼管,需控制:8個公共端COM(位選線)和8*8個段引腳(段選線)。段選線選擇顯示字型,位選線控制著該數(shù)碼管的亮或滅。根據(jù)控制方式不同,分為靜態(tài)顯示和動態(tài)顯示。 靜態(tài)顯示就是顯示驅(qū)動電路具有輸出鎖存功能,單片機(jī)將所有要顯示的數(shù)據(jù)送出后就不再控制LED,直到下一次顯示時再傳送一次新的顯示數(shù)據(jù)。靜態(tài)顯示的數(shù)據(jù)穩(wěn)定,占用的CPU時間少。靜態(tài)顯示中,每一個顯示器都要占用單獨(dú)的具有鎖存功能的I/O接口,該接口用于筆劃段字型代碼。這樣單片機(jī)只要把要顯示的字形代碼發(fā)送到接口電路,該字段就可以顯示發(fā)送的字形。要顯示新的數(shù)據(jù)時,單片機(jī)再發(fā)送新的字形碼。另一種方法是動態(tài)掃指顯示。動態(tài)掃描方法是用其接口電路把所有顯示器的8個筆畫段a-h同名端連在一起,而每一個顯示器的公共極COM各自獨(dú)立的受I/O線控制。CPU向字段輸出口送出字形碼時,所有顯示器接收到相同的字形碼,但究竟是哪個顯示器亮,則取決于COM段,而這一段是由I/O控制的,由單片機(jī)決定何時顯示哪一位了。 動態(tài)掃描用分時的方法輪流控制各個顯示器的COM端,使各個顯示器輪流點(diǎn)亮。在輪流點(diǎn)殼掃描過程中,每位顯示器的點(diǎn)殼時間極為短暫,但由于人的視覺暫留現(xiàn)象及余暉效應(yīng),給人的感覺就是一串穩(wěn)定的顯示數(shù)據(jù)。 圖3.2 數(shù)碼管引腳圖 3.1.3 74HC573鎖存器 74HC573包含八路3態(tài)輸出的非反轉(zhuǎn)透明鎖存器,是一種高性能硅柵CMOS器件。SL74HC573跟LS/AL573的管腳一樣。器件的輸入是和標(biāo)準(zhǔn)CMOS輸出兼容的,加上拉電阻他們能和LS/ALSTTL輸出兼容。當(dāng)鎖存使能端LE為高時,這些器件的鎖存對于數(shù)據(jù)是透明的(也就是說輸出同步)。當(dāng)鎖存使能變低時,符合建立時間和保持時間的數(shù)據(jù)會被鎖存。 
圖3.3 74HC573引腳圖 3.2 原理圖及功能電路介紹 3.2.1 單片機(jī)最小系統(tǒng) 圖3.4 單片機(jī)最小系統(tǒng) 3.2.2 獨(dú)立按鍵 圖3.5 獨(dú)立鍵盤電路圖 3.2.3 鎖存器 圖3.5 鎖存器電路圖 3.2.4 8位數(shù)碼管顯示 圖3.6 數(shù)碼管顯示電路圖 4.軟件設(shè)計 4.1 程序流程圖 圖4.1 主程序流程圖 
圖4.2 按鍵掃描函數(shù)程序流程圖 圖4.3 中斷服務(wù)子程序流程圖 4.2程序流程圖說明 首先,對單片機(jī)最小系統(tǒng)及所需要的各種參數(shù)進(jìn)行初始化,包括I/O口初始化、按鍵以及定時器初始化,單片機(jī)上電之后定時器便開始計時,當(dāng)按鍵掃描函數(shù)掃描到“設(shè)置”鍵按下時,停止計時,存儲初始計時時間,當(dāng)“移位”鍵按下時,判斷“加”或者“減”按鍵是否被按下,通過“移位”和“加”“減”鍵來設(shè)定自己想要的時間后,按下“確認(rèn)”鍵從設(shè)定時間開始計時。按下“取消”鍵則從初始計時時間開始計時。 5.仿真調(diào)試 5.1 調(diào)試方案 本次設(shè)計軟件編程方面,采用模塊化編程的思想,主要有三個模塊:數(shù)碼管顯示模塊、按鍵掃描模塊、定時器計時模塊。首先,編寫數(shù)碼管顯示函數(shù)模塊。數(shù)碼管采用動態(tài)掃描的方式,先送位碼,再送段碼,然后再消隱。調(diào)試階段,數(shù)碼管正常顯示。其次,編寫定時器計數(shù)模塊。我們采用定時器T0,方式1,定時50ms,采用長定時,定時20次,即為1s,采用中斷方式。在中斷服務(wù)子程序中,根據(jù)日常時分秒的進(jìn)制關(guān)系,對時分秒變量進(jìn)行處理。 5.2 調(diào)試過程 在調(diào)試階段,數(shù)碼管顯示不出時間,一直處于黑屏,后來發(fā)現(xiàn),可能是數(shù)碼管消隱的問題,將相關(guān)語句注釋掉,即可正常顯示時間運(yùn)行。最后編寫按鍵掃描模塊。我們先定義定時器啟停標(biāo)志位flag,通過標(biāo)志位控制定時器的TR0,從而控制定時器的啟停。在設(shè)置按鍵里,只需將標(biāo)志位flag置1,即可停止定時器,進(jìn)入設(shè)置狀態(tài)。在選擇/移位按鍵里,我們循環(huán)改變之前定義的mark標(biāo)志位,即可選擇相應(yīng)的時間位。在增減按鍵里,我們需要對時間位數(shù)值進(jìn)行自增或自減,并且做好相應(yīng)的上下界的處理。由于if語句使得語句過于冗余,因此此處采用冒號表達(dá)式,這樣看起來更簡潔明了些。在取消按鍵里,由于需要記憶之前的時間,所以,在這之前我們定義一個存放時間值的數(shù)組。在設(shè)置按鍵里,將初始時間存放在數(shù)組里,然后在取消按鍵里,對時間進(jìn)行重新賦初始值,然后在將flag標(biāo)志位置0。在確認(rèn)按鍵里,我們只需要將flag標(biāo)志位置0,從而再次啟動定時計數(shù)器。在調(diào)試階段,雖然功能能夠正常使用,但出現(xiàn)了按鍵之間的沖突。例如,在數(shù)字鐘計時階段,可以通過按鍵來修改數(shù)值,所以,我們需要對按鍵進(jìn)行相應(yīng)的互鎖,讓不同時刻按鍵的功能失效或再次生效。我們可以利用之前定義的flag標(biāo)志位,在功能按鍵里進(jìn)行判斷,當(dāng)定時器停止計時,修改數(shù)值的功能鍵才有效。 此時,按鍵掃描模塊的按鍵功能不會沖突,達(dá)到了預(yù)期的效果。 但本次設(shè)計仍然存在一些問題,就是按鍵按下后,數(shù)碼管會黑屏,原因是我們的按鍵做了按鍵松開檢測,如果按鍵按下一直不放,會在此處出現(xiàn)死循環(huán)。而采用這一措施,是為了保證每次按鍵按下都執(zhí)行一次的功能。其次,考慮到數(shù)碼管顯示不如LCD好控制(或者說穩(wěn)定),我們沒有加移位調(diào)整時的時間位閃爍功能,可能操作起來缺少點(diǎn)體驗感。 5.3 Proteus仿真截圖 5.3.1 定時器定時 如圖,單片機(jī)上電之后定時器立即開始工作,以秒為最小單位顯示時間。 圖5.3.1 定時器開始工作 5.3.2 進(jìn)入設(shè)置模式 如圖,定時器進(jìn)入設(shè)置模式后,定時器暫停工作,定時值不變。 圖5.3.2 進(jìn)入設(shè)置模式 5.3.3選擇/移位操作 如圖,按下“選擇/移位”按鍵后,首先對時進(jìn)行設(shè)置 圖5.3.3 選擇/移位操作 5.3.4時位加一 如圖,按下“加”按鍵之后時鐘的時會加一。 圖5.3.4 時位加一 5.3.5分位加一 如圖,再次按下“選擇/移位”,對分位進(jìn)行設(shè)置,按下加一鍵后分位加一。 圖5.3.5 分位加一 5.3.6秒位加一 如圖,再次按下“選擇/移位”,對秒位進(jìn)行設(shè)置,按下加一鍵后秒位加一。 圖5.3.6 秒位加一 5.3.7仿真的局限性 仿真截圖無法表現(xiàn)出數(shù)碼管在動態(tài)顯示時鐘的狀態(tài)。
完整的Word格式文檔51黑下載地址:
單片機(jī)課設(shè).docx
(1.06 MB, 下載次數(shù): 30)
2019-12-9 17:37 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
數(shù)字時鐘.zip
(68.26 KB, 下載次數(shù): 48)
2019-12-9 17:37 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|