XXXXXXXX學院(論文)
前 言最近幾年來,隨著科技的飛速發展,單片機領域正在不斷的走向社會各個角落,還帶動傳統控制檢測日新月異更新。在實時運作和自動控制的單片機應用到系統中,單片機如今是作為一個核心部件來使用,僅掌握單片機方面知識是不夠的,還應根據其具體硬件結構,以及針對具體應用對象特點的軟件結合,加以完善。“單片機原理及應用課程設計”是電子類專業的學科基礎科,它是繼“匯編語言程序設計”,“接口技術”等課程之后開出的實踐環節課程。
第一章 工作原理1.1設計目標1.1.1基本功能此萬年歷主要具有:年、月、日、星期、時、分、秒、溫度顯示。
主要功能:
1、萬年歷
2、時間
3、星期
4、溫度顯示
(以上四項內容同時顯示)
5、四鍵調時(設置鍵、上調鍵、下調鍵、關音按鍵)
第二章 硬件設計與原理以AT89C51單片機為核心,起著控制作用。系統包括LCD1602液晶顯示電路、復位電路、時鐘電路、按鍵電路、溫度傳感器電路、時鐘芯片電路。設計思路分為七個模塊:復位電路、晶振電路模塊、AT89C51、LCD1602液晶顯示電路、按鍵電路、溫度傳感器電路、時鐘芯片電路這七個模塊。
2.1 總設計框圖
1.001.jpg (22.43 KB, 下載次數: 103)
下載附件
2017-4-23 23:54 上傳
2.2 硬件設計分析2.2.1 電源的設計系統電源使用直流5伏。
由電腦USB接口提供電源。
USB是通用串行總線(Universal Serial Bus)接口的簡稱。它是目前使用比較廣泛的電腦接口之一,主要版本有1.0、1.1和最新的2.0三種版本。根據USB總線的工業標準,它可以提供額定功率為5V/500mA的電源供USB設備使用。
2.2.2 單片機最小系統51單片機是對目前所有兼容intel 8031指令系統的單片機的統稱。該系列單片機的始祖是intel的8031單片機,后來隨著技術的發展,成為目前廣泛應用的8為單片機之一。單片機是在一塊芯片內集成了CPU、RAM、ROM、定時器/計數器和多功能I/O口等計算機所需要的基本功能部件的大規模集成電路,又稱為MCU。51系列單片機內包含以下幾個部件:
一個8位CPU;一個片內振蕩器及時鐘電路;
4KB的ROM程序存儲器;
一個128B的RAM數據存儲器;
尋址64KB外部數據存儲器和64KB外部程序存儲空間的控制電路;
32條可編程的I/O口線;
兩個16位定時/計數器;
一個可編程全雙工串行口;
5個中斷源、兩個優先級嵌套中斷結構。
如圖2-2-1所示為AT89C51單片機基本構造,其基本性能介紹如下:
1.002.jpg (25.12 KB, 下載次數: 123)
下載附件
2017-4-23 23:54 上傳
圖2-2-1 AT89C51單片機
AT89C51本身內含40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內含2個外中端口,3個16位可編程定時計數器,2個全雙工串行通信口,AT89C51可以按照常規方法進行編程,但不可以在線編程。其將通用的微處理器和Flash存儲器結合在一起,特別是可反復擦寫的Flash存儲器可有效地降低開發成本。
AT89C51的主要特性如下表所示:
表2-2-1 AT89C51主要功能描述
AT89C51為40腳雙列直插封裝的8位通用微處理器,采用工業標準的C51內核,在內部功能及管腳排布上與通用的8xc52相同,其主要用于會聚調整時的功能控制。功能包括對會聚主IC內部寄存器、數據RAM及外部接口等功能部件的初始化,會聚調整控制,會聚測試圖控制,紅外遙控信號IR的接收解碼及與主板CPU通信等。主要管腳有:XTAL1(19腳)和XTAL2(18腳)為振蕩器輸入輸出端口,外接12MHz 晶振。RST/Vpd(9腳)為復位輸入端口,外接電阻電容組成的復位電路。VCC(40腳)和VSS(20腳)為供電端口,分別接+5V電源的正負端。P0~P3 為可編程通用I/O腳,其功能用途由軟件定義,在本設計中,P0端口(32~39腳)被定義為N1功能控制端口,分別與N1的相應功能管腳相連接,13腳定義為IR輸入端,10腳和11腳定義為I2C總線控制端口,分別連接N1的SDAS(18腳)和SCLS(19腳)端口,12腳、27腳及28腳定義為握手信號功能端口,連接主板CPU的相應功能端,用于當前制式的檢測及會聚調整狀態進入的控制功能。
P0口:P0口是一組8位漏極開路型雙向I/O 口,也即地址/數據總線復用口。作為輸出口用時,每位能吸收電流的方式驅動8個TTL邏輯門電路,對端口P0寫“1”時,可作為高阻抗輸入端用。在訪問外部數據存儲器或程序存儲器時,這組口線分時轉換地址(低8位)和數據總線復用,在訪問期間激活內部上拉電阻。在Flash 編程時,P0口接收指令字節,而在程序校驗時,輸出指令字節,校驗時,要求外接上拉電阻。
P1口:P1是一個帶內部上拉電阻的8位雙向I/O口,P1的輸出緩沖級可驅動(吸收或輸出電流)4個TTL邏輯門電路。對端口寫“1”,通過內部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(IIL)。與AT89C51不同之處是,P1.0和P1.1還可分別作為定時/計數器2 的外部計數輸入(P1.0/T2)和輸入(P1.1/T2EX)。Flash編程和程序校驗期間,P1接收低8位地址。
P2口:P2是一個帶有內部上拉電阻的8 位雙向I/O口,P2的輸出緩沖級可驅動(吸收或輸出電流)4個TTL邏輯門電路。對端口P2寫“1”,通過內部的上拉電阻把端口拉到高電平,此時可作輸入口,作輸入口使用時,因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(IIL)。在訪問外部程序存儲器或16位地址的外部數據存儲器(例如執行MOVX @DPTR指令)時,P2口送出高8位地址數據。在訪問8位地址的外部數據存儲器(如執行MOVX @RI指令)時,P2口輸出P2鎖存器的內容。Flash編程或校驗時,P2亦接收高位地址和一些控制信號。
P3口:P3口是一組帶有內部上拉電阻的8位雙向I/O口。P3口輸出緩沖級可驅動(吸收或輸出電流)4個TTL邏輯門電路。對P3口寫入“1”時,它們被內部上拉電阻拉高并可作為輸入端口。此時,被外部拉低的P3口將用上拉電阻輸出電流(IIL)。P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能P3口還接收一些用于Flash 閃速存儲器編程和程序校驗的控制信號。
RST:復位輸入。當振蕩器工作時,RST引腳出現兩個機器周期以上高電平將使單片機復位。
ALE/PROG:當訪問外部程序存儲器或數據存儲器時,ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節。一般情況下,ALE仍以時鐘振蕩頻率的1/6輸出固定的脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當訪問外部數據存儲器時將跳過一個AL脈沖。對Flash存儲器編程期間,該引腳還用于輸入編程脈沖(PROG)。如有必要,可通過對特殊功能寄存器(SFR)區中的8EH單元的D0位置位,可禁止ALE操作。該位置位后,只有一條 MOVX 和MOVC指令才能將ALE激活。此外,該引腳會被微弱拉高,單片機執行外部程序時,應設置ALE禁止位無效。
PSEN:程序儲存允許(PSEN)輸出是外部程序存儲器的讀選通信號,當AT89C51由外部程序存儲器取指令(或數據)時,每個機器周期兩次PSEN有效,即輸出兩個脈沖。在此期間,當訪問外部數據存儲器,將跳過兩次PSEN信號。
EA/VPP:外部訪問允許。欲使CPU僅訪問外部程序存儲器(地址為0000H—FFFFH),EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復位時內部會鎖存EA端狀態。如EA端為高電平(接Vcc端),CPU則執行內部程序存儲器中的指令。Flash存儲器編程時,該引腳加上+12V的編程允許電源Vpp,當然這必須是該器件是使用12V編程電壓Vpp。
XTAL1:振蕩器反相放大器的及內部時鐘發生器的輸入端。
XTAL2:振蕩器反相放大器的輸出端。
單片機最小原理圖如圖2-2-2所示。
1.003.jpg (50.71 KB, 下載次數: 130)
下載附件
2017-4-23 23:54 上傳
圖2-2-2 單片機最小系統
單片機最小系統說明:
時鐘信號的產生:在MCS-51芯片內部有一個高增益反相放大器,其輸入端為芯片引腳XTAL1,其輸出端為引腳XTAL2。而在芯片的外部,XTAL1和XTAL2之間跨接晶體振蕩器和微調電容,從而構成一個穩定的自激振蕩器,這就是單片機的時鐘振蕩電路。
時鐘電路產生的振蕩脈沖經過觸發器進行二分頻之后,才成為單片機的時鐘脈沖信號。
一般地,電容C2和C3取30pF左右,晶體的振蕩頻率范圍是1.2-12MHz。如果晶體振蕩頻率高,則系統的時鐘頻率也高,單片機的運行速度也就快。
單片機復位使CPU和系統中的其他功能部件都處在一個確定的初始狀態下,并從這個狀態開始工作。單片機復位條件:必須使9腳加上持續兩個機器周期(即24個振蕩周期)的高電平。
2.2.3 顯示系統LCD1602分為帶背光和不帶背光兩種,基控制器大部分為HD44780,帶背光的比不帶背光的厚,是否帶背光在應用中并無差別,兩者尺寸差別如下圖2-2-3所示:
1.004.jpg (30.59 KB, 下載次數: 108)
下載附件
2017-4-23 23:54 上傳
LCD1602的主要技術參數:
1、顯示容量:16×2個字符
2、芯片工作電壓:4.5—5.5V
3、工作電流:2.0mA(5.0V)
4、模塊最佳工作電壓:5.0V
5、字符尺寸:2.95×4.35(W×H)mm
引腳功能說明
LCD1602采用標準的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如圖2-2-4所示:
編號 | 符號 | 引腳說明 | 編號 | 符號 | 引腳說明 |
1 | VSS | 電源地 | 9 | D2 | 數據 |
2 | VDD | 電源正極 | 10 | D3 | 數據 |
3 | VL | 液晶顯示偏壓 | 11 | D4 | 數據 |
4 | RS | 數據/命令選擇 | 12 | D5 | 數據 |
5 | R/W | 讀/寫選擇 | 13 | D6 | 數據 |
6 | E | 使能信號 | 14 | D7 | 數據 |
7 | D0 | 數據 | 15 | BLA | 背光源正極 |
8 | D1 | 數據 | 16 | BLK | 背光源負極 |
1.005.jpg (2.53 KB, 下載次數: 127)
下載附件
2017-4-23 23:54 上傳
圖2-2-4:引腳接口說明表
第1腳:VSS為地電源。
第2腳:VDD接5V正電源。
第3腳:VL為液晶顯示器對比度調整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度。
第4腳:RS為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器。
第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當RS為低電平R/W為高電平時可以讀忙信號,當RS為高電平R/W為低電平時可以寫入數據。
第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執行命令。
第7~14腳:D0~D7為8位雙向數據線。
第15腳:背光源正極。
第16腳:背光源負極。
2.2.4 LCD1602的指令說明及時序1602液晶模塊內部的控制器共有11條控制指令,如圖2-2-5所示:
序號 | 指令 | RS | R/W | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
1 | 清顯示 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
2 | 光標返回 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | * |
3 | 置輸入模式 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | I/D | S |
4 | 顯示開/關控制 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | D | C | B |
5 | 光標或字符移位 | 0 | 0 | 0 | 0 | 0 | 1 | S/C | R/L | * | * |
6 | 置功能 | 0 | 0 | 0 | 0 | 1 | DL | N | F | * | * |
7 | 置字符發生存貯器地址 | 0 | 0 | 0 | 1 | 字符發生存貯器地址 |
8 | 置數據存貯器地址 | 0 | 0 | 1 | 顯示數據存貯器地址 |
9 | 讀忙標志或地址 | 0 | 1 | BF | 計數器地址 |
10 | 寫數到CGRAM或DDRAM) | 1 | 0 | 要寫的數據內容 |
11 | 從CGRAM或DDRAM讀數 | 1 | 1 | 讀出的數據內容 |
1.006.jpg (2.45 KB, 下載次數: 128)
下載附件
2017-4-23 23:54 上傳
1602液晶模塊的讀寫操作、屏幕和光標的操作都是通過指令編程來實現的。(說明:1為高電平、0為低電平)
指令1:清顯示,指令碼01H,光標復位到地址00H位置。
指令2:光標復位,光標返回到地址00H。
指令3:光標和顯示模式設置I/D:光標移動方向,高電平右移,低電平左移S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效。
指令4:顯示開關控制。D:控制整體顯示的開與關,高電平表示開顯示,低電平表示關顯示C:控制光標的開與關,高電平表示有光標,低電平表示無光標B:控制光標是否閃爍,高電平閃爍,低電平不閃爍。
指令5:光標或顯示移位S/C:高電平時移動顯示的文字,低電平時移動光標。
指令6:功能設置命令DL:高電平時為4位總線,低電平時為8位總線 N:低電平時為單行顯示,高電平時雙行顯示F: 低電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符。
指令7:字符發生器RAM地址設置。
指令8:DDRAM地址設置。
指令9:讀忙信號和光標地址BF:為忙標志位,高電平表示忙,此時模塊不能接收命令或者數據,如果為低電平表示不忙。
指令10:寫數據。
指令11:讀數據。
2.2.5 LCD1602的RAM地址映射及標準字庫表
1.007.jpg (24.2 KB, 下載次數: 119)
下載附件
2017-4-23 23:54 上傳
液晶顯示模塊是一個慢顯示器件,所以在執行每條指令之前一定要確認模塊的忙標志為低電平,表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,圖2-2-6是1602的內部顯示地址。
例如第二行第一個字符的地址是40H,那么是否直接寫入40H就可以將光標定位在第二行第一個字符的位置呢?這樣不行,因為寫入顯示地址時要求最高位D7恒定為高電平1所以實際寫入的數據應該是01000000B(40H)+10000000B(80H)=11000000B(C0H)。
在對液晶模塊的初始化中要先設置其顯示模式,在液晶模塊顯示字符時光標是自動右移的,無需人工干預。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態。
1602液晶模塊內部的字符發生存儲器(CGROM)已經存儲了160個不同的點陣字符圖形,這些字符有:阿拉伯數字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊把地址41H中的點陣字符圖形顯示出來,我們就能看到字母“A”。
1.008.jpg (21.24 KB, 下載次數: 116)
下載附件
2017-4-23 23:54 上傳
圖2-2-7 液晶顯示電路
2.2.6 DS1302原理及說明(1) 時鐘芯片DS1302的工作原理
DS1302在每次進行讀、寫程序前都必須初始化,先把SCLK端置 “0”,接著把RST端置“1”,最后才給予SCLK脈沖;讀/寫時序如下圖2.2所示。圖2.1為DS1302的控制字,此控制字的位7必須置1,若為0則不能把對DS1302進行讀寫數據。對于位6,若對程序進行讀/寫時RAM=1,對時間進行讀/寫時,CK=0。位1至位5指操作單元的地址。位0是讀/寫操作位,進行讀操作時,該位為1;該位為0則表示進行的是寫操作。控制字節總是從最低位開始輸入/輸出的。表2.2為DS1302的日歷、時間寄存器內容:“CH”是時鐘暫停標志位,當該位為1時,時鐘振蕩器停止,DS1302處于低功耗狀態;當該位為0時,時鐘開始運行。“WP”是寫保護位,在任何的對時鐘和RAM的寫操作之前,WP必須為0。當“WP”為1時,寫保護位防止對任一寄存器的寫操作。
(2) DS1302的控制字
DS1302的控制字如圖2.1所示。控制字節的高有效位(位7)必須是邏輯1,如果它為0,則不能把數據寫入DS1302中,位6如果0,則表示存取日歷時鐘數據,為1表示存取RAM數據;位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進行寫操作,為1表示進行讀操作,控制字節總是從最低位開始輸出。
1.009.jpg (9.03 KB, 下載次數: 116)
下載附件
2017-4-23 23:54 上傳
圖2-2-8 DS1302的控制字
(3) 數據輸入輸出
在控制指令字輸入后的下一個SCLK時鐘的上升沿時,數據被寫入DS1302,數據輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數據,讀出數據時從低位0位到高位7。如下圖2-2-9所示:
1.010.jpg (22.85 KB, 下載次數: 118)
下載附件
2017-4-23 23:54 上傳
圖2-2-9 DS1302讀與寫的時序圖
DS1302有12個寄存器,其中有7個寄存器與日歷、時鐘相關,存放的數據位為BCD碼形式,其日歷、時間寄存器及其控制字見表2.2。
表2.2 DS1302的日歷、時間寄存器
1.011.jpg (35.82 KB, 下載次數: 110)
下載附件
2017-4-23 23:54 上傳
此外,DS1302 還有年份寄存器、控制寄存器、充電寄存器、時鐘突發寄存器及與RAM相關的寄存器等。時鐘突發寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內容。 DS1302與RAM相關的寄存器分為兩類:一類是單個RAM單元,共31個,每個單元組態為一個8位的字節,其命令控制字為C0H~FDH,其中奇數為讀操作,偶數為寫操作;另一類為突發方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個字節,命令控制字為FEH(寫)、FFH(讀)。
1.012.jpg (21.92 KB, 下載次數: 139)
下載附件
2017-4-23 23:54 上傳
圖2-2-10 DS1302電路
2.2.7 DS18B20工作原理及說明DS18B20的讀寫時序和測溫原理與DS1820相同,只是得到的溫度值的位數因分辨率不同而不同,且溫度轉換時的延時時間由2s減為750ms。 DS18B20測溫原理如圖2-1-10所示。圖中低溫度系數晶振的振蕩頻率受溫度影響很小,用于產生固定頻率的脈沖信號送給計數器1。高溫度系數晶振隨溫度變化其振蕩率明顯改變,所產生的信號作為計數器2的脈沖輸入。計數器1和溫度寄存器被預置在-55℃所對應的一個基數值。計數器1對低溫度系數晶振產生的脈沖信號進行減法計數,當計數器1的預置值減到0時,溫度寄存器的值將加1,計數器1的預置將重新被裝入,計數器1重新開始對低溫度系數晶振產生的脈沖信號進行計數,如此循環直到計數器2計數到0時,停止溫度寄存器值的累加,此時溫度寄存器中的數值即為所測溫度。圖2-1-10中的斜率累加器用于補償和修正測溫過程中的非線性,其輸出用于修正計數器1的預置值。
|
1.013.jpg (14.3 KB, 下載次數: 121)
下載附件
2017-4-23 23:54 上傳
圖2-2-11 DS18B20測溫原理框圖 |
1.014.jpg (11.36 KB, 下載次數: 101)
下載附件
2017-4-23 23:54 上傳
圖2-2-12 DS18B20電路
2.2.8 按鍵電路按鍵是由一組按壓式或觸摸式開關構成的陣列,是一種常用的輸入設備。鍵盤可分為編碼式鍵盤和非編碼式鍵盤兩種。
1.編碼鍵盤通過硬件電路產生被按按鍵的鍵碼,這種鍵盤所需程序簡單,但硬件電路復雜、價格昂貴通常不被單片機系統采用。
2.非編碼鍵盤常用一些按鍵排列成行列矩陣,其硬件邏輯與按鍵編碼不存在嚴格的對應關系,而要由所用的程序來決定。非編碼鍵盤的硬件接口簡單,但是要占用較多的CPU時間,通常采用可編程鍵盤管理芯片來克服這個缺點。本設計使用兩種按鍵,一種是按鍵式非編碼鍵盤和輕觸式非編碼開關。
在接線時由于有四個引腳,連接時需要用萬用表進行測量,然后接通兩個引腳,原理圖如下。
要進行數據的計算就必須先進行數據的輸入,也就必須確定按鍵輸入的數值是什么,這就需要對鍵盤進行掃描,從而確定究竟是哪個鍵按下。
1.015.jpg (15.29 KB, 下載次數: 107)
下載附件
2017-4-23 23:54 上傳
圖2-2-13 按鍵電路
第三章 軟件設計與分析3.1 軟件設計的組成該系統由延時子函數、LCD1602液晶寫命令子函數、LCD1602液晶寫數據子函數、DS18B20初始化子函數、DS18B20讀1位數據子函數、讀一個字節數據子函數、向DS18B20寫一個字節數據子函數、DS18B20開始獲取溫度并轉換子函數、獲取溫度子函數、初始化子函數、DS1302地址、數據發送子函數、DS1302數據讀取子函數、DS1302初始化子函數、顯示年,月,日,周子函數、按鍵掃描子函數、主函數和數據定義這幾部分組成。
1.016.jpg (16.78 KB, 下載次數: 131)
下載附件
2017-4-23 23:54 上傳
圖3-1-1 DS1302讀取日期和時間流程圖
1.017.jpg (15.82 KB, 下載次數: 122)
下載附件
2017-4-23 23:54 上傳
圖3-1-2 DS18B20溫度傳感器流程圖
1.018.jpg (52.75 KB, 下載次數: 118)
下載附件
2017-4-23 23:54 上傳
圖3-1-3 時間調整程序流程圖
1.019.jpg (39.94 KB, 下載次數: 117)
下載附件
2017-4-23 23:54 上傳
1.020.jpg (42.22 KB, 下載次數: 118)
下載附件
2017-4-23 23:54 上傳
圖3-1-4 整體流程圖
1.021.jpg (27.05 KB, 下載次數: 127)
下載附件
2017-4-23 23:54 上傳
圖3-1-5 DS1302讀寫程序流程圖
3.2 源程序