逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k...

82
自動控制工程學系專題製作 電子密碼保險箱 Electronic Password Coffer 指導教授:吳穎強 生:邱楷元 中華民國九十九年六月

Transcript of 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k...

Page 1: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

逢 甲 大 學

自動控制工程學系專題製作

專 題 論 文

電子密碼保險箱

Electronic Password Coffer

指導教授:吳穎強

學 生:邱楷元

中華民國九十九年六月

Page 2: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至
Page 3: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

i

摘 要 本次專題內容主要是以 8051 單晶片和微動開關、直流馬達、LCM、EEPROM

93C66、……等元件組成一座電子密碼保險箱,具有顯示時間、設定時間、輸入

密碼以及修改密碼的功能。當使用者打開保險箱之電源時,使用者必須確認保險

箱的門必須處於關閉狀態,此時才可正常使用保險箱之功能,若門已經處於關閉

狀態,則使用者必須輸入正確的兩組密碼,密碼兩組皆正確則保險箱的門會自動

彈開,而此時 LCD 螢幕顯示 Door Unlock,若密碼輸入錯誤則在 LCD螢幕顯示

ERROR,整個保險箱以 8051單晶片為主要部分,螢幕顯示方面使用文字型 LCD,

93C66用來儲存密碼,而在輸出端有一顆馬達用來驅動門閂使保險箱的門能夠自

動彈開。

關鍵字:電子密碼,保險箱

Page 4: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

ii

Abstract This aim of this project is to establish a coffer that composed of a Intel 8051,Liquid

Crystal Module,EEPROM 93C66,Slide Switch,DC Motor.It include reveal time,set

time,input code and set code.The user have to make sure the door is closed,or user can

not use the coffer.The user need to ipunt the correct code and then the door can

open.When the door open,the screen will show “Door Unclock”,if you give the wrong

code,it will shoe “ERROR”.The major of this project is Intel 8051, Liquid Crystal

Module is used to show the word.There is a bolt moved by a motor to let the dppr open.

Key word:Electronic password,Coffer

Page 5: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

iii

目錄

摘 要 ................................................................................................................................ i

Abstract ............................................................................................................................. ii

目錄 ................................................................................................................................. iii

圖目錄 ............................................................................................................................. iv

表目錄 .............................................................................................................................. v

第一章 前言 ..................................................................................................................... 1

1.1 前言 .................................................................................................................... 1

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

第二章 研究背景 ............................................................................................................. 2

2.1 MCS-51 的認識: ................................................................................................ 2

2.2 8051 架構介紹: .................................................................................................. 4

2.3 MCS-51 家族 8051 記憶體簡介 ....................................................................... 5

2.4 EEPROM93C66 的認識: ................................................................................... 6

第三章 LCD 控制電路 .................................................................................................... 9

3.1 LCD 詳細功能與動作說明: ............................................................................ 11

第四章 程式硬體敘述及電路圖 ................................................................................... 17

4.1 硬體架構說明 .................................................................................................. 17

第五章 程式流程圖及程式碼介紹 .............................................................................. 21

5.1 程式流程圖 ...................................................................................................... 21

5.2 程式概述 .......................................................................................................... 28

5.3 詳細程式碼: ..................................................................................................... 35

第六章 製作心得與參考文獻 ...................................................................................... 71

6.1 製作心得 : ...................................................................................................... 71

6.2 參考文獻: ......................................................................................................... 71

Page 6: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

iv

圖目錄

圖 2.1 8051 單晶片的接腳圖 .......................................................................................... 3

圖 2.2 93C66 接腳圖 ....................................................................................................... 6

圖 3.1 LCD 接腳圖 ......................................................................................................... 9

圖 3.2 LCD 初始化步驟圖 ............................................................................................ 16

圖 4.2 8051 主電路 ....................................................................................................... 18

圖 4.3 LCD 電路 ........................................................................................................... 18

圖 4.4 93C66 電路 ......................................................................................................... 18

圖 4.5 掃描鍵盤 ............................................................................................................ 19

圖 4.6 穩壓電路 ............................................................................................................ 19

圖 4.7 馬達驅動電路 .................................................................................................... 19

圖 4.8 按鍵偵測電路 .................................................................................................... 20

圖 4.9 LED 電路 ............................................................................................................. 20

圖 5.1 程式流程圖(開機)............................................................................................... 21

圖 5.2 程式流程圖(A) ................................................................................................... 22

圖 5.3 程式流程圖(B) ................................................................................................... 23

圖 5.4 程式流程圖(C) ................................................................................................... 24

圖 5.5 程式流程圖(D) ................................................................................................... 25

圖 5.6 程式流程圖(判斷密碼)...................................................................................... 26

圖 5.7 程式流程圖(判斷救密碼).................................................................................. 27

Page 7: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

v

表目錄 表 2.1 8051 各接腳功能表 .............................................................................................. 3

表 2.2 93C66 指令集 ....................................................................................................... 6

表 3.1 LCD 接腳功能表 ............................................................................................... 10

表 3.2 接腳控制指令表 ................................................................................................ 11

表 3.3 LCD 控制指令整理表 ....................................................................................... 15

Page 8: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

1

第一章 前言

1.1前言 由於近代科學的突飛猛進,而使微處理機的發明和發展有了長足的進

步,使計算機走出科學家的專屬的領域,而自從單晶片微電腦的發明之後,單晶

片更是逐漸變成新電子系統的標準元件。對於電子工程師而言,高科技電子產品

的競爭,往往就集中在對微處理機和單晶片微處理機的應用上;單晶片微電腦應

用在工業上已是相當普及,而產品性能在很大的程度上,取決於設計微處理機和

單晶片微處理機的應用水準,因此便用專題來進一步熟悉單晶片微處理機的功

能。

1.2研究動機與目的 有鑒於電子工業的發展及單晶片微電腦技術的進步,使我覺得對單晶片微電

腦方面的認知日益重要,而大部份所學都是有關於計算機理論與技巧方面的知

識,反而對硬體方面的認識與知識稍嫌不足、涉掠不深,因此便希望藉由這次的

專題來對硬體有更深入的了解,並且對單晶片微電腦系統的功能與特性透過電路

實作能有更深一層的認識,及明瞭實作電路時所面臨的困難和技術性的問題。而

MCS-51 家族的 8051 不僅功能強大且使用方便,也十分適合拿來應用於專題的

製作.

目的:

利用 8051設計製作一保險箱藉此對 8051 單晶片微電腦硬體以及所提供的指令

集有所了解,和了解如何利用 8051來控制文字型 LCD 的架構與指令的研究以及

對 8051 與外部擴充記憶體實際運作的了解。

Page 9: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

2

第二章 研究背景

2.1 MCS-51的認識: MCS-51 是 Intel 所生產的 8051 系列單晶片的總稱,在這家族中還有

8051,8751,8031,8032,8052,80C51 等.以上這些單晶片雖然在編號上有所

不同,卻都是使用相同的 CPU,指令集,只是附加的周邊上有所不同,例如8751

是內含有 4k ERROM 的 MCS-51 版本,而 80C31 式一顆內部無記憶體的省電

MCS-51 版本.MSC-51 是在 1980,由 Intel 根據 MCS-48 的架構,所發展出功

能更強,速度更快的單晶片.Intel 發展初期,是以 HMOS 的製程發展而成,經

過數年,又改以 CMOS 生產,例如 8051 就是此款.

8051 的主要功能列舉如下

1. 為一般控制應用的 8 位元單晶片

2. 晶片內部具時脈震盪器(最高工作可至 12MHZ)

3. 內部程式記憶體(ROM)為 4K 位元組.

4. 內部資料記憶體(RAM)為 128K 位元組.

5. 外部程式記憶體可擴充至 64K 位元組

6. 外部資料記憶體可擴充至 64K 位元組

7. 32條雙向輸入輸出線,且每條均可以單獨做 I/O 控制

8. 5個中斷向量元

9. 2組獨立的 16 位元定時器

10. 1個全多工串列通訊埠 UART(通用非同步接收和傳送器)

11. 單晶片提供位元邏輯運算指令

Page 10: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

3

圖 2.1 8051單晶片的接腳圖

表 2.1 8051各接腳功能表

Page 11: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

4

2.2 8051架構介紹: 1.MCS-51 家族的單晶片,如 8051 的硬體架構可以簡單區分成七個部分震盪與

時序方塊(Oscillator) MSC-51 內部有時脈震盪電路,只要外部加上晶體,即可

產生頻率非常穩定的脈波信號,所有 MCS-51 單晶片的時序都是以此為基準

2.CPU

這是整個單晶片的控制處理中心,CPU 讀取位於程式記憶體(ROM或 EPROM)

的程式碼,經過計算與處理之後,將結果送到各個暫存器的輸出入埠上,並且接

受內部和外部的中斷信號,然後執行中斷服務程式,只要電源加入且震盪器開始

動作之後,CPU 就會開始一直不停的動作.

3.程式記憶體

MCS-51 系列單晶片中,8051 提供內部 4096Byte(4KB)的程式計區,專供儲

