課程設計說明書
設計題目: 基于單片機AT89C51洗衣機 控制系統設計 專 業: 機械電子工程
班 級: 機電15-2班
學 號: 3120150106229 姓 名: 呂 指導老師: 余
目錄 摘要............................................................................................................................................1 第一章 緒論..............................................................................................................................1 第二章 方案設計與論證..........................................................................................................2 2.1 方案一...........................................................................................................................2 2.2 方案論證與選擇...........................................................................................................2 第三章 系統硬件設計..........................................................................................................3 3.1 總體設計及功能描述...................................................................................................3 3.2 單片機控制單元 ......................................................................................................... 3 3.3 蜂鳴器報警電路設計 ............................................................................................... 3 3.4橋式整流電路 ...............................................................................................................3 2. 3 顯示電路設計.............................................................................................................3 3.5 各功能模塊硬件設計...................................................................................................3 3.6單片機控制模塊的設計..........................................................................................3 3.7 控制電路設計..........................................................................................................4 3.8 直流電機驅動電路設計..........................................................................................5 第四章 系統軟件設計............................................................................................................6 4.1 軟件主要程序流程.........................................................................................................6 4.2 標準方式運行程序設計.................................................................................................6 4.3 經濟方式運行程序設計.................................................................................................6 4.4 單獨方式運行程序設計.................................................................................................6 4.6主程序設計.....................................................................................................................8 第五章 仿真與測試..................................................................................................................8 5.1 洗衣機仿真圖.................................................................................................................9 5.1.1 標準方式仿真圖......................................................................................................9 5.1.2 經濟方式仿真圖......................................................................................................10 5.1.3 單獨方式仿真圖......................................................................................................10 總結............................................................................................................................................12 參考文獻....................................................................................................................................12 附錄1 系統設計原理圖...........................................................................................................13 附錄2 原件明細表...................................................................................................................14 附錄3 系統源程序...................................................................................................................15
摘要 對于一臺全自動洗衣機而言,首先要求能完成洗衣的基本功能;同時還要根據用戶的不同需求設置幾種不同的洗衣程序;還要考慮水流的情況決定洗滌的強弱情況;另外還要對洗衣過程出現的故障進行診斷,保證高速運轉。 本設計是以單片機AT89C51芯片作為核心原件,與直流電機、LED顯示電路等構成洗衣機系統,利用單片機的電源電路、時鐘電路、復位電路以及直流電機控制電路、按鍵電路等組成。具有實時顯示洗衣機各種工作狀態的特點,同時利用c語言編程,實現了洗衣機的自動化。本設計的主要功能有七項:四種洗衣工作程序(標準程序、經濟程序、單獨程序、排水程序);具有強、弱洗滌功能;脫水功能。
現今,高效,節能,環保的洗衣機在市場上一直占據了主導地位。近年來隨著計算機在社會領域的滲透,單片機的應用正在不斷地走向深入,同時帶動傳統洗衣機的更新發展。單片機在日常生活中運用比較廣泛,洗衣機智能控制系統就是以單片機控制為核心的智能控制系統,它把以往洗衣機繁瑣的操作簡單化, 不但其功能顯著提高, 還增加了難以實現的功能, 同時也提高了控制精確度。 硬件與軟件相結合實現了洗衣機智能化和自動化。 隨著人們生活水平的不斷提高, 單片機智能控制無疑是人們追求的目標之一, 它給人們所帶來的方便也是不可估計的。 單片機技術也在各個領域應用越來越廣泛,同時用單片機設計的各種家用電器也被人們所關注, 一時間涌現出大量各式各樣的新型電器, 這些家用電器的原理到底是怎樣的呢? 說到底也是單片機運用的范疇, 其中洗衣機就是一個典型的例子, 但人們對它的要求越來越高, 要為現代人生活提供更好的更方便的設施就需要從單片機技術入手, 一切向著數字化, 智能化控制方向發展。 目 前的洗衣機都沒有實現全方面的兼容, 大多洗衣的廠家都注重各自品牌的洗衣機的特長, 突出一兩個與別的洗衣機不同的個性化的功能。 洗衣機的各項功能是由單片機控制實現的,目前中國洗衣機市場正進入更新換代期, 市場潛力巨大, 人們對于洗衣機的要求也越來越高, 目前的洗衣機主要有強弱洗滌、 進排水系統故障自動診斷、 暫停等七大功能, 在許多方面還不能達到人們的需求。 這就要求設計者們有更高的專業和技術水平, 能夠提出更好的建議和新的課題, 將人們的需要變成現實, 設計出更節能、 功能更全面、 更人性化的全自動洗衣機。 第 2 章 方案設計
采用單片機設計,以 AT89C51 單片機為核心元件, 由時鐘電路、 復位電路、 電源電 CPU 控制模塊 電機調速控制模塊 顯示模塊 電源模塊 復位模塊 時鐘模塊 控制模塊 秒脈沖發生器 60 進制計數器 洗滌時間計數器 控 制 門 功 放 繼 電 開 關 執 行 電 機 時間譯碼 清零 置數、 顯示電路、 按鍵電路和執行電機部分組成。 電機電路部分是利用l298驅動芯片輸入不同的信號使電機產生正轉和反轉。 顯示電路采用八個 LED 和八個電阻與單片機相連 , 利用 C 語言編程實現洗衣機自動化顯示功能。 此方案設計的洗衣機、有進排水系統故障自動診斷、 暫停等功能。
第2頁 第 3 章 系統硬件設計 硬件設計是整個系統的基礎, 要考慮的方方面面很多, 除了實現洗衣機基本功能以外, 主要還要考慮如下幾個因素: ①系統穩定度; ②器件的通用性或易選購性; ③ 軟件編程的易實現性; ④系統其它功能及性能指標; 因此硬件設計至關重要。 現從各功能模塊的實現逐個進行分析探討。 3.1 總體設計及功能描述 本設計以單片機 AT89C51為控制核心, 采用模塊化設計, 共分以下幾個功能模塊:單片機控制系統模塊、 電源模塊、 時鐘模塊、 復位模塊、 按鍵控制模塊、 直流電機控制模塊和顯示模塊等。 洗衣機主要有進排水系統故障自動診斷、 暫停等功能。 3.2 各功能模塊硬件設計 3.2. 1 單片機控制模塊的設計 AT89C51單片機是一種高效微控制器, 也是低功耗高性能單片機。 單片機是本設計的核心主要起控制作用, 采用 40 引腳雙列直插封裝形式, 32 個外部雙向輸入/輸 出(I/O)端口, 同時內含 2 個外中斷口, 2 個 16 位可編程定時計數器, 2 個全雙工串行通信口,因為受引腳數目 的限制, 所以有不少引腳具有第二功能。 外形及引腳排列如圖 3-1 所示。 AT89C51單片機的主要管腳功能: VCC: 供電電壓。 GND: 接地。 P0 口: P0 口為一個 8 位漏級開路雙向 I/O 口, 每腳可吸收 8TTL 門電流。 當 P1 口的管腳第一次寫 1 時, 被定義為高阻輸入。 P0 能夠用于外部程序數據存儲器, 它可以被定義為數據/地址的第八位。 P1 口: P1 口是一個內部提供上拉電阻的 8 位雙向 I/O 口, P1 口緩沖器能接收輸出4TTL 門電流。 P1 口管腳寫入 1 后, 被內部上拉為高, 可用作輸入, P1 口被外部下拉為低電平時, 將輸出電流, 這是由于內部上拉的緣故。 P2 口: P2 口為一個內部上拉電阻的 8 位雙向 I/O 口, P2 口緩沖器可接收, 輸出 4個 TTL 門電流, 當 P2 口被寫 1 時, 其管腳被內部上拉電阻拉高, 且作為輸入。 并因此作為輸入時, P2 口的管腳被外部拉低, 將輸出電流。 P3 口: P3 口是 8 個帶內部上拉電阻的雙向 I/O 口, 可接收輸出 4 個 TTL 門電流。當 P3 口寫入 1 后, 它們被內部上拉為高電平, 并用作輸入。 作為輸入, 由于外部下拉為低電平, P3 口將輸出電流(ILL) 這是由于上拉的緣故。 RST: 復位輸入。 當振蕩器復位器件時, 要保持 RST 腳兩個機器周期的高電平時間。 ALE/PROG: 當訪問外部存儲器時, 地址鎖存允許的輸出電平用于鎖存地址的地位字節。 在 FLASH 編程期間, 此引腳用于輸入編程脈沖。 在平時, ALE 端以不變的頻率周期輸出正脈沖信號, 此頻率為振蕩器頻率的 1/6。 因此它可用作對外部輸出的脈沖或用于定時目的。 PSEN : 外部程序存儲器的選通信號。 在由外部程序存儲器取指期間, 每個機器周期兩次 PSEN 有效。 但在訪問外部數據存儲器時, 這兩次有效的 PSEN 信號將不出現。 EA/VPP: 當 EA保持低電平時, 則在此期間外部程序存儲器(0000H-FFFFH), 不 管是否有內部程序存儲器。 注意加密方式 1 時, EA將內部鎖定為 RESET; 當 EA端保持高電平時, 此間內部程序存儲器。在 FLASH 編程期間, 此引腳也用于施加 12V 編程電源 (VPP)。 第3頁  圖 3-1 AT89C51 單片機的管腳圖 電源、 時鐘信號以及復位電路是單片機工作的基本條件, 缺一不可。 AT89C51 單片機系統的基本工作電路包括電源電路、 時鐘電路、 復位電路。 其組成方框圖如圖 3-2 所示。
圖 3-2 單片機控制系統基本硬件組成方框圖 電源電路 電源電路模塊為系統電路和其他模塊提供+5V 電源。 供電電源可由開關電源提供。 時鐘電路模塊的設計 由于 AT89C51單片機芯片內有時鐘振蕩電路, 因此本系統單片機采用內部時鐘方式,只要在單片機的 XTAL1和 XTAL2引腳外接石英晶體和微調電容, 就構成了自激振蕩器并在單片機內部產生時鐘脈沖信號, 具體電路設計如圖 3-3 所示。 工作原理: 時鐘信號通常用兩種電路形式得到: 內部振蕩和外部振蕩。 在 XTAL1 和 XTAL2 引腳上外接定時元件, 就能構成自激振蕩電路。 定時元件通常采用石英晶體和電容組成的并聯諧振電路。一般電容 C4 和 C5 主要起頻率微調作用, 電容值可選取為 30pF 左右或 40pF左右; 晶體振蕩器, 簡稱晶振, 其晶振頻率(fosc) 范圍為 1. 2MHz~12MHz, 本設計中選擇12MHz。 晶體振蕩頻率越高, 系統的時鐘頻率也越高, 單片機的運行速率就越快。 
圖 3-3 時鐘振蕩電路 復位電路模塊設計 復位電路使單片機或系統中的其他部件處于某種確定的狀態。 當在 MCS-51 系列單片的 RST 引腳處引入高電平并保持 2 個機器周期, 單片機內部就執行復位操作。 復位操作有兩種基本形式: 一種是上電復位, 另一位是按鍵復位。 本設計采用按鍵復位方式。 如圖 3-4 工作原理: 當按下按鍵時, RST 直接與 VCC 相連, 出現 2 個以上的高電平形成復位, 同時電解電容被短路放電; 按鍵松開時, 電容充電, 電流流過電阻, RST 為高電平, 仍然是復位,充電完成后, 電容相當于開路, RST 為低電平, 正常工作。 
圖 3-4 復位電路 - 2 控制電路設計 單片機設計中, 重要的一個模塊是按鍵的設計。 常見的單片機按鍵設計分為獨立式和行列式(矩陣式)。 獨立式按鍵設計簡單, 但占用 I/O 口較多; 行列式按鍵設計相對復雜, 占用 I/O 口較少。 如圖 3-5 所示。

