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

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

開始進(jìn)水

正在洗滌

排水脫水 1 . 3 單獨(dú)方式仿真圖
總 結(jié) 主要是以 AT89C51單片機(jī)為核心的, 對(duì)洗衣機(jī)進(jìn)行了簡(jiǎn)單的設(shè)計(jì)與闡述。 本次設(shè)計(jì)可以說是軟硬結(jié)合, 又以硬件為主, 軟件為輔。 當(dāng)今科技發(fā)展迅速,單片機(jī)嵌入式開發(fā)有著光明的前景。 由于單片機(jī)具有經(jīng)濟(jì)實(shí)用、 開發(fā)簡(jiǎn)便等特點(diǎn), 所以依然在工業(yè)控制、 家電等領(lǐng)域占據(jù)廣泛的市場(chǎng)。 所以我選擇這樣的畢業(yè)設(shè)計(jì)課題, 并且能通過此次設(shè)計(jì)來提高自己軟件編制和硬件電路設(shè)計(jì)的能力。 在我完成這次畢業(yè)設(shè)計(jì)的過程中, 當(dāng)看到自己將專業(yè)知識(shí)用于解決實(shí)際的問題時(shí), 那份成就感和喜悅感是難以形容的。 但是, 在實(shí)際的編程以及調(diào)試程序過程中, 我發(fā)現(xiàn)自己應(yīng)該學(xué)的東西太多太多。光靠自己在書本上所學(xué)過的這點(diǎn)知識(shí)是遠(yuǎn)遠(yuǎn)不夠的, 真正地認(rèn)識(shí)到了 工作就是學(xué)習(xí)的道理。 由于我以前對(duì) 52 單片機(jī)的 C 語(yǔ)言沒有認(rèn)真鉆研過, 所以感覺畢業(yè)設(shè)計(jì)的任務(wù)十分緊迫。 通過對(duì)本系統(tǒng)的設(shè)計(jì), 我學(xué)習(xí)到了硬件開發(fā)和軟件開發(fā)的基本流程并有了一定的駕御此開發(fā)過程的能力。 編程的過程中, 雖然不乏辛苦, 但更多的是程序調(diào)試成功后的喜悅。 總之, 這次畢業(yè)設(shè)計(jì)對(duì)我來說是一次比較全面的、 富有創(chuàng)造性和探索性的鍛煉, 完成了我選題時(shí)的心愿。 令我深有感觸, 對(duì)于我今后的學(xué)習(xí)、 工作和生活都將是受益非淺的!
- #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;
- /*******************暫停、繼續(xù)控制宏定義*****************/
- #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; //標(biāo)準(zhǔn)程序顯示燈
- sbit LED_JingJi = P1^1; //經(jīng)濟(jì)程序顯示燈
- sbit LED_DanDu = P1^2; //單獨(dú)程序顯示燈
- sbit LED_PaiShui = P1^3; //排水程序顯示燈
- sbit LED_XiDi = P1^6; //洗滌狀態(tài)燈
- sbit LED_PiaoXi = P1^7; //漂洗狀態(tài)燈
- sbit LED_TuoShui = P2^0; //脫水狀態(tài)燈
- sbit PIN_BaoJing = P2^1; //報(bào)警喇叭
- sbit PIN_JinShui = P2^2; //進(jìn)水控制
- sbit PIN_PaiShui = P2^3; //排水控制
- sbit PIN_Motor_A = P2^4; //電機(jī)腳A
- sbit PIN_Motor_B = P2^5; //電機(jī)腳B
- sbit K_SEL_ChengXu = P3^0; //選擇程序鍵
- sbit p32 = P3^2;
- sbit p33 = P3^3;
- sbit SW_ShuiWei = P3^6; //水位開關(guān)
- sbit SW_AnQuan = P3^7; //安全開關(guān)
- void Programme_PaiShui(void);
- /*************************數(shù)據(jù)定義***********************/
- uchar flag_SEL_ChengXu; //默認(rèn)為標(biāo)準(zhǔn)程序,
- bit flag_Run; //運(yùn)行標(biāo)志,1為運(yùn)行
- bit flag_JinShui; //進(jìn)水標(biāo)志,1為進(jìn)水
- bit flag_PaiShui; //排水標(biāo)志,1為排水
- bit flag_XiDi; //置洗滌標(biāo)志
- bit flag_PiaoXi; //置漂洗標(biāo)志
- bit flag_TuoShui; //脫水標(biāo)志
- bit flag_BaoJing; //報(bào)警標(biāo)志
- uchar _50ms; //每50ms加一次的變量
- uint s; //秒
- uint T_S; //定時(shí)總時(shí)間
- uchar T_Motor; //電機(jī)控制時(shí)間
- /*************************延時(shí)程序*********************/
- 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;
- }
- /*******************定時(shí)器0初始化程序******************/
- void Timer0_Init(void)
- { TMOD = TMOD | 0X01; //定時(shí)方式1
- TH0 = 0X3C; //50ms
- TL0 = 0XB0;
- TR0 = 1;
- _50ms = 0;
- s = 0;
- }
- /*******************定時(shí)器1初始化程序******************/
- void Timer1_Init(void)
- { TMOD = TMOD | 0X10; //定時(shí)方式1
- TH1 = 0X3C; //50ms
- TL1 = 0XB0;
- }
- /********************電機(jī)初始化程序********************/
- 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;
- }
- /********************電機(jī)初始化程序********************/
- void Motor_Init(void)
- { ZhengZhuan();
- T_Motor_Ctl(4,3,5);
- }
- /**********************解除報(bào)警************************/
- void No_BaoJing(void)
- { flag_BaoJing= 0; //置報(bào)警標(biāo)志
- PIN_BaoJing = 1; //報(bào)警喇叭
- TR1 = 0;
- }
- /*******外部中斷0程序?yàn)檫\(yùn)行、解除報(bào)警或者暫停***********/
- void int0(void) interrupt 0
- {
- if(!p32)
- { Delay_10ms(1); //延時(shí)10ms左右,去抖動(dòng)
- if(!p32)
- { if(!flag_Run)
- flag_Run = 1; //置運(yùn)行標(biāo)志
- else if(flag_BaoJing)
- No_BaoJing(); //解除報(bào)警
- else if(flag_Ok)
- { static bit flag_ZanTing;
- flag_ZanTing = ~flag_ZanTing;
- if(flag_ZanTing)
- {ZanTing();}
- else
- {JiXu();}
- }
- }
- }
- }
- /**********************報(bào)警程序************************/
- void BaoJing(void)
- { flag_BaoJing= 1; //置報(bào)警標(biāo)志
- TR0 = 0;
- TR1 = 1;
- }
- /*******************時(shí)間到處理程序*********************/
- void Ok_Timer(void)
- { s = 0;
- if(flag_JinShui || flag_PaiShui) //進(jìn)水中~、排水中~
- { BaoJing(); //報(bào)警程序
- }
- else
- { flag_XiDi = 0; //清洗滌標(biāo)志
- flag_PiaoXi = 0; //清漂洗標(biāo)志
- flag_TuoShui= 0; //清脫水標(biāo)志
- Stop();
- }
- }
- /********************電機(jī)控制程序**********************/
- 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;
- }
- }
- }
- /*******************定時(shí)器0中斷程序********************/
- void Timer0(void) interrupt 1
- {
- TR0 = 0; //停止計(jì)數(shù)
- TH0 = 0X3C; //重裝定時(shí)器值
- 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(); //電機(jī)控制程序
- }
- }
- /**********外部中斷1程序?yàn)樗坏交蛘呱w開處理***********/
- void int1(void) interrupt 2
- { if(!p33)
- { Delay_10ms(1); //延時(shí)10ms左右,去抖動(dòng)
- if(!p33)
- {
- }
- }
- }
- /************定時(shí)器1中斷程序作為閃爍及報(bào)警**************/
- void Timer1(void) interrupt 3
- { static uchar _50ms; //每50ms加一次的變量
- TR1 = 0; //停止計(jì)數(shù)
- TH1 = 0X3C; //重裝定時(shí)器值
- TL1 = 0XB0;
- TR1 = 1;
- _50ms++;
- if(_50ms == 14)
- { _50ms = 0;
- if(flag_XiDi) //洗滌中~
- LED_XiDi = ~LED_XiDi; //洗滌狀態(tài)燈閃爍
- if(flag_PiaoXi) //漂洗中~
- LED_PiaoXi = ~LED_PiaoXi; //漂洗狀態(tài)燈閃爍
- if(flag_TuoShui) //脫水中~
- LED_TuoShui = ~LED_TuoShui; //脫水狀態(tài)燈閃爍
- if(flag_BaoJing)
- PIN_BaoJing = ~PIN_BaoJing; //報(bào)警
- }
- }
- /**********************程序選擇程序********************/
- void SEL_ChengXU(void)
- { if(!K_SEL_ChengXu)
- { Delay_10ms(1); //延時(shí)10ms左右,去抖動(dòng)
- 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;
- }
- }
- }
- }
- /**********************進(jìn)水程序***********************/
- 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);//延時(shí)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);
- }
- /*********************蓋開保護(hù)程序********************/
- 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;
- }
-
- /********************標(biāo)準(zhǔn)洗衣程序*********************/
- void Programme_BiaoZhun(void)
- { LED_XiDi = 0; //洗滌狀態(tài)燈
- LED_PiaoXi = 0; //漂洗狀態(tài)燈
- LED_TuoShui = 0; //脫水狀態(tài)燈
- JinShui();
- XiDi();
- PaiShui();
- JinShui();
- PiaoXi(T_PiaoXi_1);//4min*60s//4*60
- PaiShui();
- JinShui();
- PiaoXi(T_PiaoXi_2);//2min*60s//2*60
- Programme_PaiShui();
- }
- /********************經(jīng)濟(jì)洗衣程序*********************/
- void Programme_JingJi(void)
- { TR1 = 0;
- LED_XiDi = 0; //洗滌狀態(tài)燈
- LED_PiaoXi = 0; //漂洗狀態(tài)燈
- LED_TuoShui = 0; //脫水狀態(tài)燈
- JinShui();
- XiDi();
- PaiShui();
- JinShui();
- PiaoXi(T_PiaoXi_1);//4min*60s
- Programme_PaiShui();
- }
- /********************單獨(dú)洗衣程序*********************/
- void Programme_DanDu(void)
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
完整的Word格式文檔51黑下載地址:
洗衣機(jī)控制系統(tǒng)課程設(shè)計(jì).docx
(264.49 KB, 下載次數(shù): 77)
2018-7-3 11:27 上傳
點(diǎn)擊文件名下載附件
洗衣機(jī)課程設(shè)計(jì)
|