存程式指令碼的地方,CPU 所執行的程式指令,即到這裡來提取的.若有內部程

式記憶區時,CPU 可以選擇執型的程式指令,是由內部的程式區提取,或由外部

的程式區提取.程式區的內容只能讀出但不能寫入.

4.資料記憶體

MCS-51 系列中的 8051 單晶片提供 128 Bytes 可讀/寫的資料記憶區,而

8052 系列則有 256 Bytes 資料記憶區.這資料區中有 16 個 Bytes共 128Bit

的區域是可直接做單一位元定址的 (Bit Addressable),同時MCS-51 也提供相

當好用的位元指令.

5.四組可規劃輸入/輸出埠(P0,P1,P2,P3 ) ,這四個埠共提供 4X8=32 條

I/O 線,所有的部都可以做位元輸出入埠(Byte I/O),或者做單一位元輸出/入

埠(Bit I/O),當 MCS-51 做外部記憶體擴充時,必須用 Port-0,Port-2 當作

資料/位址線,配合ALE,PSEN,WR,WD 等控制線產生必要的控制信號,做讀出

(Read)及寫入(Write)信號.

6.計時/計數(Time0,Time0)

MCS-51 系列的單晶片都有 2 個 16 位元的計時/計數器,而 8052 則有3 個.每

個計時/計數器有多種模式可供選擇.

7.可規劃串列 I/O 方塊(UART)

MCS-51 單晶片可透過此串列輸出入埠介面,與外界的電腦或儀器設備做資訊的

Page 12: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

5

交換,也可過此介面做 I/O 的擴充.

2.3 MCS-51 家族 8051 記憶體簡介 程式記憶體

程式記憶體式存放指令的地方(由燒錄器寫在 EPROM 或 Flash ROM中),只能被

CPU 讀取,不能被寫入.因為 MCS-51 單晶片的計數器有 16 位元,因此它可定

址的範圍是 216

=64K,又因為 MCS-51 的記憶體寬度皆為1個 Byte,所以 MCS-51

的最大程式記憶體空間為 64KByte.而 8051 裡面已有 4K 的內部程式記憶體,

所以可在外部再擴充 60KByte.MCS-51 由 EA 腳位來決定存取內部或外部程式記

憶體。

MCS-51 的資料記憶體,可分為內部資料記憶體,與外部資料記憶體,MCS-51 對

內部和外部的資料記憶體的存取,用不同的指令.一個是用 MOV(內部),另一個

是用 MOVX(外部).當 CPU 再執行 MOVX 時,會令 RD 或 WR 腳發出對外部資料

記憶體存取的信號.執行 MOV 時則不會.MSC-51 內部有 256KByte 的資料記憶空

間,前 128(00H~7FH)是做存放資料的地方,後面 128KByte 則是(SFR).

單晶片內部的 RAM,和一般 PC 的 RAM 是不同的,無法被用來存放程式,因為

程式計數器 PC 不對內部 RAM 定址。前面 的128KByte 的資料暫存區位址從

00H~1FH,設有四工作暫存器,每組有 8Byte,因此共是 32Byte.從 20H~2FH,

共有 16 個 Byte,提供每一位元可單獨被定址或控制的位元定址區.因此這 16

個位元組便提供了,16X8=128 個位元控制點.另外從位址 30H~7FH 的這個區域

是提供使用者任意使用的通用目的記憶區.

Page 13: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

6

2.4 EEPROM93C66的認識: 專題做的是電子密碼保險箱,所以必須儲存密碼,並且在電源消失後仍要能

紀錄.若紀錄在 8051 中,因為 8051 的資料記憶體都是用 RAM,電源一關掉資

料就會 lose 掉.所以必須再外部加上一顆 ROM.且為了方便性,使用電子消除式

的 EEPROM,也是採用 ATMEL 的 93C66.

93C66 規格

記憶體容量 接腳 指令格式

93C66 4KBit(256X16) 8 11

93C66 接腳圖

CS:晶片選擇接腳此接腳為

高電位(cs=1)時,才可正確讀寫

SK:串列資料時脈接腳

DI:串列資料輸入接腳

DO:串列資料輸出接腳

Vcc:電源接腳

GND:接地腳

圖 2.2 93C66 接腳圖 NC:空接腳

表 2.2 93C66 指令集

Instruction Start Bit OP code Address Input Data

Read 1 10 A7~A0

WEN 1 00 11xxxxxx

WRITE 1 01 A7~A0 D15~D0

WR-ALL 1 00 01xxxxxx D15~D0

WDS 1 00 00xxxxxx

ERASE 1 11 A7~A0

REAL 1 00 10xxxxxx

Page 14: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

7

指令說明

1. 讀取指令

當下達讀取指令後,位址經由解碼器選擇到相對的記憶體暫存器,其內容將被放

入 16 位元串列一位暫存器㆗,在每個 SK 的正緣信號,資料依序每次 1 個 Bit

由 D0 接腳輸出,且由最高位元 D15 先開始

2. 寫入致能指令

當資料要寫入 EEPROM 之前,必須先㆘達寫入致能,否則寫入無效,而一但下達

寫入致能指令之後,及變成寫入狀態,此時可用寫入指令將資料寫入 EEPROM

中,此狀態㆒直維持至㆘達寫入除能指令或電源消失為止.

3. 寫入指令

寫入指令會將 16Bit 的資料寫入指定位址中,當資料輸入完成之後,必須使 CS

為低電位(CS=0)置少 250ns,在使 CS 拉回高電位(CS=1),然後檢查 D0 腳, 當

D0=0 時,表示寫入動作未完成(Busy 狀態),當 D0=1 時,表示寫入動作完成

(Ready),寫入動作完成之後,必須下達寫入除能指令,以確保資料的安全性.

3. 寫入指令

寫入指令會將 16Bit 的資料寫入指定位址中,當資料輸入完成之後,必須使 CS

為低電位(CS=0)置少 250ns,在使 CS 拉回高電位(CS=1),然後檢查 D0 腳,當

D0=0 時,表示寫入動作未完成(Busy 狀態),當D0=1 時,表示寫入動作完成

(Ready),寫入動作完成之後,必須下達寫入除能指令,以確保資料的安全性.

4. 全部寫入指令

當下達全部寫入指令後,位於其後的 16 位元資料,會填入所有的記憶暫存器

中,即其內容皆相同,當資料輸入完成之後,必須使 CS 為低電位,置少

250ns,在使 CS 拉回高電位(CS=1),然後檢查 D0 腳,當 D0=0時,表示寫入動

作未完成(Busy 狀態),當 D0=1 時,表示寫入動作完成(Ready)

5. 寫入除能指令

當下達寫入除能指令之後,將禁止一切嘗試將資料寫入 EEPROM 的動作,以保持

其內部資料的完整性,不會被壞.

Page 15: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

8

6. 清除指令

如果要清除 EEPROM 記憶體暫存器中某一位址的資料時,可以使用清除指令,當

下達清除指令完成之後,必須使 CS 為低電位(CS=0)置少 250ns,在使 CS 拉回

高電位(CS=1),然後檢查 D0 腳,當 D0=0 時,表示寫入動作未完成(Busy 狀

態),當 D0=1 時,表示寫入動作完成(Ready).

7. 全部清除指令

當下達全部清除指令之後,所有的記憶體暫存內容皆變為高電位,此時同樣必須

使 CS 為低電位(CS=0)置少 250ns,在使 CS 拉回高電位(CS=1),然後檢查 D0

腳,當 D0=0 時,表示寫入動作未完成(Busy 狀態),當 D0=1 時,表示寫入動

作完成(Ready)

Page 16: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

9

第三章 LCD控制電路 LCD常見的型式有16x2、20x2、40x2等幾種規格,顯示器除了LCD板之外、還需

要控制電路和驅動電路、通常將其做成一塊模組(Module)簡稱LCM

圖 3.1 LCD接腳圖

P0

.7

P0

.0

P0

.6

LCM 16x2

1278910

11

12

13

14

3456

VC

CV

O

D0

D1

D2

D3

D4

D5

D6

D7

GN

D

RS

R/-

WE

P0

.5

P0

.3P

0.4

P0

.1P

0.2

+5V

P2

.7

LCD模組P2

.6P

2.5

Page 17: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

10

表 3.1 LCD接腳功能表

NO Symbol Function

1 GND 主電源 0V

2 VDD 接地端 5V

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

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

Page 18: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

11

3.1 LCD詳細功能與動作說明: LCD內部的旗號與暫存器

1. 忙碌旗號 Busy Flag(BF)

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

正在處理內部的工作,因此此時不可以寫資料給 LCD.當BF=0,表示 CPU 可以寫資

料給 LCD.當接腳 RS=0 且 R/W=1 時,忙碌旗雕的接腳會由 DB7 輸出.

2. 暫存器

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

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

用.

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

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

表 3.2 接腳控制指令表

的資料緩衝區.當單晶片寫到 DR 暫存器之後.LCD 內部的控制電路會將資料自