如圖 3-5 圖 3-5 控制電路 為方便使用, 設計了 三個獨立式按鍵, 分別為程序選擇鍵、水位/蓋開關 、運行/暫停 。 1. 程序選擇鍵: 用于選擇洗衣方式, 由于本設計具有 3種洗衣工作程序, 即標準程序、 經濟程序、 單獨程序 所以設計程序選擇按鍵。 運行/暫停選擇鍵: 由于本設計要求不管洗衣機工作在什么狀態, 當按下暫停鍵時, 洗衣機需暫停工作, 待啟動鍵按下后洗衣機又能按原來所選擇的工作方式繼續工作,所以設計該按鍵。 水位/蓋開關:用于檢測進水和排水對水位的檢測,以及當洗滌和脫水過程中如果打開了洗衣機蓋進行報警。 3.3蜂鳴器報警電路設計 本設計中,當某個洗衣方案完全結束,會有蜂鳴器 5S 鐘的報警時間。 蜂鳴器電路設計如圖 3-3所示。 由單片機直接輸出的信號不足以驅動蜂鳴器的工作。因此,在單片機與蜂鳴器之間加一個 PNP 三極管作為驅動。三極管的基極通過一個 4.7K 歐的電阻與單片機相應的 I/O 相連,電源和蜂鳴器與發射極極相連,集電極接地。這樣就完成了蜂鳴器的驅動電路。 
圖 3-3 蜂鳴器驅動電路 3.4 橋式整流電路 電路如圖 4-6 所示 橋式整流電路是使用最多的一種整流電路。半波整流電路是一種最簡單的整流電路。它由電源變壓器 B 、整流二極管 D 和負載電阻 Rfz 組成。變壓器把市電電壓(多為 220 伏)變換為所需要的交變電壓 E2,D 再把交流電變換為脈動直流電。這種電路,只要兩只二極管口連接成“橋”式結構,便具有全波整流電路的優點,而同時在一定程度上克服了它的缺點。 圖 4-6 橋式整流電路 橋式整流電路的工作原理如下:E2 為正半周時,對 D1、D3 和方向電壓,Dl,D3 導通; 對 D2、D4 加反向電壓,D2、D4 截止。電路中構成 e2、Dl、Rfz 、D3 通電回路,在 Rfz ,上形成上正下負的半波整洗電壓,E2 為負半周時,對 D2、D4 加正向電壓,D2、D4 導通;對D1、D3 加反向電壓,D1、D3 截止。電路中構成 E2、D2、Rfz 、D4 通電回路,同樣在 Rfz 上形成上正下負的另外半波的整流電壓。如此重復下去,結果在 Rfz ,上便得到全波整流電壓。其波形圖和全波整流波形圖是一樣的。從圖 3-6 中還不難看出,橋式電路中每只二極管承受的反向電壓等于變壓器次級電壓的最大值,比全波整洗電路小一半。這樣就可將交流電整流成直流電。 圖 4-6 橋式整流電路 2. 3 顯示電路設計 在單片機應用系統中, 對于系統的運行狀態和運行結果, 通常都需要直觀顯示出來。本設計采用的是8個共陽極發光二極管顯示, 顯示電路如圖 3-6 所示。 顯示電路油八個LED 和八個電阻構成。 八個電阻都分別為 100 歐姆, 在電路中, 電阻起限流保護作用, 防止 LED 被燒壞。 八個 LED 是共陽級, 當輸入低電平時 LED 點亮, 當輸入高電平時 LED 熄滅。
圖 3-6 顯示電路
2. 4 直流電機驅動電路設計 圖 3-7 直流整機電路 
圖 3-7 所示為一個典型的直流電機控制電路。 直流電機的控制通過l298電機驅動芯片,它能同時控制兩個電機。當IN1和IN2同時輸入高電平或者低電平是電機停止不轉,當IN1輸入高電平IN2輸入低電平時電機正轉,IN1輸入低電平IN2輸入高電平時電機反轉;同時ENA和ENB分別是使能端,能對電機1和電機進行PWM速度控制。
第 4 章 系統軟件設計 軟件在硬件平臺上構筑, 完成各部分硬件的控制和協調。 系統功能是由軟硬件共同實現的, 由于軟件的可伸縮性, 最終實現的系統功能可強可弱, 差別可能很大。 軟件采用模塊化設計方法, 不僅易于編程和調試, 也可減小軟件故障率和提高軟件的可靠性。同時, 對軟件進行全面測試也是檢驗錯誤排除故障的重要手段。 由于編程多涉及到數值運算, 比較復雜, 還有 LCD 燈的顯示設計都是需要多重選擇判斷, 用我們平時常用的匯編語言編程是很難實現的, 這里我們選用了 移值性好、 結構清晰、 能進行復雜運算的 C語言來實現編程。 1 軟件主要程序流程
圖 4-1 主要程序流程圖 整個系統的功能是由硬件電路配合軟件來實現的, 當硬件基本定型的時候軟件也基本定下了, 從軟件的功能不同, 可以分為兩的類: 一是監控軟件(主程序) 它是整個軟件的核心, 專門用來協調各個執行模塊和操作者的聯系。 二是執行軟件(子程序) 它是用來完成各種實質性的工作的, 如測量、 計算、 顯示、 通訊等。 每一個執行軟件就是一個小的執行模塊, 這里將每一個模塊一一列出來, 并為每個執行模塊進行功能定義和接口定義。 各執行模塊規劃好以后, 就可以規劃監控軟件了。 首先要根據系統的總體功能選擇一種最合適的監控程序結構, 然后根據實時性的條件, 合理安排監控軟件和執行軟件之間的調度關系。 2 標準方式運行程序設計 標準方式函數 經濟方式函數 單獨方式函數 進水方式函數 排水方式函數 主程序函數 標準方式運行程序是我們最常用的洗衣程序, 標準程序流程 進水——洗滌——排水——進水——漂洗1——排水——進水——漂洗2——排水脫水。 3 經濟方式運行程序設計 圖 4-3 經濟方式運行流程圖 經濟方式運行程序是我們現代洗衣機的一個特點, 經濟程序流程為 進水——洗滌——排水——進水——漂洗1——排水脫水。 4 單獨方式運行程序設計 由于洗衣機對不同的情況有不同的需要, 設計了單獨運行程序。 單獨程序是進水—洗滌—排水脫水 水滿了以后直接進行洗滌。
第 5 章 仿真與調試 1 洗衣機仿真圖 1 . 1 標準方式仿真圖 
開始進水 
正在洗滌 
正在漂洗 
排水和脫水 圖 5-1 標準方式仿真圖
1 . 2 經濟方式仿真圖 
開始進水 
正在洗滌 
正在漂洗 
開始排水脫水 1 . 2 經濟方式仿真圖 1 . 3 單獨方式仿真圖

