逢逢 甲甲甲 學學學 自動控制¦程學系 專專 題題題 論論 ... · 2011. 6. 7. ·...

49
逢 甲 學 自動控制程學系 自動控制程學系 自動控制程學系 自動控制程學系 專 題 論 文 自動花卉培養器 自動花卉培養器 自動花卉培養器 自動花卉培養器 Automatic Plant Culture Automatic Plant Culture Automatic Plant Culture Automatic Plant Culture Appliances Appliances Appliances Appliances 指導教授 指導教授 指導教授 指導教授:林育德 林育德 林育德 林育德 專題學生 專題學生 專題學生 專題學生:胡家愷 胡家愷 胡家愷 胡家愷 林永賢 林永賢 林永賢 林永賢

Upload: others

Post on 04-Feb-2021

6 views

Category:

Documents


0 download

TRANSCRIPT

  • 逢逢逢逢 甲甲甲甲 大大大大 學學學學

    自動控制工程學系自動控制工程學系自動控制工程學系自動控制工程學系

    專專專專 題題題題 論論論論 文文文文

    自動化花卉培養器自動化花卉培養器自動化花卉培養器自動化花卉培養器

    Automatic Plant Culture Automatic Plant Culture Automatic Plant Culture Automatic Plant Culture AppliancesAppliancesAppliancesAppliances

    指導教授指導教授指導教授指導教授::::林育德林育德林育德林育德

    專題學生專題學生專題學生專題學生::::胡家愷胡家愷胡家愷胡家愷

    林永賢林永賢林永賢林永賢

  • I

    中文中文中文中文摘要摘要摘要摘要

    本專題是由溫度、溼度感測、設定、ADC0838 A/D轉換器、造霧器、加

    熱器、風扇…等電路,組成一個可設定溫度、溼度的恆溫、恆溼糸統。量

    測壓克力箱內溫、溼度的數值大小來判斷壓克力箱內目前的狀態是否適合

    花卉,我們在本專題設定壓克力箱在以下狀態時,為不適合狀態:

    1. 低溫度時。

    2. 高溫度時。

    3. 低溼度時。

    4. 高溼度時。

    我們將A/D轉換器的訊號讀入8051,利用程式加以運算,以及判斷,

    並顯示給使用者、控制繼電器,以達到溫、溼度理想化。

  • II

    AbstractAbstractAbstractAbstract

    The aim of this project is to establish a temperature

    adjustable Temperature-humidity system that composed of the circuits of

    temperature-humidity sensor,ADC0838 A/D converter,fog generator,heater,

    fans etc.By measuring the temperature of the acrylic chamber allows us

    to determine whether the condition of chamber is suitable for flowers.

    In our study,we found that the condition is not suitable for flowers when

    setting at.

    1. Low temperature

    2. High temperature

    3. Low humidity

    4. High humidity

    We read from A/D converter and input it to 8051,process with

    programs and display the result to user and relay to idealize temperature

    and moisture.

  • III

    目錄目錄目錄目錄

    中文摘要-------------------------------------------------I

    Abstract-------------------------------------------------II

    目錄-----------------------------------------------------III

    圖目錄---------------------------------------------------IV

    表目錄---------------------------------------------------V

    一. 序論

    1.1 前言---------------------------------------------1

    1.2 研究動機與目的-----------------------------------1

    1.3 文獻回顧與探討-----------------------------------1

    二. 研究背景

    2.1 類比/數位轉換器ADC0838---------------------------2

    2.2 LCD顯示------------------------------------------6

    2.3 單晶片8051介紹-----------------------------------13

    三. 作品內容

    3.1 系統方塊圖---------------------------------------15

    3.2 程式流程圖---------------------------------------16

    3.3 電路圖-------------------------------------------17

    3.4 程式部分-----------------------------------------20

    3.5 電路實作部份-------------------------------------33

    3.6 操作過程-----------------------------------------38

    四. 結果與討論

    4.1 測試結果-----------------------------------------42

    4.2 結論討論-----------------------------------------42

    五. 參考文獻---------------------------------------------42

  • IV

    圖目錄圖目錄圖目錄圖目錄

    圖 2-1 ADC0838接腳圖------------------------------------2

    圖 2-2 ADC0838電路圖------------------------------------3

    圖 2-3 溫溼度與電壓關係圖-------------------------------4

    圖 2-4 熱敏電阻NTC特性圖--------------------------------5

    圖 2-5 熱敏電阻典型用法---------------------------------5

    圖 2-6 LCD模組結構--------------------------------------6

    圖 2-7 LCD接腳圖----------------------------------------7

    圖 2-8 8051接腳圖---------------------------------------14

    圖 2-9 系統方塊圖---------------------------------------15

    圖 2-10 程式流程圖---------------------------------------16

  • V

    表目錄表目錄表目錄表目錄

    表 3-1 LCD接腳作用---------------------------------------7

    表 3-2 8051各接腳用途-----------------------------------13

  • 1

    第一章第一章第一章第一章 前言前言前言前言

    1.1 1.1 1.1 1.1 前言前言前言前言

    本專題是對於壓克力箱設備來偵測,由溫濕度感測器偵測其壓克力箱的狀態,再經

    由A/D 轉換電路將其訊號傳入8051,顯示在LCD上,使其量測壓克力箱的溫濕度數值大

    小能判斷壓克力箱目前狀態是理想,進而對其做加熱及散熱的動作,並配合定時造霧糸

    統,節省人力資源。

    1.2 1.2 1.2 1.2 研究動機研究動機研究動機研究動機與目的與目的與目的與目的

    由於造霧設備在溫室培育上是普遍運用的工具,不論在種植業、或養殖業,都有廣

    泛的運用。再加上本國多變的氣候,本專題由於具有自動化之功能,對於種植業者無異

    是一套很好的設備,一旦氣候驟降或連日大雨…等危種植量時,其所損失的財產更是龐

    大,因此學生開始進行有關溫室的溫度、溫濕度控制之研究,欲設計出一套有關恆溫及

    自動造霧的設備裝置和控制系統。

    目的在於提供花卉完善的生長環境、品質,並且達到節省人力資源,提高人工產值。

    在特定的溫、溼度環境下,栽培出良好的物種,達到自動化花卉培養的目標。

    1.3 1.3 1.3 1.3 文獻回顧與探討文獻回顧與探討文獻回顧與探討文獻回顧與探討

    溫室內環境包括光、溫度、濕度、氣壓及風速等之氣候環境及噪音、空氣組成、

    土壤、生物、放射能等非氣候環境。而以良好的設計與管理作出適宜作物生長之溫度環

    境,乃為設施園藝之第一步。良好的設計則要有模式可為依據。本研究之目的即在建立

    溫室內溫濕度模式,利用穩定狀態下熱傳遞與質量傳遞的理論,參考作物生理對溫度之

    蒸發蒸散反應,用數理方法建立溫室內溫濕度管理之依據,來模擬溫室內溫、濕度之變

    化情形:本模式之特色是摒除利用外加感應器應答資料輸入之方式,完全以氣象局之氣

    象報告,配合數理模式來模擬出溫室內之溫濕度環境,雖然利用感應器精度較好,但正

    確的數理模式才是可長期信賴的,且本模式重點在預測,可在極短時間內模擬出一天中

    溫濕度之變化情形,並提供溫室內土壤溫度變化資料,且轉換成所需之能量輸出,以便

    作為溫室管理及附屬設備操作設計之準繩。節省感應器之經費、操作之簡便是推廣的利

    器,可為將來溫室自動化奠定良好數理基礎。本研究之模式除用以模擬預測未來溫室內

    溫度與濕度,提供溫室之管理預防應變措施外,並可為改善現有溫室,加熱及冷卻之依

    據,對於溫室更改植物種類時可給予評估,溫室之新建可給予興建參考,為方便實際應

  • 2

    第二章第二章第二章第二章 研究背景研究背景研究背景研究背景

    2.1 2.1 2.1 2.1 類比類比類比類比////數位轉換器數位轉換器數位轉換器數位轉換器 ADC08ADC08ADC08ADC0838383838的認識的認識的認識的認識

    雖然微電腦可以將各種數位資料做快速而精確的處理,但是人類在日常生活中所遇

    到的各種物理量(例如溫濕度、亮度、重量)都是類比的,因此欲令微電腦處理類比信號,

    必須先將類比信號轉換成數位信號才送進微電腦。

    類比/數位轉換器(analog to digital converter)簡稱為 A/D轉換器 (A/D

    converter)。A/D轉換器的功能是將輸入之類比信號轉換成數位信號輸出。ADC0838的規

    格如下:

    Features

    ·NSC MICROWIRE compatible—direct interface to COPS family processors

    ·Easy interface to all microprocessors, or operates “stand-alone”

    ·Operates ratiometrically or with 5 VDC voltage reference

    ·No zero or full-scale adjust required

    ·2-, 4- or 8-channel multiplexer options with address logic

    ·Shunt regulator allows operation with high voltage supplies

    ·0V to 5V input range with single 5V power supply

    ·Remote operation with serial digital data link

    ·TTL/MOS input/output compatible

    ·0.3" standard width, 8-, 14- or 20-pin DIP package

    ·20 Pin Molded Chip Carrier Package (ADC0838 only)

    ·Surface-Mount Package

    圖圖圖圖 2-1 ADC0838 ADC0838 ADC0838 ADC0838 接腳圖接腳圖接腳圖接腳圖

  • 3

    U4

    ADC0838

    16

    15

    14

    18

    17

    13

    19

    12

    1

    2

    3

    4

    5

    6

    7

    8

    9

    20

    10 11

    CLK

    SARS

    DOUT

    CS

    DIN

    SE

    V+

    VREF

    CH0

    CH1

    CH2

    CH3

    CH4

    CH5

    CH6

    CH7

    COM

    VCC

    DGND AGND

    J3

    溫溫SENSOR

    1

    2

    CH1

    CH2

    +5V

    P2.0

    P2.3

    J2

    濕溫SENSOR

    1

    2

    CH1

    CH2

    R1

    1K

    +5V

    P2.1

    P2.2

    圖2-2 ADC0838電路圖

    例如我們要選用通道3就要在時序圖的DATA IN時序給出11101,依序為START BIT、

    SGL/DIF、ODD/SIGN、SELECT,此訊號需搭配時序圖中的CLOCK使用,在CLOCK為HIGH時,

    ADC0838才會把資料讀進去,見以下8051程式片斷中” CLK 上升邊緣,資料可寫入”的

    地方。

    ; =====================

    ; ==A/D轉換副程式(溫)==

    ; =====================

    ; 起動ADC0838

    ATOD:

    MOV R1,#5 ;選ADC0838類比通道,串列輸入

    MOV R2,CHANL ;ADC通道參數,通道0(03H)

    SETB ADC_CS ;ADC控制初值

    CLR ADC_DI ;ADC控制初值

    CLR ADC_CLK ;ADC控制初值

    CLR ADC_CS ;ADC控制初值

    SET_MUX_CODE:

    MOV A,R2

    ADC083X_LOOP1:

    RRC A ;串列輸入ADC

    MOV ADC_DI,C

    SETB ADC_CLK ; CLK 上升邊緣,資料可寫入

    NOP

    CLR ADC_CLK ;CLK 回復為 Low

    DJNZ R1,ADC083X_LOOP1 ;共5次選通道

  • 4

    SAMPLE_DATA:

    MOV R2,#8 ;ADC轉換值共8 BIT

    ADC083X_LOOP2:

    SETB ADC_CLK ;CLK 上升邊緣,資料可讀出

    NOP

    CLR ADC_CLK ;CLK 下降邊緣

    MOV C,ADC_DO ;資料讀出

    RLC A ;轉入A

    DJNZ R2,ADC083X_LOOP2 ;共8次

    MOV A2D,A ;存入ADC類比轉數位值

    RET

    A/DA/DA/DA/D資料處理資料處理資料處理資料處理

    溫濕度溫濕度溫濕度溫濕度部分部分部分部分::::

    如下圖2-3所示,電壓會隨溫濕度而上升

    圖2-3 溫溼度與電壓關係圖

  • 5

    溫濕度正比於輸出電壓,ADC0838 類比轉數位 IC,將輸出的類比電壓,轉成 0101…

    的數位格式,IC內部運算結果,公式為類比電壓與 51 相乘(Vx*51)。

    8051 即可從 ADC0838 轉換後的數位訊號判斷目前溫濕度。

    溫度部分溫度部分溫度部分溫度部分::::

    熱敏電阻用來量測溫度的高低,熱敏電阻是最常見且便宜的元件,英文名稱為

    thermistor簡寫為Th。熱敏電阻是一種電阻值對溫度極為敏感的半導體元件,分為兩

    種:正溫度係數及負溫度係數,而正溫度係數熱敏電阻(Positive Temperature

    Coefficient Thermistors;簡稱PTC熱敏電阻)為隨著溫度升高,電阻值增加的熱敏電

    阻,反之,負溫度係數熱敏電阻(Negative Temperature Coefficient Thermistors;

    簡稱NTC熱敏電阻)為隨著溫度升高,電阻值降低的熱敏電阻。

    本專題我們將採用負溫度係數熱敏電阻NTC,特性如圖3-1所示。熱敏電阻的典型用

    法如圖2-5所示。本專題採用2-5 (a)圖,Vx的計算公式為分壓公式VX=5*RX/RX+RTH,實

    際實驗數值見表3-1

    圖 2-5熱敏電阻典型用法

    圖 2-4熱敏電阻 NTC 特性圖

  • 6

    訊號處理及程式部分訊號處理及程式部分訊號處理及程式部分訊號處理及程式部分

    由於8051單晶片微電腦沒有”大於的指令”,也沒有”小於的指令”,所以學生

    用”減法”指令,來判斷大小。兩數相減若發生借位(C=1),則表示減數比較大,同理,

    若無借位(C=0),則表示被減數較大。

    (1)有了上面的觀念,接下來我們要來決定溫度A/D值的範圍,如表3-3所示,我們將定

    18度為介於A/D值103及105之間,19度為介於A/D值105及108之間,以此類推。

    (2)我們把此建構成的概念應用在8051的程式上來判斷溫度高低,使用前面介紹的減法

    指令,再配合查表法,將預先輸入的溫度A/D值(8051程式裡的溫度資料表)查出來和實

    際測得的A/D值相減,例如,現在實際測得的A/D值為106,程式查表法查到的第一個值

    為103,106-103>0,C=0(無借位,還未找到溫度),程式再查表查到下一個值105,

    105-103>0,C=0未找到溫度,直到查到比106高(下一個值是108),106-108

  • 7

    左上角處(位址 80h),顯示英文字B.就將英文字B的ASCII碼(42H),送到LCD DDRAM 的

    80H 位址.

    LCDLCDLCDLCD 的接腳規格的接腳規格的接腳規格的接腳規格

    雖然LCD的接腳因製造廠商的不同而排列方式有所不同,不過都是編號由1至14,的

    14根接腳.

    圖2-7 LCD接腳圖

    NO Symbol Function

    1 VCC 主電源 5V

    2 V0 顯示明暗對比控制腳 CONTRAST ADJ

    3 GND 接地

    4 RS 暫存器選擇信號(Register)

    RS=0 為資料,RS=1 為指令暫存器

    5 R/W R/W=1 表示從 LCD 模組讀取資料

    R/W=0 表示將資料寫入 LCD 模組

    6 E LCD 模組的致能端

    7 DB 0 Data Bit 0

    8 DB 1 Data Bit 1

    9 DB 2 Data Bit 2

    10 DB 3 Data Bit 3

    11 DB 4 Data Bit 4

    12 DB 5 Data Bit 5

    13 DB 6 Data Bit 6

    14 DB 7 Data Bit 7 但是也拿來傳送 BF

    表3-1 LCD接腳作用

    P1

    .3

    P2

    .5

    LCM 16x2

    1278910

    11

    12

    13

    14

    3456

    VC

    C

    VO

    D0

    D1

    D2

    D3

    D4

    D5

    D6

    D7

    GN

    D

    RS

    R/-

    W

    E

    P1

    .2

    P1

    .7

    P1

    .1

    +5V

    P1

    .6

    P2

    .7

    P1

    .0

    P2

    .6

    P1

    .5

    P1

    .4

    LCD模組

  • 8

    LCDLCDLCDLCD內部的旗號與暫存器內部的旗號與暫存器內部的旗號與暫存器內部的旗號與暫存器

    1111....忙碌旗號忙碌旗號忙碌旗號忙碌旗號 Busy Flag(BF) Busy Flag(BF) Busy Flag(BF) Busy Flag(BF)

    BF旗號是LCD用來告訴CPU他內部是否再忙碌的一個旗號,若BF=1,表示LCD正在處理內部

    的工作,因此此時不可以寫資料給LCD.當BF=0,表示CPU可以寫資料給LCD.當接腳 RS=0

    且 R/W=1時,忙碌旗標的接腳會由DB7輸出.

    ;------------------

    ; CHECK LCD BUSY

    ;------------------

    CHECK: PUSH A

    BUSY: CLR RS

    SETB RW

    SETB EN

    MOV A,P1

    CLR EN

    JB ACC.7,BUSY ; 忙碌旗標的接腳會由 DB7 輸出

    ACALL DELAY

    POP A

    RET

    2.2.2.2.暫存器暫存器暫存器暫存器

    LCD模組內只有2個8位元暫存器,稱為指令暫存器(Instruction Register IR),和

    資料暫存器(Data Register,DR),他們都是8位元暫存器,由RS腳來選用.

    指令暫存器IR用來接收單晶片送來的命令,例如清除顯示,或功能設定等等…資料

    暫存器 DR則用來接收單晶片要寫到DDRAM(共80Byte)或CGRAM(共64Byte)的資料緩衝區.

    當單晶片寫到 DR暫存器之後.LCD內部的控制電路會將資料自動寫到DDRAM或CGRAM中,

    而位址是由LCD內部的位址計數器(Address Counter AC)所指定.而單晶片要讀取資料時,

    需先將欲讀取的位址放入IR暫存器中,LCD就會將其內容放入DR中,然後單晶片就可以去

    讀取DR的資料.

  • 9

    3.3.3.3.位址計數器位址計數器位址計數器位址計數器 AC AC AC AC

    位址計數器是用來指定欲存取的DD RAM和CG RAM的位址.位址設定指令將位址寫入

    IR暫存器之後,LCD內部控制電路會將IR暫存器的內容送至AC.當資料存取之後,AC便會

    自動加一(I/D=1)或減一(I/D=0).

    4.4.4.4.字元產生器字元產生器字元產生器字元產生器 Character Generat ROM (CG ROM)Character Generat ROM (CG ROM)Character Generat ROM (CG ROM)Character Generat ROM (CG ROM)

    LCD內部有一個存放字型的ROM,它裡面存著192個5x7點矩陣的字型.這些字型,由

    存放在 DD RAM 中的ASCII碼叫出來顯示.例如:’A’的字型碼為 01000001(即 41H)

    5.5.5.5.自創字型產生器自創字型產生器自創字型產生器自創字型產生器

    LCD模組除了提供標準的字型CG ROM供人使用之外,另外還提供一塊64位元組的CG

    RAM空間供人從放user自己設計的字,一個字要 8個位元組(5x7 點矩陣),因此64/8=8,

    做多可放8 個新字元.要顯示自己的字元時,需先將5X點矩陣圖形放入CG RAM中.而要叫

    出自元時,其字型碼為 00H~07H.

    LCDLCDLCDLCD 模組控制命令模組控制命令模組控制命令模組控制命令

    LCD模組可以接受CPU送至IR暫存器的命令,並加以執行.其指令共有11道,除了Clear

    Display 和 Cursor Home為1.64ms之外,其餘都為40ns.

    1.1.1.1. 清除顯示清除顯示清除顯示清除顯示 Clear Display Clear Display Clear Display Clear Display

    指令

    動作:將 DDR 資料全部填入空白碼 20H,並將游標移到左上角原點位置

    ;CLEAR LCD

    CLRLCD: MOV A,#01H

  • 10

    ACALL W_INS

    RET

    2. 2. 2. 2. 游標歸位游標歸位游標歸位游標歸位 Curse Curse Curse Curse Home Home Home Home 指令指令指令指令

    動作: DD RAM的資料保持不變,僅將游標移至左上角原點處,及第一行的第一個字,DD RAM

    的位址計數器設為 00H.

    3. 3. 3. 3. 輸入模式設定輸入模式設定輸入模式設定輸入模式設定 Entry Mode Entry Mode Entry Mode Entry Mode指令指令指令指令

    4. 4. 4. 4. 顯示顯示顯示顯示 ON/OFF ON/OFF ON/OFF ON/OFF 控制控制控制控制(Display ON/OFF)(Display ON/OFF)(Display ON/OFF)(Display ON/OFF)指令指令指令指令

    動作: D:顯示器控制位元,D=0 關 D=1,開

    C:游標顯示控制位元, C=0 不顯示 C=1 顯示

    B:游標閃爍 Blink 控制位元,B=0 不閃爍,B=1 閃爍

    我們設定為

    MOV A,#0CH ;DISPLAY ON/OFF

    ACALL W_INS

    5. 5. 5. 5. 游標移位控制指令游標移位控制指令游標移位控制指令游標移位控制指令

    6. 6. 6. 6. 功能設定功能設定功能設定功能設定 Function Set Function Set Function Set Function Set 指令指令指令指令

    動作: DL:設定介面的位元寬度,DL=1 時為 8 位元,若 DL=0 時為 4 位元.

    N:設定顯示器的行數,N=0 時,1 行顯示 N=1 時,2 行顯示.

    F:字型 Font 設定.

    7. CG RAM 7. CG RAM 7. CG RAM 7. CG RAM 位址設定指令位址設定指令位址設定指令位址設定指令

  • 11

    動作:設定 CG RAM 的位址,由 A5~A0 之六個位元位址 00H~3FH 位址

    共 64 個位元組,當寫入本命令之後,接個輸入的資料將寫到 CG

    RAM 中.

    8. 8. 8. 8. DD RAM DD RAM DD RAM DD RAM 位址設定指令位址設定指令位址設定指令位址設定指令

    動作:設定 DD RAM 的位址,由 A6~A0 之七個位元定址,接著寫入的資料將寫入 DD RAM

    中.

    9. 9. 9. 9. 讀取忙碌旗標讀取忙碌旗標讀取忙碌旗標讀取忙碌旗標 BF BF BF BF 即位址計數器即位址計數器即位址計數器即位址計數器 AC AC AC AC 的內容的內容的內容的內容....指令指令指令指令

    動作:若讀出的 BF=1,表示 LCD 模組正忙著內部的工作,因此,無法接受CPU 的命令,直

    到 BF=0 才可以.在讀 BF 的同時,也會讀到位址計數器的值(DB0~DB6),這個讀出的位

    址,可能是 CG RAM 的位址或是 DD RAM 的位址,端看前面設定.

    10. 10. 10. 10. 寫資料到寫資料到寫資料到寫資料到 CG RAM CG RAM CG RAM CG RAM 或或或或 DD RAM DD RAM DD RAM DD RAM 中指令中指令中指令中指令

    動作:寫入 8 位元的資料(D0~D7)到 DD RAM或 CG RAM,至於是寫到那一個,則是看前一

    次式設定 DD RAM或是 CG RAM 的位址.

    ;----- --- -----------

    ; WRITE DATA TO LCD

    ;----- --- -----------

    W_DATA: PUSH A

    ACALL CHECK

    SETB RS

    CLR RW

    SETB EN

    MOV P1,A

    CLR EN

    POP A

  • 12

    RET

    11. 11. 11. 11. 自自自自 CG RAM CG RAM CG RAM CG RAM 或或或或 DD RAM DD RAM DD RAM DD RAM 中讀取資料指令中讀取資料指令中讀取資料指令中讀取資料指令

    動作:寫入 8 位元的資料(D0~D7)到 DD RAM或 CG RAM,至於是寫

    到那一個,則是看前一次式設定 DD RAM 或是 CG RAM 的位址

    LCDLCDLCDLCD 初始化副程式初始化副程式初始化副程式初始化副程式

    LCD 模組在送電後,使用之前,單晶片必須要先去規劃 LCD 的各項功能,或工作模

    式,LCD 才能正常工作.這個動作稱為 LCD 的初始化.

  • 13

    2.32.32.32.3 單晶片單晶片單晶片單晶片8051805180518051介紹介紹介紹介紹

    (1)(1)(1)(1) 何謂單晶片微電腦何謂單晶片微電腦何謂單晶片微電腦何謂單晶片微電腦

    所謂單晶片微電腦(Single Chip Microcomputer),簡單的說就是:本身除了具備中

    央處理單元的功能外,將記憶體單元、輸入/輸出單元組合在同一顆晶片內,只須一些

    支援電路就能獨立作業。

    (2) 8051(2) 8051(2) 8051(2) 8051單晶片特性介紹單晶片特性介紹單晶片特性介紹單晶片特性介紹

    MCS-51 為八位元微電腦,內有4K 位元組(Byte)唯讀記憶體(ROM)及128 位元組(Byte)

    隨機存取記憶體(RAM),外部RAM 和ROM 則可個別擴充到64K 位元組,提供5 個中斷

    源並可執行雙層中斷優先規劃功能,四組並列式平行I/O 埠(32 位元),一個全雙工

    串列埠,並能位元定址及執行布林(Boolean)運算。MCS-51 系列晶片特性整理如表1-1

    所示。

    (3)(3)(3)(3) 8051805180518051接腳說明接腳說明接腳說明接腳說明

    表3-2 8051 各接腳用途

  • 14

    圖2-8 8051 接腳圖

  • 15

    第三章第三章第三章第三章 作品內容作品內容作品內容作品內容

    圖 2-9 系統方塊圖

  • 16

    3.2 3.2 3.2 3.2 程式流程圖程式流程圖程式流程圖程式流程圖

    圖 2-10 程式流程圖

  • 17

    3333.3 .3 .3 .3 電路圖電路圖電路圖電路圖

    8051805180518051

    ADC0838ADC0838ADC0838ADC0838

  • 18

    LCDLCDLCDLCD

    穩壓電路穩壓電路穩壓電路穩壓電路

  • 19

    繼電器電路繼電器電路繼電器電路繼電器電路

    按鍵電路按鍵電路按鍵電路按鍵電路

    HMZHMZHMZHMZ----433A433A433A433A溫溼度感測模組溫溼度感測模組溫溼度感測模組溫溼度感測模組

  • 20

    3.4 3.4 3.4 3.4 程式部分程式部分程式部分程式部分

    ADC_CS REG P3.1

    ADC_CLK REG P3.2

    ADC_DI REG P3.6

    ADC_DO REG P3.7

    CHANL EQU 5AH ;ADC 通道選擇指標存放位址

    A2D EQU 5BH ;ADC 值存放位址

    ORG 00H ;各接腳定義,P0 為 LCD 模組,P1.0 蜂鳴器、P1.3 升溫鍵、P1.4

    降溫鍵、P1.5 確定鍵、P1.6 ADC0838、P1.7ADC0838、P2 A/D 溫度值、P3.0 秒燈、P3.6

    冷卻器、P3.7 加熱器

    ===================

    =======主程式======

    ===================

    START:

    MOV R2,#20

    MOV 50H,#00H

    MOV 51H,#00H

    MOV R3,#00H

    CLR C

    ACALL INIT

    ACALL LCDSET

    SETB P1.3

    SETB P1.4

    SETB P1.5

    ACALL SETUP

    MOV R3,#00H ;令字形及溫度值的指標為 0

    SETB P1.7

    SETB P1.6

    MOV R4,#2

    MOV 30H,#2

    LOOP: MOV CHANL,#17H ;第 3 通道

    ACALL ATOD ;呼叫副程式,致能 ADC0838 這顆 IC,並把數值讀進來 P2 腳

    MOV 52H,A2D

    DJNZ R4,WAIT1 ;R4 之前設定為 2,做 2次後才往下做,不到 10次跳到 WAIT1

    ACALL TEMPCONTROL ;呼叫控溫副程式

    ACALL HUMCONTROL ;呼叫控溼副程式

    WAIT1: MOV R3,#00H ;令字形及溫度值的指標為 0

  • 21

    LOOP1: CLR C ;設 C 為 0

    ACALL READTEMP ;讀溫度資料表,查表法

    INC R3 ;把字形及溫度值的指標加 1

    MOV A,52H ;把量測到的溫度數值放進去 A

    SUBB A,R1 ;R1 是 18 度到 40 度查表法查到的數值,A是量測到的 A/D 數

    值,A減去 R1

    JNC LOOP1 ;A 減去 R1(從 18 度到 40度),一直減到 R1(查表)比 A(量測)

  • 22

    ACALL WRINS

    MOV A,#'H' ;顯示 H

    ACALL WRDATA

    MOV CHANL,#0BH ;第 4 通道

    ACALL ATOD ;呼叫副程式,致能 ADC0838 這顆 IC,並把數值讀進來 P2 腳

    MOV 53H,A2D

    WAIT2: MOV R3,#00H ;令字形及溫度值的指標為 0

    LOOP2: CLR C ;設 C 為 0

    ACALL READHUM ;讀溫度資料表,查表法

    INC R3 ;把字形及溫度值的指標加 1

    MOV A,53H ;把量測到的溫度數值放進去 A

    SUBB A,R1 ;R1是18度到40度查表法查到的數值,A是量測到的A/D

    數值,A減去 R1

    JNC LOOP2 ;A 減去 R1(從 18 度到 40度),一直減到 R1(查表)比 A(量測)

  • 23

    INC A

    MOVC A,@A+DPTR ;顯示溫度值

    ACALL WRDATA

    ACALL DELAY

    RET

    DISPLAY2:

    MOV A,#11001100B ;設定顯示位置為第二行第 13 個字

    ACALL WRINS

    MOV A,R3

    MOV B,#2

    MUL BA

    MOV DPTR,#TABLE3 ;查字形表

    MOVC A,@A+DPTR ;顯示濕度值

    ACALL WRDATA

    MOV A,#11001101B ;設定顯示位置為第二行第 14 個字

    ACALL WRINS

    MOV A,R3

    MOV B,#2

    MUL BA

    INC A

    MOVC A,@A+DPTR ;顯示濕度值

    ACALL WRDATA

    ACALL DELAY

    RET

    LCDSET:

    MOV A,#10000000B ;設定顯示位置為第一行第一個字

    ACALL WRINS

    MOV A,#'S' ;顯示 S

    ACALL WRDATA

    MOV A,#'E' ;顯示 E

    ACALL WRDATA

    MOV A,#'T' ;顯示 T

    ACALL WRDATA

    MOV A,#':' ;顯示:

    ACALL WRDATA

    MOV A,#10000100B ;設定顯示位置為第一行第 5個字

    ACALL WRINS

    MOV A,50H

  • 24

    MOV B,#2

    MUL BA

    MOV DPTR,#TABLE1 ;查字形表

    MOVC A,@A+DPTR ;顯示溫度值

    ACALL WRDATA

    MOV A,#10000101B ;設定顯示位置為第一行第 6個字

    ACALL WRINS

    MOV A,50H

    MOV B,#2

    MUL BA

    INC A

    MOVC A,@A+DPTR ;顯示溫度值

    ACALL WRDATA

    MOV A,#11000100B ;設定顯示位置為第二行第 5個字

    ACALL WRINS

    MOV A,51H

    MOV B,#2

    MUL BA

    MOV DPTR,#TABLE3 ;查字形表

    MOVC A,@A+DPTR ;顯示濕度值

    ACALL WRDATA

    MOV A,#11000101B ;設定顯示位置為第二行第 6個字

    ACALL WRINS

    MOV A,51H

    MOV B,#2

    MUL BA

    INC A

    MOVC A,@A+DPTR ;顯示濕度值

    ACALL WRDATA

    MOV A,#10000110B ;設定顯示位置為第一行第 7個字

    ACALL WRINS

    MOV A,#11011111B ;顯示度

    ACALL WRDATA

    MOV A,#'C' ;顯示 C

    ACALL WRDATA

    MOV A,#11000110B ;設定顯示位置為第二行第 7個字

    ACALL WRINS

    MOV A,#'%' ;顯示%

  • 25

    ACALL WRDATA

    MOV A,#'H' ;顯示 H

    ACALL WRDATA

    MOV A,#10001001B ;設定顯示位置為第一行第 10 個字

    ACALL WRINS

    MOV A,#'T' ;顯示 T

    ACALL WRDATA

    MOV A,#'M' ;顯示 M

    ACALL WRDATA

    MOV A,#':' ;顯示:

    ACALL WRDATA

    MOV A,#10001110B ;設定顯示位置為第一行第 15 個字

    ACALL WRINS

    MOV A,#11011111B ;顯示度

    ACALL WRDATA

    MOV A,#'C' ;顯示 C

    ACALL WRDATA

    MOV A,#11001110B ;設定顯示位置為第二行第 15 個字

    ACALL WRINS

    MOV A,#'%' ;顯示%

    ACALL WRDATA

    MOV A,#'H' ;顯示 H

    ACALL WRDATA

    MOV A,#11000000B ;設定顯示位置為第二行第 1個字

    ACALL WRINS

    MOV A,#'S' ;顯示 S

    ACALL WRDATA

    MOV A,#'E' ;顯示 E

    ACALL WRDATA

    MOV A,#'T' ;顯示 T

    ACALL WRDATA

    MOV A,#':' ;顯示:

    ACALL WRDATA

    MOV A,#11001001B ;設定顯示位置為第二行第 10 個字

    ACALL WRINS

    MOV A,#'H' ;顯示 H

    ACALL WRDATA

    MOV A,#'U' ;顯示 U

  • 26

    ACALL WRDATA

    MOV A,#':' ;顯示:

    ACALL WRDATA

    RET

    ====================

    =LCD 功能設定副程式=

    ====================

    INIT: ACALL DELAY2

    MOV A,#38H

    ACALL WRINS

    MOV A,#38H

    ACALL WRINS

    MOV A,#38H

    ACALL WRINS

    MOV A,#38H

    ACALL WRINS

    MOV A,#08H

    ACALL WRINS

    MOV A,#01H

    ACALL WRINS

    MOV A,#06H

    ACALL WRINS

    MOV A,#0CH

    ACALL WRINS

    RET

    ====================

    =把指令送入 LCD 模組==

    ====================

    WRINS: CLR P3.3 ;RS=0

    CLR P3.4 ;R/W=0

    CLR P3.5 ;E=0

    NOP ;廷時

    SETB P3.5 ;E=1

    MOV P0,A ;指令送入 LCD 模組的 DB7~DB0

    NOP ;廷時

    CLR P3.5 ;E=0

    ACALL DLY1 ;廷時

    RET

  • 27

    ====================

    =把資料送入 LCD 模組==

    ====================

    WRDATA: SETB P3.3 ;RS=1

    CLR P3.4 ;R/W=0

    CLR P3.5 ;E=0

    NOP ;廷時

    SETB P3.5 ;E=1

    MOV P0,A ;資料送入 LCD 模組的 DB7~DB0

    NOP ;廷時

    CLR P3.5 ;E=0

    ACALL DLY2 ;廷時

    RET

    DELAY2: MOV R6,#100

    DL: MOV R7,#200

    DJNZ R7,$

    DJNZ R6,DL

    RET

    DLY1: MOV R6,#20

    DL3: MOV R7,#200

    DJNZ R7,$

    DJNZ R6,DL3

    RET

    DLY2: MOV R6,#80

    DJNZ R6,$

    RET

    ====================

    ==讀溫度資料副程式==

    ====================

    READTEMP:MOV DPTR,#TABLE

    MOV A,R3

    MOVC A,@A+DPTR

    MOV R1,A

    RET

    ====================

    ==讀濕度資料副程式==

    ====================

    READHUM:MOV DPTR,#TABLE2

  • 28

    MOV A,R3

    MOVC A,@A+DPTR

    MOV R1,A

    RET

    ====================

    =====廷時副程式=====

    ====================

    DELAY1:

    MOV R6,#40

    DL4: MOV R7,#6

    DJNZ R7,$

    DJNZ R6,DL4

    RET

    ====================

    ====控溫副程式======

    ====================

    TEMPCONTROL:

    MOV R4,#2

    CLR C

    MOV A,34H

    MOV R0,A

    MOV A,52H

    SUBB A,R0 ;R0 是設定好的溫度,A是量測到的 A/D 數值,A減去 R0

    JNZ HEART ;若相減後的值不為 0(相減的值會存在 A)則跳到 HEART

    SETB P1.6 ;相減後為 0,關掉加熱器及降熱器的 RELAY

    SETB P1.7

    AJMP BACK

    HEART: JNC COOL ;若 C 為 0沒借位,加熱器不動作且跳到 COOL,

    ;若有借位 1,往下

    CLR P1.7 ;打開加熱器的 RELAY

    SETB P1.6 ;關掉降熱器的 RELAY

    AJMP BACK

    COOL: CLR P1.6 ;打開降熱器的 RELAY

    SETB P1.7 ;關掉加熱器的 RELAY

    BACK: RET

    HUMCONTROL:

    MOV R4,#2

    CLR C

  • 29

    MOV A,35H

    MOV R0,A

    MOV A,53H

    SUBB A,R0 ;R0 是設定好的溫度,A是量測到的 A/D 數值,A減去 R0

    JNZ HUM_IN ;若相減後的值不為 0(相減的值會存在 A)則跳到 HEART

    SETB P1.5 ;相減後為 0,關掉加熱器及降熱器的 RELAY

    SETB P3.0

    AJMP HUM_BACK

    HUM_IN: JNC HUM_OUT ;若 C 為 0沒借位,加熱器不動作且跳到 COOL,

    ;若有借位 1,往下

    CLR P1.5 ;打開加熱器的 RELAY

    SETB P3.0 ;關掉降熱器的 RELAY

    AJMP HUM_BACK

    HUM_OUT:

    CLR P3.0 ;打開降熱器的 RELAY

    SETB P1.5 ;關掉加熱器的 RELAY

    HUM_BACK: RET

    ======================

    ==廷時副程式 R5來定時==

    ======================

    DELAY:

    DL0: MOV R6,#250

    DL1: MOV R7,#200

    DL2: DJNZ R7,DL2

    DJNZ R6,DL1

    DJNZ R5,DL0

    RET

    ; =====================

    ; ==A/D 轉換副程式(溫)==

    ; =====================

    ; 起動 ADC0838

    ATOD:

    -------------------------ADC0838 測試----------------------

    MOV R1,#5 ;選 ADC0838 類比通道,串列輸入

    MOV R2,CHANL ;ADC 通道參數,

    SETB ADC_CS ;ADC 控制初值

    CLR ADC_DI ;ADC 控制初值

    CLR ADC_CLK ;ADC 控制初值

  • 30

    CLR ADC_CS ;ADC 控制初值

    SET_MUX_CODE:

    MOV A,R2

    ADC083X_LOOP1:

    RRC A ;串列輸入 ADC

    MOV ADC_DI,C

    SETB ADC_CLK ; CLK 上升邊緣,資料可寫入

    NOP

    CLR ADC_CLK ; CLK 回復為 Low

    DJNZ R1,ADC083X_LOOP1 ;共 5 次

    SAMPLE_DATA:

    MOV R2,#8 ;ADC 轉換值共 8 BIT

    ADC083X_LOOP2:

    SETB ADC_CLK ; CLK 上升邊緣,資料可讀出

    NOP

    CLR ADC_CLK ; CLK 下降邊緣

    MOV C,ADC_DO ;資料讀出

    RLC A ;轉入 A

    DJNZ R2,ADC083X_LOOP2 ;共 8 次

    MOV A2D,A ;存入 ADC 類比轉數位值

    RET

    ====================

    ==溫濕度設定副程式==

    ====================

    開始設定溫度

    SETUP: MOV R3,#00H

    JNB P1.0,SETTEMP

    JNB P1.1,SETHUM

    JMP SETUP

    SETTEMP:JNB P1.0,SETTEMP

    JB P1.1,ST

    MOV 34H,R1

    MOV R3,#00H

    AJMP SETHUM

    ST: CJNE R3,#27H,UP ;到四十度時,避免再按升溫鍵會有誤動作,所以 R3 不能

    ;比 39(16 進位為 27)大,故當 R3等於 27H 時跳

    GOBACK

    MOV R3,#00H

  • 31

    UP: JNB P1.2,S1 ;等待 P1.2 腳為零(按下升溫按鍵),為零則跳 S1

    AJMP DOWN ;沒按按鍵跳到 DOWN(降溫)

    S1:

    JNB P1.2,S1 ;要避免開關的彈跳現象,等待按鍵放開後(P1.2 為 1),才往下做

    ;,否一直跳到 S1

    INC R3 ;把字形及溫度值的指標加 1

    MOV 50H,R3

    MOV R5,#2 ;設定 DELAY 的時間長度

    ACALL LCDSET ;呼叫顯示副程式

    ACALL READTEMP ;呼叫讀溫度資料副程式

    DOWN: CJNE R3,#00H,GOON ;一開始是從低溫開始,避免再按降溫鍵會有誤動作,所

    以 R3 不能比 0小,故當 R3 等於 0時跳回 SETTEMP

    AJMP SETTEMP

    GOON: JNB P1.3,S2 ;等待 P1.3 腳為零(按下降溫按鍵),為零則跳 S2

    AJMP GOBACK ;沒按按鍵跳到 GOBACK(確定鍵)

    S2:

    JNB P1.3,S2 ;要避免開關的彈跳現象,等待按鍵放開後(P1.3 為 1),才往

    下做 ;否則一直跳到 S2

    DEC R3 ;把字形及溫度值的指標加 1

    MOV 50H,R3

    MOV R5,#2 ;設定 DELAY 的時間長度

    ACALL LCDSET ;呼叫顯示副程式

    ACALL READTEMP ;呼叫讀溫度資料副程式

    GOBACK: JNB P1.4,S3 ;等待 P1.4 腳為零(按下確定鍵),為零則跳 S3

    AJMP SETTEMP ;沒按按鍵跳到 SETTEMP

    S3:

    JNB P1.4,S3 ;要避免開關的彈跳現象,等待按鍵放開後(P1.4 為 1),才往

    下做,否則一直跳到 S3

    MOV 34H,R1 ;把值放進 34H

    RET ;返品主程式

    SETHUM: JNB P1.1,SETHUM

    JB P1.0,SH

    MOV 35H,R1

    MOV R3,#00H

    AJMP SETTEMP

    SH: CJNE R3,#31H,H_UP ;到 80 度時,避免再按升溫鍵會有誤動作,所以 R3 不能

    ;比 49(16 進位為 31)大,故當 R3等於 31H 時往下

  • 32

    MOV R3,#00H

    H_UP: JNB P1.2,H_S1 ;等待 P1.2 腳為零(按下升溫按鍵),為零則跳 S1

    AJMP H_DOWN ;沒按按鍵跳到 DOWN(降溫)

    H_S1:

    JNB P1.2,H_S1 ;要避免開關的彈跳現象,等待按鍵放開後(P1.2 為 1),才往

    下做

    否一直跳到 S1

    INC R3 ;把字形及溫度值的指標加 1

    MOV 51H,R3

    MOV R5,#2 ;設定 DELAY 的時間長度

    ACALL LCDSET ;呼叫顯示副程式

    ACALL READHUM ;呼叫讀溫度資料副程式

    H_DOWN: CJNE R3,#00H,H_GOON ;一開始是從低溫開始,避免再按降溫鍵會有誤動

    作,所以 R3 不能比 0小,故當 R3等於 0時跳回 SETTEMP

    AJMP SETHUM

    H_GOON: JNB P1.3,H_S2 ;等待 P1.3 腳為零(按下降溫按鍵),為零則跳 S2

    AJMP H_GOBACK ;沒按按鍵跳到 GOBACK(確定鍵)

    H_S2:

    JNB P1.3,H_S2 ;要避免開關的彈跳現象,等待按鍵放開後(P1.3 為 1),才往

    下做 否則一直跳到 S2

    DEC R3 ;把字形及溫度值的指標加 1

    MOV 51H,R3

    MOV R5,#2 ;設定 DELAY 的時間長度

    ACALL LCDSET ;呼叫顯示副程式

    ACALL READHUM ;呼叫讀溫度資料副程式

    H_GOBACK: JNB P1.4,H_S3 ;等待 P1.4 腳為零(按下確定鍵),為零則跳 S3

    AJMP SETHUM ;沒按按鍵跳到 SETTEMP

    H_S3:

    JNB P1.4,H_S3 ;要避免開關的彈跳現象,等待按鍵放開後(P1.4 為 1),才往

    下做,否則一直跳到 S3

    MOV 35H,R1 ;把值放進 50H

    RET ;返回主程式

    END

  • 33

    3333....5555 電路實作部份電路實作部份電路實作部份電路實作部份

    零件零件零件零件表表表表 :

    項目 數量 編號 規格

    1 1 C1 470uF/16V 電解電容

    2 1 C2 100uF/16V 電解電容

    3 2 C4,C3 104 陶瓷電容

    4 2 C6,C5 30PF 陶瓷電容

    5 1 C7 10uF/25V 電解電容

    6 3 D1,D3,D5 1n4148 二極體

    7 3 D2,D4,D6 LED

    8 1 J1 溫濕度SENSOR

    9 2 SW1,J2 POWER 有段開關

    10 1 J3 溫度SENSOR 熱敏電阻

    11 1 J4 加熱燈泡

    12 1 J5 造霧器

    13 1 J6 散熱風扇

    14 3 Q1,Q2,Q3 9012(A1015) 電晶體

    15 2 RLY1,RLY2 RELAY 繼電器

    16 1 RLY3 RELAY 繼電器

    17 1 R1 1K 電阻

    18 3 R2,R3,R6 330Ω 電阻

    19 3 R4,R5,R8 330 電阻

    20 1 R7 10K 電阻

    21 1 SW2 噴霧手動開關 無段開關

    22 1 SW3 UP 無段開關

    23 1 SW4 DOWN 無段開關

    24 1 SW5 溫度設定 無段開關

    25 1 S1 定時噴霧設定 無段開關

    26 1 S2 OK 無段開關

    27 2 U1,U2 78M05

    28 1 U3 ADC0838

    29 1 U4 80C51

    30 1 Y1 12MHZ

  • 34

    所有元件所有元件所有元件所有元件

  • 35

  • 36

  • 37

  • 38

    3.6 3.6 3.6 3.6 操作過程操作過程操作過程操作過程::::

    1111....開機開機開機開機

    2.2.2.2.選擇溫度設定鍵選擇溫度設定鍵選擇溫度設定鍵選擇溫度設定鍵

  • 39

    3.3.3.3.設定溫度設定溫度設定溫度設定溫度((((增增增增))))

    4.4.4.4.設定溫度設定溫度設定溫度設定溫度((((減減減減))))

  • 40

    5.5.5.5.選擇溼選擇溼選擇溼選擇溼度設定鍵度設定鍵度設定鍵度設定鍵

    6.6.6.6.設定溼度設定溼度設定溼度設定溼度((((增增增增))))

  • 41

    7.7.7.7.設定溼度設定溼度設定溼度設定溼度((((減減減減))))

    8.8.8.8.RUNRUNRUNRUN

  • 42

    第四章第四章第四章第四章 結果與討論結果與討論結果與討論結果與討論

    4.14.14.14.1 測試測試測試測試結果結果結果結果

    由於熱敏電阻的非線性特性,所以所量測的溫度數值不是很準確,但是靈敏度非常

    高,為了改善準確度,可以用更準確且線性的感溫元件來代替。

    雖然此電路有7805穩壓ic來作穩壓,但些微的雜訊就會導致8051當機,因此可在

    8051第40腳(vcc)加一個0.1uF的電容來消除雜訊。

    4.24.24.24.2 結論結論結論結論討論討論討論討論

    1.一開始設計的壓克力箱由於實驗的需求必須鑽洞放置風扇、感測元件,但由於

    這些孔洞,造成系統在執行時,溫、溼度因孔洞而造成系統內部的流失,並且外在的因

    素也會藉由孔洞直接影響系統內部的進行,所以此系統環境方面的設計還有待改善。

    2.由於程式設計上,溫度和濕度是同時進行的,但是在溫度上升或下降(風扇啟動

    散熱、燈泡啟動加溫)、溼度上升或下降(風扇啟動排霧、造霧器啟動造霧)時,兩兩會

    互相影響,導致實際上不必要的動作,造成資源的消耗,所以在這方面考慮將溫、溼度

    系統做更細的區分,獨立運作,方能達到真正的節能並且提高產值的效用。

    五五五五. . . . 參考文獻參考文獻參考文獻參考文獻

    [1] 吳朗,感測與轉換原理元件與應用,全欣資訊圖書

    [2] 蔡朝洋,單晶片微電腦8051原理與應用,全華

    [3] 蔡朝洋 電子學實驗,全華科技圖書股份有限公司

    [4] 陳明熒,單晶片8051實作入門,文魁

    [5] ADC0838的DATA SHEET

    [6] 89C51的DATA SHEET

    [7] 七段顯示器的DATA SHEET

    [8] 溫濕度模組的DATA SHEET

    [9] 林振漢 8051單晶片實作-使用C語言,博碩文化

    [10]蕭敏學 大學電子學實習(一),台科大圖書股份有限公司

    [11]鄭元春 臺灣自然觀察圖鑑 植物觀察 1980 渡假出版社

    [12]許世豪 單晶片微電腦系統的製作(The Implementation of Incubator)

    東方學報第24期---93.06