動寫到 DD RAM 或 CG RAM 中,而位址是由 LCD 內部的位址計數器(Address

Counter AC)所指定.而單晶片要讀取資料時,需先將欲讀取的位址放入 IR 暫存

器中, LCD 就會將其內容放入 DR 中,然後單晶片就可以去讀取 DR 的資料.

3. 位址計數器 AC

Page 19: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

12

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

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

存取之後,AC 便會自動加一(I/D=1)或減一(I/D=0).

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

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

型,由存放在 DD RAM 中的 ASCII 碼叫出來顯示.例如:’A’的字型碼為

01000001(即 41H)

5.自創字型產生器

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

組的 CG RAM 空間供人從放 user 自己設計的字,一個字要 8個位元組(5x7 點矩

陣),因此 64/8=8,做多可放 8 個新字元.要顯示自己的字元時,需先將 5X 點矩

陣圖形放入 CG RAM 中.而要叫出自元時,其字型碼為 00H~07H.

6. LCD 模組控制命令

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

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

6a 清除顯示 Clear Display

指令

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

RAM 的位址計數器 AC 為 00H,I/D 設為 1.

6b 游標歸位 Curse Home

指令

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

字,DD RAM 的位址計數器設為 00H.

6c 顯示 ON/OFF 控制(Display ON/OFF)

指令

Page 20: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

13

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

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

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

6d 游標移位控制指令

6e 功能設定 Function Set 指令

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

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

F:字型 Font 設定.

6f CG RAM 位址設定指令

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

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

RAM 中.

6g DD RAM 位址設定指令

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

DD RAM 中.

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

Page 21: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

14

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

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

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

6h 寫資料到 CG RAM 或 DD RAM 中指令

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

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

6i 自 CG RAM 或 DD RAM 中讀取資料指令

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

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

Page 22: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

15

表 3.3 LCD 控制指令整理表

Page 23: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

16

7 LCD 初始化副程式

LCM 作為顯示裝置之前,仍必須做適當的規劃程序,以方便顯示工作的進行,

規劃步驟如下

圖 3.2 LCD初始化步驟圖

Page 24: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

17

第四章 程式硬體敘述及電路圖

4.1 硬體架構說明

圖4.1 電子密碼保險箱整體硬體架構

整個系統的主體為 8051 單晶片,顯示是用文字型 LCD,輸入用 4X4 的鍵

盤.93C66 儲存密碼,也就是作為 8051 的外部資料記憶體,輸出結果部分,在

輸出端接一個直流馬達驅動門鎖,門打開時表示密碼正確。

8051

LCD 顯示

4X4 鍵盤 93C66儲存密碼

門保險箱

Page 25: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

18

C3

30PF

P0.4

P3.6

P1.6

P1.0

P3.1

P0.3

P0.6

P1.4P1.5

R810K

+5V

C2104

P3.3

P0.5

P1.2

P3.2

P2.6

P0.0

+5V

Y1

12MHZ

P0.7

P0.2

P2.4P2.3

P2.0

P2.7

P3.5

P3.7P1.1

P2.1

P1.7

P2.2

P2.5P3.4

P0.1

P1.3

C4

30PF

P3.0

+C510uF

U5

8051

31

19

18

9

12131415

12345678

3938373635343332

2122232425262728

171629301110

20

40

EA/VPP

XTAL1

XTAL2

RESET

P3.2_INT0P3.3_INT1P3.4_T0P3.5_T1

P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7

P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7

P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7

P3.7_RDP3.6_WR

PSENALE/PROG

P3.1_TXDP3.0_RXD

GND

VCC

圖 4.2 8051 主電路

+5V

P1.0

LCM 16x2

1278910

11

12

13

14

3456

GN

DV

CC

D0

D1

D2

D3

D4

D5

D6

D7

VC

RS

R/-

WE

LCD模組

P1.4

P1.5

P2.5

P1.6

P2.6

P1.2

P1.3

P2.7

P1.7

P1.1

圖 4.3 LCD電路

P2.0

+5V

P2.1

P2.2

P2.3

U6

93C66

1

2

3 4

58

CS

CLK

DI DO

GN

DV

CC

圖 4.4 93C66電路

Page 26: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

19

P3

.5

P3

.5

P3

.1

P3

.7

P3

.5

+5V

R7

10K

掃描鍵盤

P3

.7

P3

.6P

3.6

P3

.0

R5

10K

P3

.4

P3

.2

P3

.4

R6

10K

P3

.3

P3

.4

P3

.7

P3

.4

R4

10K

P3

.7

P3

.6

1 2 3 A

4 5 6 B

7 8 9 C

E 0 F D

1 82 3 4 5 6 7P

3.5

P3

.6

圖 4.5 掃描鍵盤

+12VJ1

POWER

1

23+12V

GND3

12V變壓器插座+5V

+C1

220uF/16V

U1

78M051

2

3VOUT

GN

D

VIN

圖 4.6 穩壓電路

R1

10K

+5V

MG1

3V

1 2

+12V

R2

10K

P0.1P0.2

U3

L293

27

1015

19

361114

168

451213

1A2A3A4A

1/2EN3/4EN

1Y2Y3Y4Y

VCC1VCC2

GNDGNDGNDGND

圖 4.7 馬達驅動電路

L293D 為馬達控制 IC:

1A接到 8051之 P0.1 腳

2A接到 8051之 P0.2 腳

控制馬達右轉、左轉的方法如下表所示

Page 27: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

20

執行< 開保險箱 >對策,即馬達右轉

控制訊號 CLR P0.1

SETB P0.2

執行< 上保險箱 >對策,即馬達左轉

控制訊號 SETB P0.1

CLR P0.2

SW2

data reset

1 2

P0.4

R9

10K

P0.3

SW1

微動開關

1 2

+5V

+5V

R1310K

圖 4.8 按鍵偵測電路

P2.4

R14

300

+5V

D1

LED

圖 4.9 LED電路

Page 28: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

21

第五章 程式流程圖及程式碼介紹

5.1 程式流程圖

圖 5.1 程式流程圖(開機)

Page 29: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

22

圖 5.2 程式流程圖(A)

Page 30: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

23

圖 5.3 程式流程圖(B)

Page 31: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

24

圖 5.4 程式流程圖(C)

Page 32: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

25

圖 5.5 程式流程圖(D)

Page 33: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

26

圖 5.6 程式流程圖(判斷密碼)

Page 34: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

27

圖 5.7 程式流程圖(判斷救密碼)

Page 35: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

28

5.2程式概述 因為程式十分的冗長,無法一一敘述,故只挑幾個初始化及重要的副程

式加以說明.

§初始化

第一行:為指定程式的起始位址,因為 8051 的程式是燒錄在 ROM 中,不像是一

般的 PC 乃是動態配置在 RAM,所以必須指定要放在 ROM 中的位址.

第二行:設定程式從何處開始執行

第三行:設定 Timer0 中斷程式的起始位置

第四行:Timer0 中斷發生後,到 Timer0 副程式執行.

§START

Page 36: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

29

首先,要先指定堆疊的區域,堆疊區的範圍是 00H~7FH,依程式使用量,

programer 可以自己設定,如上面是設定成 61H~7FH.再來,SK 清成電位,因為

這時 93C66 並沒有要動作.LED 燈,當作結果的輸出,這時先關閉(暗).ACALL

INIT,這道指令有點像是呼叫副程式,INIT 是初始化 LCD,SET0 是設定

TIMER0.ON 是顯示功能表,就像是按 HELP 鍵一樣.最後 SCAN,就是掃描鍵

盤,底下的程式碼就是等使用者按下按鍵,然後跳到對應的副程式.

F1:顯示時間

F2:調整時間

F3:輸入密碼

F4:設定密碼

§CONV

“START”還有一道指令呼叫”CONV”,是做時間的轉換,因為當時間資料放在

RAM 時,是將”分”當作一個數,存成一個 Byte,十位數的”分”放在高位元,個

位數的”分”放在低位元,(由另一個副程式”JUDGE”負責轉換),但是當要顯示在

LCD 時,則必須將十位數和各位數分開存放,而且在高位元處都必須設為

0011B(LCD 控制器的規定).所以這個副程式的功用就是將原本放在 30H 的資料,

Page 37: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

30

拆開分別放在 40H 和 41H

§SCAN

掃描鍵盤的副程式,掃描的原理是,從每行的接腳發出掃描信號,再從每列的接

腳接收.將結果放在 R5 暫存器.首先,先將暫存器 5 清空.暫存器 7 放 4(因為鍵盤

為 4X4),R6 放 11111110B,再將 R6 的值指給埠 3,以位元定址法,所以此時

P3.0 為低電位(發出信號給第一行),其餘 Bits 為高電位.再來,從第 6 行開始,接

收掃描結果.以埠 P3.4 接收訊號(第一列的信號).若為 1,表示鍵盤的第一行第一列

沒被按下.跳到 S1,接收下一列信號.若為 0,表示按鍵被按下,執行 JNB P3.4 $此

行為去彈跳,但是後來覺得不夠,所以又增加 delay 18ms.

SET0

SET0 為對 TIMER0 初始化.首先,因為用的 12MHz 的石英震盪器,所以每個

