基于51單片機(jī)的家電控制系統(tǒng)設(shè)計(jì)
2 軟件設(shè)計(jì)
2.1 即時(shí)開關(guān)與狀態(tài)返回
即時(shí)開關(guān)與狀態(tài)返回都是在初始時(shí)按KEYl鍵進(jìn)入操作的,完成此功能,需要調(diào)用鍵盤讀取子程序、燈泡開關(guān)子程序、數(shù)碼管顯示子程序、延時(shí)予程序等組合。其中鍵盤讀入子程序是整個(gè)軟件的基礎(chǔ),在鍵盤沒有按鍵按下時(shí),KEYl、KEY2、KEY3始終保持高電平,此時(shí)KEY值為0X38。而當(dāng)某一個(gè)鍵被按下時(shí),則該鍵位出現(xiàn)低電平。此時(shí)的KEY值必然出現(xiàn)變化,這樣,將該值與0X38相與,然后根據(jù)得出的新值,就可以判斷哪一個(gè)鍵被按下。
軟件通常首先運(yùn)行讀取鍵盤程序,當(dāng)數(shù)碼管顯示哪一路被選中后,再次讀取鍵盤,以顯示該路電器的工作狀態(tài),并根據(jù)外部輸入決定開關(guān)操作。由于需要同時(shí)完成兩個(gè)功能,所以,在程序中。設(shè)定KEY2和KEY3對(duì)電器進(jìn)行操作,而KEY1用來(lái)在狀態(tài)返回功能完成以后,指示該功能的結(jié)束,并開始即時(shí)開關(guān)功能。具體來(lái)說(shuō),就是先檢測(cè)哪個(gè)電器對(duì)應(yīng)的按鍵被按下,然后調(diào)用顯示子程序在數(shù)碼管中顯示被選中的電器編號(hào)。狀態(tài)返回部分是檢測(cè)特定電器對(duì)應(yīng)的管腳輸出為低電平還是高電平,若輸出為低電平,則調(diào)用顯示0的數(shù)碼顯示子程序,反之則調(diào)用顯示1的數(shù)碼顯示子程序。即時(shí)開關(guān)則可在按下電器對(duì)應(yīng)的按鍵以后,將該電器(這里就是小燈泡)連接的Pl的某個(gè)端口進(jìn)行取反操作,即工作狀態(tài)反向。
2.2 時(shí)間顯示
在確定KEY2按鍵被按下以后,程序?qū)⒆詣?dòng)調(diào)用數(shù)碼顯示,并循環(huán)調(diào)用周期為1s的中斷程序,如果需要設(shè)定時(shí)間,則可通過(guò)外部輸入調(diào)用時(shí)間設(shè)定子程序來(lái)對(duì)時(shí)間進(jìn)行調(diào)整。通過(guò)外部按鍵可改變秒、分鐘、小時(shí)所對(duì)應(yīng)的變量的值,并將其帶入數(shù)碼顯示程序,在數(shù)碼管中顯示。在數(shù)碼顯示部分,應(yīng)先確定段選和位選位,由于有秒、分鐘、小時(shí)三個(gè)部分,故需要連續(xù)6個(gè)顯示管,所以,在程序中要設(shè)定從第一個(gè)開始的6次循環(huán),每次分別將選中的數(shù)碼管的序號(hào)送到位選端,并將秒、分鐘、小時(shí)所對(duì)應(yīng)的變量的值作為實(shí)參送到段選端,從而使數(shù)碼管依次顯示對(duì)應(yīng)的時(shí)間信息。
2. 3 定時(shí)開關(guān)
通過(guò)定時(shí)開關(guān)可在初始時(shí)按KEY3鍵進(jìn)入操作。該功能是整個(gè)設(shè)計(jì)的核心和難點(diǎn),綜合運(yùn)用到了之前幾種功能的設(shè)計(jì)思想。這里也有一個(gè)定時(shí)中斷子程序,但與之前以ls為基準(zhǔn)、一分鐘循環(huán)60次的固定模式不同的是,這是在事先不清楚用戶的定時(shí)時(shí)間的情況下進(jìn)行的,所以是以1分鐘為基數(shù),即定時(shí)時(shí)間間隔必須為1分鐘的整數(shù)倍,但循環(huán)次數(shù)卻是一個(gè)全局變量。這個(gè)全局變量的值可通過(guò)用戶按鍵來(lái)實(shí)現(xiàn)。根據(jù)程序設(shè)定,若按下KEYl,則表示將該全局變量的值加60,若按下KEY2,則表示將該全局變量的值加1,即KEYl代表1小時(shí),KEY2代表1分鐘。此后若再按下KEY3,則表示設(shè)定結(jié)束,此時(shí)全局變量的值表示進(jìn)行1分鐘的定時(shí)的次數(shù),在定時(shí)結(jié)束時(shí),將該電器(這里就是小燈泡)連接的P1的某個(gè)端口進(jìn)行取反操作,即可完成開關(guān)。這一功能的子程序流程圖如圖1所示。
評(píng)論