1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3770|回復(fù): 1
收起左側(cè)

單片機(jī)洗衣機(jī)課程設(shè)計(jì)論文

[復(fù)制鏈接]
ID:363845 發(fā)表于 2018-7-3 11:28 | 顯示全部樓層 |閱讀模式

課程設(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í)、 工作和生活都將是受益非淺的!


  1. #include               <reg51.h>
  2. #define               uchar              unsigned char
  3. #define                            uint              unsigned int
  4. #define                            Enable();              EA=1;
  5. #define                            Disable();              EA=0;
  6. #define                            BIAOZHUN                            0
  7. #define                            JINGJI                                          1
  8. #define                            DANDU                                          2
  9. #define                            PAISHUI                                          3
  10. #define                            QIANGXI                                          0
  11. #define                            RUOXI                                          1            
  12. #define                            T_JinShui                            240                            //4min*60s
  13. #define                            T_PaiShui                            60                            //1min*60s
  14. #define                            T_XiDi                                          360                            //6min*60s
  15. #define                            T_PiaoXi_1                            240                            //4min*60s
  16. #define                            T_PiaoXi_2                            120                            //2min*60s
  17. #define                            T_TuoShui                            120                            //2min*60s
  18. #define                            ZHENGZHUAN                            0
  19. #define                            STOP                                          1
  20. #define                            FANZHUAN                            2
  21. #define                            ZhengZhuan();              PIN_Motor_A = 0; PIN_Motor_B = 1;
  22. #define                            Stop();                                          PIN_Motor_A = 1; PIN_Motor_B = 1;
  23. #define                            FanZhuan();                            PIN_Motor_A = 1; PIN_Motor_B = 0;
  24. /*******************暫停、繼續(xù)控制宏定義*****************/
  25. #define                            ZanTing();                            ET0 = 0; ET1 = 0; Stop();
  26. #define                            JiXu();                                          ET0 = 1; ET1 = 1;
  27. #define                            flag_Ok                                          (flag_JinShui||flag_PaiShui||flag_XiDi||flag_PiaoXi||flag_TuoShui)
  28. /*************************管腳定義***********************/
  29. sbit              LED_BiaoZhun              =              P1^0;              //標(biāo)準(zhǔn)程序顯示燈
  30. sbit              LED_JingJi                            =              P1^1;              //經(jīng)濟(jì)程序顯示燈
  31. sbit              LED_DanDu                            =              P1^2;              //單獨(dú)程序顯示燈
  32. sbit              LED_PaiShui                            =              P1^3;              //排水程序顯示燈
  33. sbit              LED_XiDi                            =              P1^6;              //洗滌狀態(tài)燈
  34. sbit              LED_PiaoXi                            =              P1^7;              //漂洗狀態(tài)燈
  35. sbit              LED_TuoShui                            =              P2^0;              //脫水狀態(tài)燈
  36. sbit              PIN_BaoJing                            =              P2^1;              //報(bào)警喇叭
  37. sbit              PIN_JinShui                            =              P2^2;              //進(jìn)水控制
  38. sbit              PIN_PaiShui                            =              P2^3;              //排水控制
  39. sbit              PIN_Motor_A                            =              P2^4;              //電機(jī)腳A
  40. sbit              PIN_Motor_B                            =              P2^5;              //電機(jī)腳B
  41. sbit              K_SEL_ChengXu              =              P3^0;              //選擇程序鍵
  42. sbit              p32                                                        =              P3^2;            
  43. sbit              p33                                                        =              P3^3;            
  44. sbit              SW_ShuiWei                            =              P3^6;              //水位開關(guān)
  45. sbit              SW_AnQuan                            =              P3^7;              //安全開關(guān)
  46. void Programme_PaiShui(void);
  47. /*************************數(shù)據(jù)定義***********************/
  48. uchar              flag_SEL_ChengXu;                                          //默認(rèn)為標(biāo)準(zhǔn)程序,                                         
  49. bit                            flag_Run;                                                                      //運(yùn)行標(biāo)志,1為運(yùn)行
  50. bit                            flag_JinShui;                                                        //進(jìn)水標(biāo)志,1為進(jìn)水
  51. bit                            flag_PaiShui;                                                        //排水標(biāo)志,1為排水
  52. bit                            flag_XiDi;                                                                      //置洗滌標(biāo)志
  53. bit                            flag_PiaoXi;                                                        //置漂洗標(biāo)志
  54. bit                            flag_TuoShui;                                                        //脫水標(biāo)志
  55. bit                            flag_BaoJing;                                                        //報(bào)警標(biāo)志
  56. uchar               _50ms;                                                                                    //每50ms加一次的變量
  57. uint              s;                                                                                                  //秒
  58. uint              T_S;                                                                                    //定時(shí)總時(shí)間
  59. uchar              T_Motor;                                                                      //電機(jī)控制時(shí)間
  60. /*************************延時(shí)程序*********************/
  61. void Delay_10ms(uint T1)            
  62. {              uint t1,t2;
  63.               for(t1=0;t1<T1;t1++)
  64.                             for(t2=0;t2<1250;t2++);//10ms
  65. }
  66. /**********************管腳初始化程序******************/
  67. void Pin_Init(void)                                                                     
  68. {              LED_BiaoZhun              =              0;                                         
  69.               LED_JingJi                            =              1;                                         
  70.               LED_DanDu                            =              1;                           
  71.               LED_PaiShui                            =              1;                                         
  72.               LED_XiDi                            =              1;                           
  73.               LED_PiaoXi                            =              1;                                         
  74.               LED_TuoShui                            =              1;                                         
  75.               PIN_BaoJing                            =              1;                                         
  76.               PIN_JinShui                            =              1;                           
  77.               PIN_PaiShui                            =              1;                                         
  78.               PIN_Motor_A                            =              1;                           
  79.               PIN_Motor_B                            =              1;                           
  80. }
  81. /********************中斷初始化程序********************/
  82. void ExInt_Init(void)                                                      
  83. {              IT0              =              1;
  84.               EX0              =              1;
  85.               IT1              =              1;
  86.               EX1              =              1;
  87. }
  88. /*******************定時(shí)器0初始化程序******************/
  89. void Timer0_Init(void)                           
  90. {              TMOD               =              TMOD | 0X01;                            //定時(shí)方式1
  91.               TH0                            =              0X3C;                                                        //50ms
  92.               TL0                            =              0XB0;            
  93.               TR0                            =               1;
  94.               _50ms               =               0;
  95.               s = 0;
  96. }
  97. /*******************定時(shí)器1初始化程序******************/
  98. void Timer1_Init(void)                                         
  99. {              TMOD               =              TMOD | 0X10;                            //定時(shí)方式1
  100.               TH1                            =              0X3C;                                                        //50ms
  101.               TL1                            =              0XB0;
  102. }
  103. /********************電機(jī)初始化程序********************/
  104. void T_Motor_Ctl(uchar t1,uchar t2,uchar t3)
  105. {              if(1)
  106.                             T_Motor = t1;
  107.               if(0)
  108.                             T_Motor = t2;
  109.               if(flag_TuoShui)            
  110.                             T_Motor = t3;
  111. }
  112. /********************電機(jī)初始化程序********************/
  113. void Motor_Init(void)
  114. {              ZhengZhuan();
  115.               T_Motor_Ctl(4,3,5);
  116. }
  117. /**********************解除報(bào)警************************/
  118. void No_BaoJing(void)
  119. {              flag_BaoJing= 0;                            //置報(bào)警標(biāo)志
  120.               PIN_BaoJing              = 1;                            //報(bào)警喇叭
  121.               TR1                             = 0;
  122. }
  123. /*******外部中斷0程序?yàn)檫\(yùn)行、解除報(bào)警或者暫停***********/
  124. void int0(void) interrupt 0                                         
  125. {            
  126.               if(!p32)
  127.               {              Delay_10ms(1);                                                        //延時(shí)10ms左右,去抖動(dòng)
  128.                             if(!p32)
  129.                             {              if(!flag_Run)
  130.                                                         flag_Run = 1;                            //置運(yùn)行標(biāo)志                           
  131.                                           else if(flag_BaoJing)
  132.                                                         No_BaoJing();                            //解除報(bào)警            
  133.                                           else if(flag_Ok)
  134.                                           {              static bit flag_ZanTing;
  135.                                                         flag_ZanTing = ~flag_ZanTing;
  136.                                                         if(flag_ZanTing)
  137.                                                                       {ZanTing();}
  138.                                                         else                                                                                                               
  139.                                                                       {JiXu();}            
  140.                                           }
  141.                             }
  142.               }
  143. }
  144. /**********************報(bào)警程序************************/
  145. void BaoJing(void)
  146. {              flag_BaoJing= 1;                            //置報(bào)警標(biāo)志
  147.               TR0                                          = 0;
  148.               TR1                             = 1;
  149. }
  150. /*******************時(shí)間到處理程序*********************/
  151. void Ok_Timer(void)
  152. {              s = 0;
  153.               if(flag_JinShui || flag_PaiShui)              //進(jìn)水中~、排水中~
  154.               {              BaoJing();                                                        //報(bào)警程序
  155.               }
  156.               else
  157.               {              flag_XiDi               = 0;                            //清洗滌標(biāo)志
  158.                             flag_PiaoXi              = 0;                            //清漂洗標(biāo)志
  159.                             flag_TuoShui= 0;                            //清脫水標(biāo)志
  160.                             Stop();
  161.               }
  162. }
  163. /********************電機(jī)控制程序**********************/
  164. void Motor(void)
  165. {              static uchar s_Motor;
  166.               s_Motor++;
  167.               if(s_Motor==T_Motor)
  168.               {              static uchar Motors;
  169.                             s_Motor = 0;
  170.                             Motors++;
  171.                             if(Motors==3)
  172.                                           Motors = 0;
  173.                             switch(Motors)
  174.                             {              case ZHENGZHUAN :               ZhengZhuan();
  175.                                                                                                                 T_Motor_Ctl(4,3,5);
  176.                                                                                                                 break;
  177.                                           case STOP                            :               Stop();
  178.                                                                                                                 T_Motor_Ctl(1,2,2);
  179.                                                                                                                 break;
  180.                                           case FANZHUAN               :               FanZhuan();
  181.                                                                                                                 T_Motor_Ctl(4,3,5);
  182.                                                                                                                 break;
  183.                                           default                                          :              break;
  184.                             }
  185.               }
  186. }
  187. /*******************定時(shí)器0中斷程序********************/
  188. void Timer0(void) interrupt 1                           
  189. {            
  190.               TR0 = 0;                                                                                    //停止計(jì)數(shù)
  191.               TH0 = 0X3C;                                                                                    //重裝定時(shí)器值
  192.               TL0 = 0XB0;
  193.               TR0 = 1;
  194.               _50ms++;            
  195.               if(_50ms == 20)                                                                      //1s到
  196.               {              _50ms = 0;
  197.                             s++;                                         
  198.                             if(s == T_S)                           
  199.                                           Ok_Timer();
  200.                                if(flag_XiDi || flag_PiaoXi || flag_TuoShui)
  201.                                           Motor();                                                        //電機(jī)控制程序            
  202.               }                           
  203. }
  204. /**********外部中斷1程序?yàn)樗坏交蛘呱w開處理***********/
  205. void int1(void) interrupt 2                                         
  206. {              if(!p33)
  207.               {              Delay_10ms(1);                                                                      //延時(shí)10ms左右,去抖動(dòng)
  208.                             if(!p33)
  209.                             {            
  210.                             }
  211.               }
  212. }
  213. /************定時(shí)器1中斷程序作為閃爍及報(bào)警**************/
  214. void Timer1(void) interrupt 3                           
  215. {              static uchar _50ms;                                                                      //每50ms加一次的變量
  216.               TR1 = 0;                                                                                                  //停止計(jì)數(shù)
  217.               TH1 = 0X3C;                                                                                                  //重裝定時(shí)器值
  218.               TL1 = 0XB0;
  219.               TR1 = 1;
  220.               _50ms++;
  221.               if(_50ms == 14)                                                      
  222.               {              _50ms = 0;
  223.                             if(flag_XiDi)                                                                      //洗滌中~
  224.                                           LED_XiDi               = ~LED_XiDi;              //洗滌狀態(tài)燈閃爍
  225.                             if(flag_PiaoXi)                                                                      //漂洗中~
  226.                                           LED_PiaoXi               = ~LED_PiaoXi;              //漂洗狀態(tài)燈閃爍
  227.                             if(flag_TuoShui)                                                        //脫水中~
  228.                                           LED_TuoShui = ~LED_TuoShui;              //脫水狀態(tài)燈閃爍
  229.                             if(flag_BaoJing)
  230.                                           PIN_BaoJing = ~PIN_BaoJing;              //報(bào)警
  231.               }
  232. }
  233. /**********************程序選擇程序********************/
  234. void SEL_ChengXU(void)                                         
  235. {              if(!K_SEL_ChengXu)                           
  236.               {              Delay_10ms(1);                                                                      //延時(shí)10ms左右,去抖動(dòng)
  237.                             if(!K_SEL_ChengXu)
  238.                             {              while(!K_SEL_ChengXu);
  239.                                           flag_SEL_ChengXu++;
  240.                                           if(flag_SEL_ChengXu==4)
  241.                                                         flag_SEL_ChengXu = 0;
  242.                                           switch(flag_SEL_ChengXu)
  243.                                           {              case BIAOZHUN              :              LED_BiaoZhun= 0;                            //亮
  244.                                                                                                                               LED_JingJi              = 1;                            //滅
  245.                                                                                                                               LED_DanDu              = 1;                            //滅
  246.                                                                                                                               LED_PaiShui              = 1;                            //滅
  247.                                                                                                                               break;
  248.                                                         case JINGJI                            :              LED_BiaoZhun= 1;
  249.                                                                                                                               LED_JingJi              = 0;            
  250.                                                                                                                               LED_DanDu              = 1;
  251.                                                                                                                               LED_PaiShui              = 1;
  252.                                                                                                                               break;
  253.                                                         case DANDU                            :              LED_BiaoZhun= 1;
  254.                                                                                                                               LED_JingJi              = 1;            
  255.                                                                                                                               LED_DanDu              = 0;
  256.                                                                                                                               LED_PaiShui              = 1;
  257.                                                                                                                               break;
  258.                                                         default                                          :              break;
  259.                                }
  260.                             }
  261.               }
  262. }
  263. /**********************進(jìn)水程序***********************/
  264. void JinShui(void)
  265. {              PIN_JinShui = 0;
  266.               flag_JinShui = 1;
  267.               TR1 = 0;
  268.               Timer0_Init();
  269.               T_S = T_JinShui;
  270.               while(SW_ShuiWei);
  271.               PIN_JinShui = 1;
  272.               flag_JinShui = 0;
  273.               TR0 = 0;
  274.               TF0 = 0;            
  275. }
  276. /**********************排水程序***********************/
  277. void PaiShui(void)
  278. {              PIN_PaiShui = 0;
  279.               flag_PaiShui = 1;
  280.               TR1 = 0;
  281.               Timer0_Init();
  282.               T_S = T_PaiShui;
  283.               while(!SW_ShuiWei);
  284.               TR0 = 0;
  285.               TF0 = 0;
  286.               Delay_10ms(500);//延時(shí)50s
  287.               PIN_PaiShui = 1;
  288.               flag_PaiShui = 0;            
  289. }
  290. /**********************洗滌程序***********************/
  291. void XiDi(void)
  292. {              flag_XiDi = 1;
  293.               TR1 = 1;
  294.               Timer0_Init();
  295.               T_S = T_XiDi;
  296.               Motor_Init();
  297.               while(flag_XiDi);
  298.               TR1 = 0;
  299.               LED_XiDi = 1;
  300. }
  301. /**********************漂洗程序***********************/
  302. void PiaoXi(uchar t)
  303. {              flag_PiaoXi = 1;
  304.               TR1 = 1;
  305.               Timer0_Init();
  306.               T_S = t;
  307.               Motor_Init();
  308.               while(flag_PiaoXi);
  309. }
  310. /*********************蓋開保護(hù)程序********************/
  311. void BaoHu_GaiKai(void)
  312. {              if(SW_AnQuan)                           
  313.               {              ZanTing();
  314.                             LED_TuoShui = 1;                           
  315.               }//end if
  316.               else
  317.               {              JiXu();                           
  318.               }
  319. }
  320. /***********************脫水程序**********************/
  321. void TuoShui(void)
  322. {              flag_TuoShui = 1;
  323.               PIN_PaiShui = 0;
  324.               TR1 = 1;
  325.               Timer1_Init();
  326.               T_S = T_TuoShui;
  327.               Motor_Init();
  328.               while(flag_TuoShui)
  329.               {               BaoHu_GaiKai();            
  330.               }
  331.               TR1 = 0;
  332.               LED_TuoShui = 1;
  333. }

  334. /********************標(biāo)準(zhǔn)洗衣程序*********************/
  335. void Programme_BiaoZhun(void)
  336. {              LED_XiDi              = 0;                                          //洗滌狀態(tài)燈
  337.               LED_PiaoXi              = 0;                                          //漂洗狀態(tài)燈
  338.               LED_TuoShui = 0;                                          //脫水狀態(tài)燈
  339.               JinShui();
  340.               XiDi();
  341.               PaiShui();            
  342.               JinShui();
  343.               PiaoXi(T_PiaoXi_1);//4min*60s//4*60
  344.               PaiShui();
  345.               JinShui();
  346.               PiaoXi(T_PiaoXi_2);//2min*60s//2*60
  347.     Programme_PaiShui();
  348. }
  349. /********************經(jīng)濟(jì)洗衣程序*********************/
  350. void Programme_JingJi(void)
  351. {              TR1 = 0;
  352.               LED_XiDi              = 0;                                          //洗滌狀態(tài)燈
  353.               LED_PiaoXi              = 0;                                          //漂洗狀態(tài)燈
  354.               LED_TuoShui = 0;                                          //脫水狀態(tài)燈
  355.               JinShui();
  356.               XiDi();
  357.               PaiShui();
  358.               JinShui();
  359.               PiaoXi(T_PiaoXi_1);//4min*60s
  360.     Programme_PaiShui();
  361. }
  362. /********************單獨(dú)洗衣程序*********************/
  363. void Programme_DanDu(void)
  364. ……………………

  365. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼




完整的Word格式文檔51黑下載地址:

洗衣機(jī)控制系統(tǒng)課程設(shè)計(jì).docx (264.49 KB, 下載次數(shù): 77)



回復(fù)

使用道具 舉報(bào)

ID:308422 發(fā)表于 2019-1-11 10:52 | 顯示全部樓層
下載了看不了,完全沒有資料的
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表