clock 的長度是:1/(12MHx/12)=1/1MHz= „1us‟,所以讓它每經過 10000 個 clock 中

斷一次,每中斷 100 次(剛好一秒),秒數加 1. 第二行為設定 Timer0 的工作模式

為 mode 1,也就是使用 TH0,TH1 共 16Bits 作為計時器.04,05 行,設定計時器

Page 38: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

31

的初始值,因為使用 16Bits 計時器 65536=216,減掉 10000.表示從計時器從

65536-10000=55536 開始數,當計時器超過 65536(加了 10000 次),發生溢位,

TR0 設為 1.即發生中斷.06 行,設定溢位旗標.TIMER0 開始動作.

§將資料 show 在 LCD

以 F1(顯示時間)當作範例

06 的指令就是 show 出資料,這裡要顯示的是”TIME”,共 4 個 char,所以 04 行

CNT 設為 4,但是在寫入資料給 LCD 之前,要先給指令給 LCD,(在 03

行).W_INS 的程式碼如下

Page 39: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

32

在呼叫 W_INS 之前,先將指令存入暫存 A 中.再來 02 行為檢查 LCD 忙碌旗標,

若 LCD 仍在忙碌,要先 delay 6ms.然後 RS=0,RW=0,EN=1,準備輸入指令(參

見第四章).最後指令寫入完成,EN(模組致能腳)恢復為 0.

§JUDGE

JUDGE 調整‟時‟,‟分‟,‟秒‟.在每次 TIMER0 中斷發生時,都會被執行一次,因

為每次中斷發生,時間就會加 1 秒.此副程式的功用即在於調整時間,免的出現時

>24,分 or 秒>60 的情況程式碼如下

首先,先將秒的資料從位址 32H,的地方拿出來,加一秒,然後轉成十位數再高

四位元,個位數在低四位元.06 為比較秒數是否達 60,若否,則時及分也不會改

變,所以就可以跳到 FIX 離開此副程式,否則要接下去做,將分的資料從位址

31H 除取出,加一……如同秒的處理方式,接下來的時也是如此.

Page 40: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

33

§自 93C66 讀取資料,比對密碼

只有當 SETF3,也就是輸入密碼完之後,才要將 93C66 中的密碼拿出來比對,下

面是 SETF3 的 code. F0,是判斷密碼是否正確的旗標,F0=0 表示 error.呼叫

R_CODE,將93C66 的密碼讀入 8051 的位址 54H.然在和使用者輸入的密碼(存在

位址 50H)比較,一個字元一個字元比較,共四次(R2=4).R_CODE 的程式碼如下:

02 這行,將 ADDR 設為 0,表示要從外部資料記憶體的位址 00H 處開始讀資

Page 41: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

34

料.03 行表示將資料存在 8051 的內部記憶體位址 54H 處.R1 設為 2,因為要讀 16

位元的資料 2 次(16X2=32 共四個 char).然後 call 副程式 READ 讀取.程式碼如下.

R6 設為 00000110B,後面 110 是 93C66 指令的前 3 個 Bits,因為後面 8 個 Bits

要接位址,所以要先左移,將位址從 R6 的尾端補進來(從 R7,而 R7 是從 ADDR

得到位址),SHIFT5,表示將 110 移到最前面.但是 93C66 的指令為 11Bits,目前

R6 只能放 8Bits,剩下 3 個還在 R7,等一下每寫一個 Bit 的指令進去,R7 再從後

面補進來.CNT=11,即指令有 11Bits.

延續上面,因為 93C66 為串列輸出/輸入,所以一次只能輸入 1Bit.設定 SK=1,給

它一個 clock,才會讀資料.此時 8051 則是執行 NOP,也就是什麼都不做,等待

93C66 完成.當 11Bits 都讀完後.93C66 隨即開始將 Memory中的密碼送到它的

DO,資料輸出腳.所以呼叫 R_DATA. R_DATA 和上述副程式類似,只不過反過

來將資料從 DO 讀到暫存器 C,故不再詳述.

Page 42: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

35

5.3 詳細程式碼: EN REG P2.7 ;LCD 控制腳

RW REG P2.6 ;LCD 控制腳

RS REG P2.5 ;LCD 控制腳

SW REG P2.4 ;LED 燈

CS REG P2.3 ;93c66 控制腳

SK REG P2.2 ;93c66 控制腳

DI REG P2.1 ;93c66 控制腳

DO REG P2.0 ;93c66 控制腳

ADDR EQU 37H

CNT EQU 38H

SEC EQU 39H

ORG 00H ;設定程式開頭位置

AJMP START

ORG 0BH ;設定 Timer 0 中斷程式起始位置

AJMP TIMER0 ;中斷發生後,到 Timer 0 副程式執行

;----- -

; MAIN

;----- -

START: MOV SP,#60H

MOV 4FH,#1 ;為 0 時,表示已上鎖,為 1 未上鎖

CLR SK ;93c66 除能,不動作

SETB SW ;LED 燈暗

ACALL INIT ;呼叫 LCD 初始化副程式

ACALL SET0 ;設定 TIMER 0

L0: ACALL ON ;顯示功能表副程式

Page 43: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

36

L1: ACALL CONV ;呼叫時間轉換副程式

MOV A,4FH

CJNE A,#1,L11

L1W:

JB P0.4,L111

CLR P0.1

SETB P0.2

CALL DELAY1S

CLR P0.1

CLR P0.2

CALL DELAY1S

ACALL LOCKED

CALL DELAY5S

ACALL ON ;顯示功能表副程式

MOV 4FH,#0

SETB SW ;LED 燈暗

JMP L11

L111:

CLR SW ;LED 燈亮

CALL UNLOCK

JMP L1W

L11:

JB P0.3,F11_0 ;是否按下 RESET 鍵,是則往下程式,否則跳 F11_0

L1_2: ACALL DELAY

JNB P0.3,L1_2 ;等待放開按鍵

AJMP F00 ;跳至設定切值

F11_0:

ACALL SCAN ;呼叫掃描鍵盤副程式

MOV A,R5 ;R5 為掃描值,用來判斷使用者按何鍵

CJNE A,#BH,L2 ;按下 E 鍵,是則往下,否則跳 L2

Page 44: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

37

AJMP HELP

L2: CJNE A,#CH,L3 ;按下 A 鍵,是則往下,否則跳 L3

AJMP F1

L3: CJNE A,#DH,L4 ;按下 B 鍵,是則往下,否則跳 L4

AJMP F2

L4: CJNE A,#EH,L5 ;按下 C 鍵,是則往下,否則跳 L5

AJMP F3

L5: CJNE A,#FH,L1 ;按下 D 鍵,是則往下,否則跳 L1

AJMP F4

;----- -

; HELP

;----- -

HELP:

SJMP L0

;----

; F1 ;顯示時間

;----

F1:

ACALL CLRLCD ;清除 LCD

MOV A,#86H ;顯示在 LCD 第 1 行第 7 字

ACALL W_INS ;傳指令至 LCD

MOV CNT,#4 ;CNT 設為 4

MOV DPTR,#MSG3 ;'TIME'

ACALL W_STR ;傳字串至 LCD SHOW 出資料

F11: ACALL CONV ;BCD TO ASCII

MOV A,#C4H ;顯示在 LCD 第 2 行第 5 字

ACALL W_INS ;傳指令至 LCD

ACALL DISP ;LCD DISPLAY DATA

ACALL SCAN ;呼叫掃描鍵盤副程式

MOV A,R5 ;R5 為掃描值,用來判斷使用者按何鍵

Page 45: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

38

CJNE A,#BH,F12 ;按下 E 鍵,是則往下,否則跳 F12

AJMP HELP

F12: CJNE A,#DH,F13 ;按下 B 鍵,是則往下,否則跳 F13

AJMP F2

F13: CJNE A,#EH,F14 ;按下 C 鍵,是則往下,否則跳 F14

AJMP F3

F14: CJNE A,#FH,F11 ;按下 D 鍵,是則往下,否則跳 F11

AJMP F4

;----

; F2 ;調整時間

;----

F2:

ACALL CLRLCD

MOV R0,#48H ;INPUT BUFFER

MOV A,#82H ;顯示在 LCD 第 1 行第 3 字

ACALL W_INS ;傳指令至 LCD

MOV CNT,#11

MOV DPTR,#MSG4 ;ADJUST TIME

ACALL W_STR ;傳字串至 LCD SHOW 出資料

MOV A,#C6H ;顯示在 LCD 第 2 行第 7 字

ACALL W_INS ;傳指令至 LCD

MOV A,#':'

ACALL W_DATA ;傳單字至 LCD SHOW 出資料

MOV A,#C9H ;顯示在 LCD 第 2 行第 10 字

ACALL W_INS ;傳指令至 LCD

MOV A,#':'

ACALL W_DATA ;傳單字至 LCD SHOW 出資料

MOV A,#C4H ;顯示在 LCD 第 2 行第 5 字

ACALL W_INS ;傳指令至 LCD

Page 46: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

39

F21: ACALL SCAN ;呼叫掃描鍵盤副程式