開始進水

正在洗滌

排水脫水 1 . 3 單獨方式仿真圖
總 結 主要是以 AT89C51單片機為核心的, 對洗衣機進行了簡單的設計與闡述。 本次設計可以說是軟硬結合, 又以硬件為主, 軟件為輔。 當今科技發展迅速,單片機嵌入式開發有著光明的前景。 由于單片機具有經濟實用、 開發簡便等特點, 所以依然在工業控制、 家電等領域占據廣泛的市場。 所以我選擇這樣的畢業設計課題, 并且能通過此次設計來提高自己軟件編制和硬件電路設計的能力。 在我完成這次畢業設計的過程中, 當看到自己將專業知識用于解決實際的問題時, 那份成就感和喜悅感是難以形容的。 但是, 在實際的編程以及調試程序過程中, 我發現自己應該學的東西太多太多。光靠自己在書本上所學過的這點知識是遠遠不夠的, 真正地認識到了 工作就是學習的道理。 由于我以前對 52 單片機的 C 語言沒有認真鉆研過, 所以感覺畢業設計的任務十分緊迫。 通過對本系統的設計, 我學習到了硬件開發和軟件開發的基本流程并有了一定的駕御此開發過程的能力。 編程的過程中, 雖然不乏辛苦, 但更多的是程序調試成功后的喜悅。 總之, 這次畢業設計對我來說是一次比較全面的、 富有創造性和探索性的鍛煉, 完成了我選題時的心愿。 令我深有感觸, 對于我今后的學習、 工作和生活都將是受益非淺的!
- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define Enable(); EA=1;
- #define Disable(); EA=0;
- #define BIAOZHUN 0
- #define JINGJI 1
- #define DANDU 2
- #define PAISHUI 3
- #define QIANGXI 0
- #define RUOXI 1
- #define T_JinShui 240 //4min*60s
- #define T_PaiShui 60 //1min*60s
- #define T_XiDi 360 //6min*60s
- #define T_PiaoXi_1 240 //4min*60s
- #define T_PiaoXi_2 120 //2min*60s
- #define T_TuoShui 120 //2min*60s
- #define ZHENGZHUAN 0
- #define STOP 1
- #define FANZHUAN 2
- #define ZhengZhuan(); PIN_Motor_A = 0; PIN_Motor_B = 1;
- #define Stop(); PIN_Motor_A = 1; PIN_Motor_B = 1;
- #define FanZhuan(); PIN_Motor_A = 1; PIN_Motor_B = 0;
- /*******************暫停、繼續控制宏定義*****************/
- #define ZanTing(); ET0 = 0; ET1 = 0; Stop();
- #define JiXu(); ET0 = 1; ET1 = 1;
- #define flag_Ok (flag_JinShui||flag_PaiShui||flag_XiDi||flag_PiaoXi||flag_TuoShui)
- /*************************管腳定義***********************/
- sbit LED_BiaoZhun = P1^0; //標準程序顯示燈
- sbit LED_JingJi = P1^1; //經濟程序顯示燈
- sbit LED_DanDu = P1^2; //單獨程序顯示燈
- sbit LED_PaiShui = P1^3; //排水程序顯示燈
- sbit LED_XiDi = P1^6; //洗滌狀態燈
- sbit LED_PiaoXi = P1^7; //漂洗狀態燈
- sbit LED_TuoShui = P2^0; //脫水狀態燈
- sbit PIN_BaoJing = P2^1; //報警喇叭
- sbit PIN_JinShui = P2^2; //進水控制
- sbit PIN_PaiShui = P2^3; //排水控制
- sbit PIN_Motor_A = P2^4; //電機腳A
- sbit PIN_Motor_B = P2^5; //電機腳B
- sbit K_SEL_ChengXu = P3^0; //選擇程序鍵
- sbit p32 = P3^2;
- sbit p33 = P3^3;
- sbit SW_ShuiWei = P3^6; //水位開關
- sbit SW_AnQuan = P3^7; //安全開關
- void Programme_PaiShui(void);
- /*************************數據定義***********************/
- uchar flag_SEL_ChengXu; //默認為標準程序,
- bit flag_Run; //運行標志,1為運行
- bit flag_JinShui; //進水標志,1為進水
- bit flag_PaiShui; //排水標志,1為排水
- bit flag_XiDi; //置洗滌標志
- bit flag_PiaoXi; //置漂洗標志
- bit flag_TuoShui; //脫水標志
- bit flag_BaoJing; //報警標志
- uchar _50ms; //每50ms加一次的變量
- uint s; //秒
- uint T_S; //定時總時間
- uchar T_Motor; //電機控制時間
- /*************************延時程序*********************/
- void Delay_10ms(uint T1)
- { uint t1,t2;
- for(t1=0;t1<T1;t1++)
- for(t2=0;t2<1250;t2++);//10ms
- }
- /**********************管腳初始化程序******************/
- void Pin_Init(void)
- { LED_BiaoZhun = 0;
- LED_JingJi = 1;
- LED_DanDu = 1;
- LED_PaiShui = 1;
- LED_XiDi = 1;
- LED_PiaoXi = 1;
- LED_TuoShui = 1;
- PIN_BaoJing = 1;
- PIN_JinShui = 1;
- PIN_PaiShui = 1;
- PIN_Motor_A = 1;
- PIN_Motor_B = 1;
- }
- /********************中斷初始化程序********************/
- void ExInt_Init(void)
- { IT0 = 1;
- EX0 = 1;
- IT1 = 1;
- EX1 = 1;
- }
- /*******************定時器0初始化程序******************/
- void Timer0_Init(void)
- { TMOD = TMOD | 0X01; //定時方式1
- TH0 = 0X3C; //50ms
- TL0 = 0XB0;
- TR0 = 1;
- _50ms = 0;
- s = 0;
- }
- /*******************定時器1初始化程序******************/
- void Timer1_Init(void)
- { TMOD = TMOD | 0X10; //定時方式1
- TH1 = 0X3C; //50ms
- TL1 = 0XB0;
- }
- /********************電機初始化程序********************/
- void T_Motor_Ctl(uchar t1,uchar t2,uchar t3)
- { if(1)
- T_Motor = t1;
- if(0)
- T_Motor = t2;
- if(flag_TuoShui)
- T_Motor = t3;
- }
- /********************電機初始化程序********************/
- void Motor_Init(void)
- { ZhengZhuan();
- T_Motor_Ctl(4,3,5);
- }
- /**********************解除報警************************/
- void No_BaoJing(void)
- { flag_BaoJing= 0; //置報警標志
- PIN_BaoJing = 1; //報警喇叭
- TR1 = 0;
- }
- /*******外部中斷0程序為運行、解除報警或者暫停***********/
- void int0(void) interrupt 0
- {
- if(!p32)
- { Delay_10ms(1); //延時10ms左右,去抖動
- if(!p32)
- { if(!flag_Run)
- flag_Run = 1; //置運行標志
- else if(flag_BaoJing)
- No_BaoJing(); //解除報警
- else if(flag_Ok)
- { static bit flag_ZanTing;
- flag_ZanTing = ~flag_ZanTing;
- if(flag_ZanTing)
- {ZanTing();}
- else
- {JiXu();}
- }
- }
- }
- }
- /**********************報警程序************************/
- void BaoJing(void)
- { flag_BaoJing= 1; //置報警標志
- TR0 = 0;
- TR1 = 1;
- }
- /*******************時間到處理程序*********************/
- void Ok_Timer(void)
- { s = 0;
- if(flag_JinShui || flag_PaiShui) //進水中~、排水中~
- { BaoJing(); //報警程序
- }
- else
- { flag_XiDi = 0; //清洗滌標志
- flag_PiaoXi = 0; //清漂洗標志
- flag_TuoShui= 0; //清脫水標志
- Stop();
- }
- }
- /********************電機控制程序**********************/
- void Motor(void)
- { static uchar s_Motor;
- s_Motor++;
- if(s_Motor==T_Motor)
- { static uchar Motors;
- s_Motor = 0;
- Motors++;
- if(Motors==3)
- Motors = 0;
- switch(Motors)
- { case ZHENGZHUAN : ZhengZhuan();
- T_Motor_Ctl(4,3,5);
- break;
- case STOP : Stop();
- T_Motor_Ctl(1,2,2);
- break;
- case FANZHUAN : FanZhuan();
- T_Motor_Ctl(4,3,5);
- break;
- default : break;
- }
- }
- }
- /*******************定時器0中斷程序********************/
- void Timer0(void) interrupt 1
- {
- TR0 = 0; //停止計數
- TH0 = 0X3C; //重裝定時器值
- TL0 = 0XB0;
- TR0 = 1;
- _50ms++;
- if(_50ms == 20) //1s到
- { _50ms = 0;
- s++;
- if(s == T_S)
- Ok_Timer();
- if(flag_XiDi || flag_PiaoXi || flag_TuoShui)
- Motor(); //電機控制程序
- }
- }
- /**********外部中斷1程序為水位到或者蓋開處理***********/
- void int1(void) interrupt 2
- { if(!p33)
- { Delay_10ms(1); //延時10ms左右,去抖動
- if(!p33)
- {
- }
- }
- }
- /************定時器1中斷程序作為閃爍及報警**************/
- void Timer1(void) interrupt 3
- { static uchar _50ms; //每50ms加一次的變量
- TR1 = 0; //停止計數
- TH1 = 0X3C; //重裝定時器值
- TL1 = 0XB0;
- TR1 = 1;
- _50ms++;
- if(_50ms == 14)
- { _50ms = 0;
- if(flag_XiDi) //洗滌中~
- LED_XiDi = ~LED_XiDi; //洗滌狀態燈閃爍
- if(flag_PiaoXi) //漂洗中~
- LED_PiaoXi = ~LED_PiaoXi; //漂洗狀態燈閃爍
- if(flag_TuoShui) //脫水中~
- LED_TuoShui = ~LED_TuoShui; //脫水狀態燈閃爍
- if(flag_BaoJing)
- PIN_BaoJing = ~PIN_BaoJing; //報警
- }
- }
- /**********************程序選擇程序********************/
- void SEL_ChengXU(void)
- { if(!K_SEL_ChengXu)
- { Delay_10ms(1); //延時10ms左右,去抖動
- if(!K_SEL_ChengXu)
- { while(!K_SEL_ChengXu);
- flag_SEL_ChengXu++;
- if(flag_SEL_ChengXu==4)
- flag_SEL_ChengXu = 0;
- switch(flag_SEL_ChengXu)
- { case BIAOZHUN : LED_BiaoZhun= 0; //亮
- LED_JingJi = 1; //滅
- LED_DanDu = 1; //滅
- LED_PaiShui = 1; //滅
- break;
- case JINGJI : LED_BiaoZhun= 1;
- LED_JingJi = 0;
- LED_DanDu = 1;
- LED_PaiShui = 1;
- break;
- case DANDU : LED_BiaoZhun= 1;
- LED_JingJi = 1;
- LED_DanDu = 0;
- LED_PaiShui = 1;
- break;
- default : break;
- }
- }
- }
- }
- /**********************進水程序***********************/
- void JinShui(void)
- { PIN_JinShui = 0;
- flag_JinShui = 1;
- TR1 = 0;
- Timer0_Init();
- T_S = T_JinShui;
- while(SW_ShuiWei);
- PIN_JinShui = 1;
- flag_JinShui = 0;
- TR0 = 0;
- TF0 = 0;
- }
- /**********************排水程序***********************/
- void PaiShui(void)
- { PIN_PaiShui = 0;
- flag_PaiShui = 1;
- TR1 = 0;
- Timer0_Init();
- T_S = T_PaiShui;
- while(!SW_ShuiWei);
- TR0 = 0;
- TF0 = 0;
- Delay_10ms(500);//延時50s
- PIN_PaiShui = 1;
- flag_PaiShui = 0;
- }
- /**********************洗滌程序***********************/
- void XiDi(void)
- { flag_XiDi = 1;
- TR1 = 1;
- Timer0_Init();
- T_S = T_XiDi;
- Motor_Init();
- while(flag_XiDi);
- TR1 = 0;
- LED_XiDi = 1;
- }
- /**********************漂洗程序***********************/
- void PiaoXi(uchar t)
- { flag_PiaoXi = 1;
- TR1 = 1;
- Timer0_Init();
- T_S = t;
- Motor_Init();
- while(flag_PiaoXi);
- }
- /*********************蓋開保護程序********************/
- void BaoHu_GaiKai(void)
- { if(SW_AnQuan)
- { ZanTing();
- LED_TuoShui = 1;
- }//end if
- else
- { JiXu();
- }
- }
- /***********************脫水程序**********************/
- void TuoShui(void)
- { flag_TuoShui = 1;
- PIN_PaiShui = 0;
- TR1 = 1;
- Timer1_Init();
- T_S = T_TuoShui;
- Motor_Init();
- while(flag_TuoShui)
- { BaoHu_GaiKai();
- }
- TR1 = 0;
- LED_TuoShui = 1;
- }
-
- /********************標準洗衣程序*********************/
- void Programme_BiaoZhun(void)
- { LED_XiDi = 0; //洗滌狀態燈
- LED_PiaoXi = 0; //漂洗狀態燈
- LED_TuoShui = 0; //脫水狀態燈
- JinShui();
- XiDi();
- PaiShui();
- JinShui();
- PiaoXi(T_PiaoXi_1);//4min*60s//4*60
- PaiShui();
- JinShui();
- PiaoXi(T_PiaoXi_2);//2min*60s//2*60
- Programme_PaiShui();
- }
- /********************經濟洗衣程序*********************/
- void Programme_JingJi(void)
- { TR1 = 0;
- LED_XiDi = 0; //洗滌狀態燈
- LED_PiaoXi = 0; //漂洗狀態燈
- LED_TuoShui = 0; //脫水狀態燈
- JinShui();
- XiDi();
- PaiShui();
- JinShui();
- PiaoXi(T_PiaoXi_1);//4min*60s
- Programme_PaiShui();
- }
- /********************單獨洗衣程序*********************/
- void Programme_DanDu(void)
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
完整的Word格式文檔51黑下載地址:
洗衣機控制系統課程設計.docx
(264.49 KB, 下載次數: 77)
2018-7-3 11:27 上傳
點擊文件名下載附件
洗衣機課程設計 下載積分: 黑幣 -5
|