單片機在家電控制系統中的應用
111110 C0hOFF
SPEED
MODE
TIMER
SWING
COOL 1-關機 0-開機
11-低 10-中 01-高
11-正常 10-自然 01-睡眠
1111-無 1110-0.5小時…
0000-7.5小時
1-無 0-導風
1-無 0-冷風 LED的掃描端口是確定的六個值,控制端口的數據由輸入狀態變量來決定。 當系統處于開機狀態下,掃描端口是011111時,表示選中(圖2)LED矩陣的第一行,此時系統控制第一行兩個燈的亮滅。首先來看看這兩個燈各代表什么意思,第一個表示‘導風’連接到PA0端口,第二個表示‘冷風’連接到PA1端口。 從狀態字的定義來看,SWING=1,無導風,則燈滅,反之SWING=0,燈亮;由于MCU的PA0端口通過反相器連接到該燈的陽極,所以PA0=1,燈滅,PA0=0,燈亮,因此PA0的值直接等于狀態變量SWING。同理,PA1=COOL。 在其它5個不同的掃描端口賦值下,根據控制燈和狀態字的意義,可以得出如表2的結果,表中的(0)、(1)、(2)、(3)表示該狀態字的第0、1、2、3位的值。當系統處于關閉狀態時,所有指示燈是滅的,因此對于6個掃描端口值,控制端口PA1-PA0恒等于11,不驅動LED。
表2 開機狀態下控制端口、輸入狀態字和掃描序號的關系 掃描序號 PA7-PA2 PA1 PA0 5 011111 COOL(0) SWING(0) 4 101111 SPEED(0) NOT(SPEED(0) AND SPEED(1)) 3 110111 TIMER(0) SPEED(1) 2 111011 TIMER(1) NOT(MODE(0) AND MODE(1)) 1 111101 TIMER(2) MODE(0) 0 111110 TIMER(3) MODE(1) 事實上,5個控制輸出信號也是與當前的狀態變量密切相關的,它們的賦值計算方法與PA1、PA0相同。 2.2 紅外碼流檢測 紅外碼流檢測采用查詢方式。在實時中斷服務程序中,每隔2ms檢查是否有紅外按建鍵輸入,進行引導碼的查詢捕獲。一旦捕獲后,執行碼流檢測子程序,該子程序包括讀取碼字和判斷碼字兩步。讀取碼字是一個對紅外信號進行數據采樣的過程,判斷碼字是一個數據匹配的過程。 2.3 軟件設計中的幾個問題 (1)時間匹配 在主程序處理紅外碼流的檢測過程時,仍然會產生實時中斷。如上所述,紅外碼流用采樣的辦法進行數據的讀取,則采樣間隔的大小將直接影響到對紅外信號的正確接收。如果采樣間隔太大,得到的數據不夠精確,不足于分辨1/0比特;但是如果采樣間隔太小,小于中斷服務程序執行一次的時間,則采集的數據會變小,導致錯誤判斷。因此中斷服務程序應該寫得盡量簡短。 (2)紅外碼流檢測方式 紅外碼流的檢測可以采用外中斷方式或查詢方式,在本設計中采用查詢方式。因此該單片機定義了外中斷的級別比實時中斷高,一旦產生外中斷,實時中斷請求將被忽略,不執行掃描過程,因此會產生部分應該點亮的指示燈沒有點亮的現象。 數據匹配是一個把采集后的數據與預設定的數值進行比較的過程。預設定的數值可以從紅外波形理論計算得出,但是理論值與實際值總會存在一些差異,因此最好的解決辦法是預先寫一段數據采集程序并記錄下這些數據代替理論值,作為預設定的數值進行比較。 SST65P54R工作電壓為2.2~3.2V,功耗小,適用于家電控制系統。另外,本文中的軟件開發模塊易于推廣成家電控制器的通用軟件模塊。
評論