MOV A,R5 ;R5 為掃描值,用來判斷使用者按何鍵

XRL A,#16 ;若掃描值等於 16 不動作

JZ F21

MOV A,R5

CJNE A,#AH,F22 ;按下 F 鍵,是則往下,否則跳 F22

AJMP SETF2 ;跳至 SETF2

F22: CJNE A,#BH,F23 ;按下 E 鍵,是則往下,否則跳 F23

AJMP HELP

F23: CJNE A,#CH,F24 ;按下 A 鍵,是則往下,否則跳 F24

AJMP F1

F24: CJNE A,#DH,F25 ;按下 B 鍵,是則往下,否則跳 F25

AJMP F21

F25: CJNE A,#EH,F26 ;按下 C 鍵,是則往下,否則跳 F26

AJMP F3

F26: CJNE A,#FH,F27 ;按下 D 鍵,是則往下,否則跳 F27

AJMP F4

F27: MOV A,R5

MOV @R0,A ;將掃描值存入 R0 所指向的暫存器位置

ORL A,#30H ;將掃描值轉成 ASCII 碼

ACALL W_DATA ;傳單字至 LCD SHOW 出資料

INC R0 ;R0 指向加 1

CJNE R0,#4AH,F27_0 ;6 組字元 時時、分分、秒秒

MOV A,#C7H ;顯示在 LCD 第 2 行第 8 字

ACALL W_INS ;傳指令至 LCD

F27_0:

CJNE R0,#4CH,F27_1 ;6 組字元 時時、分分、秒秒

MOV A,#CAH ;顯示在 LCD 第 2 行第 11 字

ACALL W_INS ;傳指令至 LCD

Page 47: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

40

F27_1:

CJNE R0,#4EH,F28 ;6 組字元 時時、分分、秒秒

MOV R0,#48H ;R0 指向=48H

MOV A,#C4H ;顯示在 LCD 第 2 行第 5 字

ACALL W_INS ;傳指令至 LCD

F28: SJMP F21

;----- ---

; F2-SET

;----- ---

SETF2: MOV R2,#3 ;R2 計數,時、分、秒 3 次

MOV R0,#48H ;R0 指向=48H

MOV R1,#33H ;R1 指向=33H

T1: MOV A,@R0 ;取出 R0 所指向位置的資料

ANL A,#0FH ;取低四位元

SWAP A ;高低四位元交換

INC R0 ;R0 指向+1

ADD A,@R0 ;再加到 A

MOV @R1,A ;再將 A 存到 R1 指向之位置

INC R0 ;R0 指向+1

INC R1 ;R1 指向+1

DJNZ R2,T1 ;3 次到?到了往下行,否則跳 T1

MOV R0,#30H ;R0,目前時間值

MOV R1,#33H ;R1,設定時間位

MOV A,@R1

CLR C

SUBB A,#24H ;判斷設定時值>24?是則不存入 30H

JNC T2 ;否則存入 30H

MOV A,@R1

Page 48: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

41

MOV @R0,A

INC R0

INC R1

MOV A,@R1

CLR C

SUBB A,#60H ;判斷設定分值>60?是則不存入 31H

JNC T2 ;否則存入 31H

MOV A,@R1

MOV @R0,A

INC R0

INC R1

MOV A,@R1

CLR C

SUBB A,#60H ;判斷設定秒值>60?是則不存入 32H

JNC T2 ;否則存入 32H

MOV A,@R1

MOV @R0,A

T2: AJMP F1

;----

; F3 ;輸入密碼

;----

F3:

ACALL CLRLCD ;清除 LCD

MOV A,#83H ;顯示在 LCD 第 1 行第 4 字

ACALL W_INS ;傳指令至 LCD

MOV CNT,#11 ;字數 11 個字

MOV DPTR,#MSG5 ;INPUT CODE1

ACALL W_STR ;傳字串至 LCD SHOW 出資料

MOV A,#C6H ;顯示在 LCD 第 2 行第 7 字

ACALL W_INS ;傳指令至 LCD

MOV R0,#50H ;R0 指向=50H

Page 49: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

42

F31: ACALL SCAN ;呼叫掃描鍵盤副程式

MOV A,R5 ;R5 為掃描值,用來判斷使用者按何鍵

XRL A,#16 ;若掃描值等於 16 不動作

JZ F31

MOV A,R5

CJNE A,#AH,F32 ;按下 F 鍵,是則往下,否則跳 F32

AJMP SETF3

F32: CJNE A,#BH,F33 ;按下 E 鍵,是則往下,否則跳 F33

AJMP HELP

F33: CJNE A,#CH,F34 ;按下 A 鍵,是則往下,否則跳 F34

AJMP F1

F34: CJNE A,#DH,F35 ;按下 B 鍵,是則往下,否則跳 F35

AJMP F2

F35: CJNE A,#EH,F36 ;按下 C 鍵,是則往下,否則跳 F36

AJMP F31

F36: CJNE A,#FH,F37 ;按下 D 鍵,是則往下,否則跳 F37

AJMP F4

F37: MOV A,R5

MOV @R0,A ;將掃描值存入 R0 所指向的暫存器位置

ORL A,#30H ;將掃描值轉成 ASCII 碼

ACALL W_DATA ;傳單字至 LCD SHOW 出資料

INC R0 ;R0 指向+1

CJNE R0,#54H,F38 ;R0 指向=54H?不是則跳 F38,是則往下

MOV R0,#50H ;R0 指向=50H

MOV A,#C6H ;顯示在 LCD 第 2 行第 7 字

ACALL W_INS ;傳指令至 LCD

F38: SJMP F31

;----- ---

; F3-SET

;----- ---

SETF3: CLR F0 ;F0 為判斷密碼是否正確旗標,F0=0 表 ERROR

Page 50: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

43

ACALL R_CODE ;將 93c66 密碼讀入 8051 的位置 54H

MOV R2,#4 ;4 位密碼

MOV R0,#50H ;R0 指向,使用者輸入的密碼 50H

MOV R1,#54H ;R1 指向,93c66 密碼 54H

C1: MOV A,@R0

XRL A,@R1 ;

JNZ C2 ;不規則跳 C2

INC R0

INC R1

DJNZ R2,C1

SETB F0 ;CODE EXACT

C2: MOV A,#C6H ;顯示在 LCD 第 2 行第 7 字

ACALL W_INS ;傳指令至 LCD

MOV DPTR,#MSG6 ;MSG6='EXACT'

JB F0,C3

MOV DPTR,#MSG7 ;MSG7='ERROR'

MOV CNT,#5

ACALL W_STR ;傳字串至 LCD SHOW 出資料

CALL DELAY5S

JMP L0

C3: MOV CNT,#5

ACALL W_STR ;傳字串至 LCD SHOW 出資料

;----

; FS ;輸入密碼 2

;----

FS:

ACALL CLRLCD ;清除 LCD

MOV A,#83H ;顯示在 LCD 第 1 行第 4 字

ACALL W_INS ;傳指令至 LCD

Page 51: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

44

MOV CNT,#11 ;字數 11 個字

MOV DPTR,#MSG52 ;INPUT CODE2

ACALL W_STR ;傳字串至 LCD SHOW 出資料

MOV A,#C6H ;顯示在 LCD 第 2 行第 7 字

ACALL W_INS ;傳指令至 LCD

MOV R0,#58H ;R0 指向=50H

FS1: ACALL SCAN ;呼叫掃描鍵盤副程式

MOV A,R5 ;R5 為掃描值,用來判斷使用者按何鍵

XRL A,#16 ;若掃描值等於 16 不動作

JZ FS1

MOV A,R5

CJNE A,#AH,FS2 ;按下 F 鍵,是則往下,否則跳 F32

AJMP SETFS

FS2: CJNE A,#BH,FS3 ;按下 E 鍵,是則往下,否則跳 F33

AJMP HELP

FS3: CJNE A,#CH,FS4 ;按下 A 鍵,是則往下,否則跳 F34

AJMP F1

FS4: CJNE A,#DH,FS5 ;按下 B 鍵,是則往下,否則跳 F35

AJMP F2

FS5: CJNE A,#EH,FS6 ;按下 C 鍵,是則往下,否則跳 F36

AJMP F31

FS6: CJNE A,#FH,FS7 ;按下 D 鍵,是則往下,否則跳 F37

AJMP F4

FS7: MOV A,R5

MOV @R0,A ;將掃描值存入 R0 所指向的暫存器位置

ORL A,#30H ;將掃描值轉成 ASCII 碼

ACALL W_DATA ;傳單字至 LCD SHOW 出資料

INC R0 ;R0 指向+1

CJNE R0,#5CH,FS8 ;R0 指向=5CH?不是則跳 FS8,是則往下

MOV R0,#58H ;R0 指向=58H

MOV A,#C6H ;顯示在 LCD 第 2 行第 7 字

Page 52: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

45

ACALL W_INS ;傳指令至 LCD

FS8: SJMP FS1

SETFS: CLR F0 ;F0 為判斷密碼是否正確旗標,F0=0 表 ERROR

ACALL R_CODE2 ;將 93c66 密碼讀入 8051 的位置 5CH

MOV R2,#4 ;4 位密碼

MOV R0,#58H ;R0 指向,使用者輸入的密碼 58H

MOV R1,#5CH ;R1 指向,93c66 密碼 5CH

CS1:

MOV A,@R0

XRL A,@R1 ;比對密碼,58H 比 5CH,59H 比 5DH,5AH 比

5EH,

5BH 比 5FH

JNZ CS2 ;不規則跳 CS2

INC R0

INC R1

DJNZ R2,CS1

SETB F0 ;CODE EXACT

CS2: MOV A,#C6H ;顯示在 LCD 第 2 行第 7 字

ACALL W_INS ;傳指令至 LCD

MOV DPTR,#MSG6 ;MSG6='EXACT'

JB F0,CS3

MOV DPTR,#MSG7 ;MSG7='ERROR'

MOV CNT,#5

ACALL W_STR ;傳字串至 LCD SHOW 出資料

CALL DELAY5S

JMP L0

CS3: MOV CNT,#5

ACALL W_STR ;傳字串至 LCD SHOW 出資料

Page 53: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

46

CLR SW ;LED 燈亮

CLR P0.2

SETB P0.1

CALL DELAY1S

CLR P0.1

CLR P0.2

CALL DELAY1S

MOV 4FH,#1

CALL DELAY5S

JMP L0

;----

; F4 ;設定密碼

;----

F4:

ACALL CLRLCD ;清除 LCD

MOV A,#80H ;顯示在 LCD 第 1 行第 4 字

ACALL W_INS ;傳指令至 LCD

MOV CNT,#16

MOV DPTR,#MSGF ;CODE1 or CODE2?

ACALL W_STR ;傳字串至 LCD SHOW 出資料

COD:

ACALL SCAN ;呼叫掃描鍵盤副程式

MOV A,R5 ;R5 為掃描值,用來判斷使用者按何鍵

CJNE A,#01H,COD1

MOV 3AH,#50H ;50H 存到 3AH 裡

MOV 3BH,#54H ;54H 存到 3BH 裡

MOV 3CH,#58H

JMP SETCOD

COD1: CJNE A,#02H,COD2

MOV 3AH,#58H ;58H 存到 3AH 裡

MOV 3BH,#5CH ;5CH 存到 3BH 裡

MOV 3CH,#60H

Page 54: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

47

JMP SETCOD

COD2:

JMP COD

SETCOD:

ACALL CLRLCD ;清除 LCD

MOV A,#83H ;顯示在 LCD 第 1 行第 4 字

ACALL W_INS ;傳指令至 LCD

MOV CNT,#10

MOV DPTR,#MSGA ;PASS WORD?

ACALL W_STR ;傳字串至 LCD SHOW 出資料

MOV A,#C6H ;顯示在 LCD 第 2 行第 7 字

ACALL W_INS ;傳指令至 LCD

MOV R0,3AH ;R0 指向 3AH 裡面的值

F51: ACALL SCAN ;呼叫掃描鍵盤副程式

MOV A,R5 ;R5 為掃描值,用來判斷使用者按何鍵

XRL A,#16 ;若掃描值等於 16 不動作

JZ F51

MOV A,R5

CJNE A,#AH,F52 ;按下 F 鍵,是則往下,否則跳 F52

AJMP SETF5

F52: CJNE A,#BH,F53 ;按下 E 鍵,是則往下,否則跳 F53

AJMP HELP

F53: CJNE A,#CH,F54 ;按下 A 鍵,是則往下,否則跳 F54

AJMP F1

F54: CJNE A,#DH,F55 ;按下 B 鍵,是則往下,否則跳 F55

AJMP F2

F55: CJNE A,#EH,F56 ;按下 C 鍵,是則往下,否則跳 F56

AJMP F3

F56: CJNE A,#FH,F57 ;按下 D 鍵,是則往下,否則跳 F57

AJMP F4

F57: MOV A,R5

Page 55: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

48

MOV @R0,A ;將掃描值存入 R0 所指向的暫存器位置

ORL A,#30H ;將掃描值轉成 ASCII 碼

ACALL W_DATA ;傳單字至 LCD SHOW 出資料

INC R0

MOV A,R0

CJNE A,3BH,F58

MOV R0,3AH

MOV A,#C6H ;顯示在 LCD 第 2 行第 7 字

ACALL W_INS ;傳指令至 LCD

F58: SJMP F51

;----- ---

; F5-SET

;----- ---

SETF5: CLR F0 ;F0 為判斷密碼是否正確旗標,F0=0 表 ERROR

MOV A,3AH

CJNE A,#50H,CC0

ACALL R_CODE ;將密碼資料寫入 93C66

JMP CCC0

CC0:

ACALL R_CODE2 ;將 93c66 密碼讀入 8051 的位置 54H

CCC0:

MOV R2,#4 ;4 位密碼

MOV R0,3AH ;使用者輸入的密碼 50H

MOV R1,3BH ;93c66 密碼 54H

CC1: MOV A,@R0

XRL A,@R1 ;比對密碼,50H 比 54H,51H 比 55H,52H 比 56H,

53H 比 57H

JNZ CC2 ;不規則跳 C2

INC R0 ;R0 指向+1

INC R1 ;R1 指向+1

DJNZ R2,CC1

JMP F40

Page 56: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

49

CC2:

ACALL CLRLCD ;清 LCD

MOV A,#C6H ;顯示在 LCD 第 2 行第 7 字

ACALL W_INS ;傳指令至 LCD

MOV DPTR,#MSG7 ;MSG7='ERROR'

MOV CNT,#5

ACALL W_STR ;傳字串至 LCD SHOW 出資料

ACALL DELAY1S

JMP F4

F40:

ACALL CLRLCD ;清 LCD

MOV A,#84H ;顯示在 LCD 第 1 行第 5 字

ACALL W_INS ;傳指令至 LCD

MOV CNT,#9 ;顯示 8 個字

MOV A,3AH

CJNE A,#50H,F4B

MOV DPTR,#MSG8 ;SET CODE1

JMP F4C

F4B:

MOV DPTR,#MSG82 ;SET CODE2

F4C:

ACALL W_STR ;傳字串至 LCD SHOW 出資料

MOV A,#C6H ;顯示在 LCD 第 2 行第 7 字

MOV R0,3BH ;R0=54H

ACALL W_INS ;傳指令至 LCD

F41: ACALL SCAN ;呼叫掃描鍵盤副程式

MOV A,R5 ;R5 為掃描值,用來判斷使用者按何鍵

XRL A,#16 ;若掃描值等於 16 不動作

JZ F41

MOV A,R5

CJNE A,#AH,F42 ;按下 F 鍵,是則往下,否則跳 F42

AJMP SETF4

Page 57: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

50

F42: CJNE A,#BH,F43 ;按下 E 鍵,是則往下,否則跳 F43

AJMP HELP

F43: CJNE A,#CH,F44 ;按下 A 鍵,是則往下,否則跳 F44

AJMP F1

F44: CJNE A,#DH,F45 ;按下 B 鍵,是則往下,否則跳 F45

AJMP F2

F45: CJNE A,#EH,F46 ;按下 C 鍵,是則往下,否則跳 F46

AJMP F3

F46: CJNE A,#FH,F47 ;按下 D 鍵,是則往下,否則跳 F47

AJMP F4

F47: MOV A,R5

MOV @R0,A ;將掃描值存入 R0 所指向的暫存器位置

ADD A,#30H ;將掃描值轉成 ASCII 碼

ACALL W_DATA ;傳單字至 LCD SHOW 出資料

INC R0 ;R0 指向+1

MOV A,R0

CJNE A,3CH,F48

MOV R0,3BH

MOV A,#C6H ;顯示在 LCD 第 2 行第 7 字

ACALL W_INS ;傳指令至 LCD

F48: SJMP F41

;----- ---

; F4-SET

;----- ---

SETF4:

MOV A,3AH

CJNE A,#50H,ST4B

ACALL W_CODE ;將密碼資料寫入 93C66

JMP ST4C

ST4B:

ACALL W_CODE2 ;將密碼資料寫入 93C66

ST4C:

Page 58: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

51

ACALL CLRLCD ;清 LCD

MOV A,#84H ;顯示在 LCD 第 1 行第 5 字

ACALL W_INS ;傳指令至 LCD

MOV CNT,#8

MOV DPTR,#MSG9 ;SUCCESS!

ACALL W_STR ;傳字串至 LCD SHOW 出資料

CALL DELAY5S

JMP L0

;----- --- --

; SCAN KEY

;----- --- --

SCAN: MOV R4,#00H ;清除 R4,R4 存放掃描按鍵值

MOV R7,#4 ;R7 設定為 4,掃描 4 次 P3.0~P3.3

MOV R6,#11111110B ;從 P3.0 開始掃瞄

COL: MOV A,R6

MOV P3,A

JB P3.4,S1 ;無按鍵(1)~S1,有按鍵(0)往下執行

JNB P3.4,$ ;消除彈跳誤動作,即按鍵(0)等待放開按鍵(1)往下執行

ACALL DELAY

ACALL DELAY

ACALL DELAY

SJMP S5 ;First Line

S1: INC R4

JB P3.5,S2

JNB P3.5,$ ;DEBOUNCE

ACALL DELAY

ACALL DELAY

ACALL DELAY

SJMP S5 ;Second Line

S2: INC R4

JB P3.6,S3

JNB P3.6,$

ACALL DELAY

Page 59: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

52

ACALL DELAY

ACALL DELAY

SJMP S5 ;Third Line

S3: INC R4

JB P3.7,S4

JNB P3.7,$

ACALL DELAY

ACALL DELAY

ACALL DELAY

SJMP S5 ;Fouth Line

S4: INC R4

MOV A,R6

RL A ;換 P3.1 列開始掃描

MOV R6,A

DJNZ R7,COL

S5: CJNE R4,#00H,S6

MOV R5,#01H

RET

S6: CJNE R4,#01H,S7

MOV R5,#04H

RET

S7: CJNE R4,#02H,S8

MOV R5,#07H

RET

S8: CJNE R4,#03H,S9

MOV R5,#0AH

RET

S9: CJNE R4,#04H,SA

MOV R5,#02H

RET

SA: CJNE R4,#05H,SB

MOV R5,#05H

RET

Page 60: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

53

SB: CJNE R4,#06H,SC

MOV R5,#08H

RET

SC: CJNE R4,#07H,SD

MOV R5,#00H

RET

SD: CJNE R4,#08H,SE

MOV R5,#03H

RET

SE: CJNE R4,#09H,SF

MOV R5,#06H

RET

SF: CJNE R4,#0AH,SG

MOV R5,#09H

RET

SG: CJNE R4,#0BH,SOK

MOV R5,#0BH

RET

SOK: MOV A,R4

MOV R5,A

RET

;----- --- --

; POWER ON

;----- --- --

ON: PUSH A

MOV A,#80H ;顯示在 LCD 第 1 行第 1 字

ACALL W_INS ;傳指令至 LCD

MOV CNT,#16

MOV DPTR,#MSG1 ;F1:TIME F2:ADJ

ACALL W_STR ;傳字串至 LCD SHOW 出資料

MOV A,#C0H ;顯示在 LCD 第 2 行第 1 字

ACALL W_INS ;傳指令至 LCD

Page 61: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

54

MOV CNT,#16

MOV DPTR,#MSG2 ;F3:INPUT F4:SET

ACALL W_STR ;傳字串至 LCD SHOW 出資料

POP A

SETB SW

RET

LOCKED:

MOV A,#80H ;顯示在 LCD 第 1 行第 1 字

ACALL W_INS ;傳指令至 LCD

MOV CNT,#16

MOV DPTR,#MSGD ;F1:TIME F2:ADJ

ACALL W_STR ;傳字串至 LCD SHOW 出資料

MOV A,#C0H ;顯示在 LCD 第 2 行第 1 字

ACALL W_INS ;傳指令至 LCD

MOV CNT,#16

MOV DPTR,#MSGE ;F3:INPUT F4:SET

ACALL W_STR ;傳字串至 LCD SHOW 出資料

RET

UNLOCK:

MOV A,#80H ;顯示在 LCD 第 1 行第 1 字

ACALL W_INS ;傳指令至 LCD

MOV CNT,#16

MOV DPTR,#MSGC ;F1:TIME F2:ADJ

ACALL W_STR ;傳字串至 LCD SHOW 出資料

MOV A,#C0H ;顯示在 LCD 第 2 行第 1 字

ACALL W_INS ;傳指令至 LCD

MOV CNT,#16

MOV DPTR,#MSGE ;F3:INPUT F4:SET

ACALL W_STR ;傳字串至 LCD SHOW 出資料

SET0:

MOV SEC,#100 ;100*10000=1000000us=1s

Page 62: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

55

MOV TMOD,#01H ;設定 TIMER O 工作模式 1

MOV IE,#10000010B

MOV TH0,#>(65536-10000)

MOV TL0,#<(65536-10000)

SETB TR0 ;開始中斷從 55536 開始數到 65536(10000 次)發生溢位

RET

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

; INIT RAM & LCD

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

INIT: MOV R0,#6

MOV R1,#30H

CLR A

NEXT0: MOV @R1,A

INC R1

DJNZ R0,NEXT0

MOV R0,#14

MOV R1,#40H

CLR A

NEXT1: MOV @R1,A

INC R1

DJNZ R0,NEXT1

MOV A,#38H

ACALL W_INS ;傳指令至 LCD

MOV A,#38H

ACALL W_INS ;傳指令至 LCD

MOV A,#38H

ACALL W_INS ;傳指令至 LCD

MOV A,#38H

ACALL W_INS ;傳指令至 LCD

MOV A,#08H ;FUNCTION SET

ACALL W_INS ;傳指令至 LCD

MOV A,#01H ;CLEAR DISPLAY

ACALL W_INS ;傳指令至 LCD

Page 63: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

56

MOV A,#06H ;INPUT MODE SET

ACALL W_INS ;傳指令至 LCD

MOV A,#0CH ;DISPLAY ON/OFF

ACALL W_INS ;傳指令至 LCD

RET

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

; CLEAR LCD

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

CLRLCD: MOV A,#01H

ACALL W_INS ;傳指令至 LCD

RET

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

; BCD TO ASCII

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

CONV: MOV A,#30H ;以下為轉換時值成 ASCII 值,ASCII為 LCD 所

顯示的值

MOV R0,A

MOV A,@R0

SWAP A

ANL A,#0FH

ADD A,#30H

MOV 40H,A

MOV A,@R0

ANL A,#0FH

ADD A,#30H

MOV 41H,A ;轉換時值完成

MOV 42H,#":"

INC R0

MOV A,@R0

SWAP A

ANL A,#0FH

ADD A,#30H

Page 64: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

57

MOV 43H,A

MOV A,@R0

ANL A,#0FH

ADD A,#30H

MOV 44H,A ;轉換分值完成

MOV 45H,#":"

INC R0

MOV A,@R0 ;以下當轉換秒值或 ASCII 值,ASCII為 LCD 可顯示

的值

SWAP A

ANL A,#0FH

ADD A,#30H

MOV 46H,A

MOV A,@R0

ANL A,#0FH

ADD A,#30H

MOV 47H,A ;轉換秒值完成

RET

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

; DISPLAY TIME

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

DISP: MOV R1,#8

MOV R0,#40H

DSP: MOV A,@R0

ACALL W_DATA ;傳單字至 LCD SHOW 出資料

INC R0

DJNZ R1,DSP

RET

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

; WRITE STRING TO LCD

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

W_STR: PUSH A

MOV R5,#0

Page 65: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

58

STR: MOV A,R5

MOVC A,@A+DPTR

ACALL W_DATA ;傳單字至 LCD SHOW 出資料

INC R5

DJNZ CNT,STR

POP A

RET

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

; WRITE INS TO LCD

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

W_INS: PUSH A

ACALL CHECK

CLR RS

CLR RW

SETB EN

MOV P1,A

CLR EN

POP A

RET

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

; WRITE DATA TO LCD

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

W_DATA: PUSH A

ACALL CHECK

SETB RS

CLR RW

SETB EN

MOV P1,A

CLR EN

POP A

RET

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

; CHECK LC D BUSY

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

Page 66: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

59

CHECK: PUSH A

BUSY: CLR RS

SETB RW

SETB EN

MOV A,P1

CLR EN

JB ACC.7,BUSY

ACALL DELAY

POP A

RET

;----- --

; DELAY

;----- --

DELAY: MOV R6,#20

D1: MOV R7,#150

DJNZ R7,$

DJNZ R6,D1

RET

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

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

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

DELAY1S: MOV R5,#5

DL0: MOV R6,#150

DL1: MOV R7,#100

DL2: DJNZ R7,DL2

DJNZ R6,DL1

DJNZ R5,DL0

RET

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

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

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

DELAY5S: MOV R5,#20

Page 67: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

60

DLL0: MOV R6,#200

DLL1: MOV R7,#200

DLL2: DJNZ R7,DLL2

DJNZ R6,DLL1

DJNZ R5,DLL0

RET

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

; JUDGE H/M/S

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

JUDGE: PUSH A ;取出存放在 32H 的秒值

MOV A,32H

ADD A,#1

DA A ;秒值加 1 並轉成十進位

MOV 32H,A ;存放秒值於 32H

CJNE A,#60H,FIX ;判斷秒值,60 秒往下,否則跳至 FIX

MOV 32H,#00 ;秒歸零

MOV A,31H ;取出存放在 31H 的分值

ADD A,#1

DA A ;分值加 1,並轉成十進位

MOV 31H,A

CJNE A,#60H,FIX ;判斷分值,60 分往下,否則跳至 FIX

MOV 31H,#00 ;分值歸零

MOV A,30H ;取出存放在 30H 的時值

ADD A,#1

DA A ;時值加 1 並轉成十進位

MOV 30H,A ;存放時值於 30H

CJNE A,#24H,FIX ;判斷時值,24 時往下,否則跳至 FIX

MOV 30H,#00 ;時值歸零

FIX: POP A

RET

;----- ---

; TIMER0

Page 68: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

61

;----- ---

TIMER0: PUSH A ;TIMER 1 SEC

MOV TH0,#>(65536-10000)

MOV TL0,#<(65536-10000)

DJNZ SEC,EXIT3 ;判斷是否 1 秒到了

MOV SEC,#100

ACALL JUDGE ;呼叫秒轉換成分、時副程式

EXIT3: POP A

RETI

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

; READ CODE FORM 93CX6

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

R_CODE: PUSH A

MOV ADDR,#0 ;從外部資料記憶體位地 00H 處開始讀資料

MOV R0,#54H

MOV R1,#2

LOOP1: ACALL READ ;讀資料,16 字元

INC ADDR ;位址加 1

DJNZ R1,LOOP1 ;讀第二次 16 位元資料

POP A

RET

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

; WRITE CODE TO 93CX6

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

W_CODE: PUSH A

MOV ADDR,#0

MOV R0,#54H

MOV R1,#2

LOOP2: ACALL ERASE

ACALL WEN

ACALL WRITE

Page 69: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

62

ACALL WDS

INC ADDR

DJNZ R1,LOOP2

POP A

RET

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

; READ CODE FORM 93CX6

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

R_CODE2:

PUSH A

MOV ADDR,#2 ;從外部資料記憶體位地 00H 處開始讀資料

MOV R0,#5CH

MOV R1,#2

LOOP21: ACALL READ ;讀資料,16 字元

INC ADDR ;位址加 1

DJNZ R1,LOOP21 ;讀第二次 16 位元資料

POP A

RET

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

; WRITE CODE TO 93CX6

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

W_CODE2:

PUSH A

MOV ADDR,#2

MOV R0,#5CH

MOV R1,#2

LOOP22: ACALL ERASE

ACALL WEN

ACALL WRITE

ACALL WDS

INC ADDR

DJNZ R1,LOOP22

Page 70: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

63

POP A

RET

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

; ERASE 93CX6

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

ERASE: PUSH A

MOV R6,#00000111B

MOV A,ADDR

MOV R7,A

ACALL SHIFT5

SETB CS

MOV CNT,#11

ER: MOV A,R7

RLC A

MOV R7,A

MOV A,R6

RLC A

MOV R6,A

MOV DI,C

SETB SK

NOP

CLR SK

NOP

DJNZ CNT,ER

ACALL CHKBSY

CLR CS

POP A

RET

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

; 93CX6 WRITE ENABLE

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

WEN: PUSH A

MOV R6,#00000100B

MOV R7,#11000000B

Page 71: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

64

ACALL SHIFT5

SETB CS

MOV CNT,#11

W1: MOV A,R7

RLC A

MOV R7,A

MOV A,R6

RLC A

MOV R6,A

MOV DI,C

SETB SK

NOP

CLR SK

NOP

DJNZ CNT,W1

CLR CS

POP A

RET

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

; 93CX6 WRITE DISABLE

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

WDS: PUSH A

MOV R6,#00000100B

MOV R7,#00000000B

ACALL SHIFT5

SETB CS

MOV CNT,#11

DS: MOV A,R7

RLC A

MOV R7,A

MOV A,R6

RLC A

MOV R6,A

MOV DI,C

Page 72: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

65

SETB SK

NOP

CLR SK

NOP

DJNZ CNT,DS

CLR CS

POP A

RET

;----- --

; WRITE

;----- --

WRITE: PUSH A

MOV R6,#00000101B

MOV A,ADDR

MOV R7,A

ACALL SHIFT5

SETB CS

MOV CNT,#11

WR: MOV A,R7

RLC A

MOV R7,A

MOV A,R6

RLC A

MOV R6,A

MOV DI,C

SETB SK

NOP

CLR SK

NOP

DJNZ CNT,WR

ACALL W_DAT

ACALL CHKBSY

CLR CS

POP A

Page 73: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

66

RET

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

; WRITE DATA TO 93CX6

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

W_DAT: PUSH A

MOV R3,#2

WD1: MOV A,@R0

MOV R4,#8

WD2: RLC A

MOV DI,C

SETB SK

NOP

CLR SK

NOP

DJNZ R4,WD2

INC R0

DJNZ R3,WD1

POP A

RET

;----- -

; READ

;----- -

READ: PUSH A

MOV R6,#00000110B

MOV A,ADDR

MOV R7,A

ACALL SHIFT5 ;將 R6,R7 結合成 11Bits

SETB CS

MOV CNT,#11

RD: MOV A,R7

RLC A

MOV R7,A

MOV A,R6

RLC A

Page 74: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

67

MOV R6,A

MOV DI,C

SETB SK

NOP

CLR SK

NOP

DJNZ CNT,RD

ACALL R_DAT

CLR CS

POP A

RET

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

; READ DATA FROM 93CX6

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

R_DAT: PUSH A

MOV R3,#2

RD1: MOV R4,#8

RD2: SETB SK

NOP

CLR SK

NOP

MOV C,DO

RLC A

DJNZ R4,RD2

MOV @R0,A ;把資料存入 54H、55H、56H、57H

INC R0

DJNZ R3,RD1

POP A

RET

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

; SHIFT LEFT 5 BIT

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

SHIFT5: PUSH A

MOV CNT,#5

Page 75: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

68

SHT: MOV A,R7 ;R7 為 0000000B 表從 0H 開始取

RLC A

MOV R7,A

MOV A,R6

RLC A

MOV R6,A

DJNZ CNT,SHT ;將 R6 轉成 11000000B

POP A

RET

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

; CHECK 93CX6 BUSY

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

CHKBSY: PUSH A

BSY: CLR CS

SETB CS

MOV C,DO

JNC BSY

POP A

RET

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

;=====初值設定=======

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

F00:

ACALL CLRLCD

MOV A,#84H ;顯示在 LCD 第 1 行第 5 字

ACALL W_INS ;傳指令至 LCD

MOV CNT,#10

MOV DPTR,#MSGB ;DATA RESET.

ACALL W_STR ;傳字串至 LCD SHOW 出資料

MOV A,#C6H ;顯示在 LCD 第 2 行第 7 字

MOV R0,#54H

ACALL W_INS ;傳指令至 LCD

F08:

Page 76: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

69

MOV A,#00H

MOV @R0,A

INC R0

CJNE R0,#58H,F08

MOV R0,#54H

ACALL W_CODE

MOV R0,#5CH

F082:

MOV A,#00H

MOV @R0,A

INC R0

CJNE R0,#60H,F082

MOV R0,#5CH

ACALL W_CODE2

ACALL DELAY1S

AJMP START

;----- --- -

; MESSAGE

;----- --- -

MSG1: DB 'F1:TIME F2:ADJ'

MSG2: DB 'F3:INPUT F4:SET'

MSG3: DB 'TIME'

MSG4: DB 'ADJUST TIME'

MSG5: DB 'INPUT CODE1'

MSG52: DB 'INPUT CODE2'

MSG6: DB 'EXACT'

MSG7: DB 'ERROR'

MSG8: DB 'SET CODE1'

MSG82: DB 'SET CODE2'

MSG9: DB 'SUCCESS!'

MSGA: DB 'PASS WORD?'

MSGB: DB 'DATA RESET.'

MSGC: DB 'Door Unlock.....'

Page 77: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

70

MSGD: DB 'Door locked.....'

MSGE: DB ' '

MSGF: DB 'CODE1 or CODE2 ?'

END

Page 78: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

71

第六章 製作心得與參考文獻

6.1製作心得: 在製作這個專題之前遇到許多難題,首先是解決這 8051 晶片電源問

題,在參考了許多書與詢問同學後,發現可藉由 7805 穩壓 IC,來完成

自製 5V 穩定的電源,對於單晶片的選擇方面,為了降低成本、燒錄程式

修改容易及且品質穩定各種條件下,決定採用價格合理而且可以重覆燒

錄的 89S51,因此也對 89S51 這顆 IC 有了更多的了解,也深深感到這個

IC 其強大的功能,雖然這只是一個小小的專題實習,不過我相信若是在

這個小小的基礎上,繼續研究的話,以後或許會有更深的學問及技術被

發現與應用。

6.2參考文獻:

[1]吳鴻璋,微處理應用(8051/8052基本原理與應用) ,滄海書局,2007

[2]楊明豐,單晶片實作入門與應用,第三波出版社,1997

[3] 林伸茂,8051 單晶片徹底研究基礎篇 ,旗標出版社,2002

[4]蔡朝洋 單晶片微電腦 8051/8951原理與應用第七版,全華科技,2009

Page 79: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

72

Page 80: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

73

Page 81: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

74

Page 82: 逢 大 學 自動控制工程學系專題製作 專 題 論 文3. 內部程式記憶體(rom)為 4k 位元組. 4. 內部資料記憶體(ram)為 128k 位元組. 5. 外部程式記憶體可擴充至

75