版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 目錄</b></p><p><b> 目錄1</b></p><p><b> 摘要2</b></p><p><b> 關(guān)鍵詞:3</b></p><p><b> 第一章 引言3</b&g
2、t;</p><p> 第二章 硬件系統(tǒng)設(shè)置5</p><p> 2.1系統(tǒng)原理圖5</p><p> 2.2模塊硬件電路圖5</p><p> 2.2.1電源模塊5</p><p> 2.2.2DS18B20模塊6</p><p> 2.2.3排針模塊6</p&g
3、t;<p> 2.2.4 LED顯示模塊7</p><p> 2.2.5 ISD1420語音模塊7</p><p> 2.3芯片資料介紹8</p><p> 2.3.1 89C52單片機8</p><p> 2.3.2 DS18B20芯片10</p><p> 2.3.3 ISD14
4、20芯片13</p><p> 2.3.4 LED數(shù)碼管15</p><p> 2.3.5 74HC273芯片17</p><p> 2.3.6 74HC32芯片17</p><p> 第三章 軟件系統(tǒng)設(shè)置18</p><p><b> 程序流程圖18</b></p&
5、gt;<p><b> 主程序流程圖18</b></p><p> 詳細的整體程圖19</p><p> DS18B20溫度采集模塊19</p><p> ISD1420語音模塊流程圖20</p><p> LED顯示模塊流程圖20</p><p> java程
6、序繪圖流程圖21</p><p><b> 參數(shù)信息21</b></p><p> 第四章 課程設(shè)計總結(jié)22</p><p><b> 人員分工22</b></p><p><b> 總結(jié)22</b></p><p> 軟件延時與定時
7、器計時22</p><p> 模塊化及團隊合作22</p><p> 關(guān)于本次課程設(shè)計23</p><p> 調(diào)試記錄及結(jié)果分析23</p><p> 遇到的問題和解決:23</p><p><b> 心得體會23</b></p><p><b&
8、gt; 源程序清單24</b></p><p><b> 參考資料34</b></p><p><b> 摘要</b></p><p> 此文主要介紹以STC89C52單片機開發(fā)板為核心的溫度控制器的設(shè)計。分為引言、硬件系統(tǒng)設(shè)置、軟件系統(tǒng)設(shè)置和課程設(shè)計總結(jié)四個主體部分。引言部分簡述了本次課程設(shè)計的主
9、要內(nèi)容。硬件系統(tǒng)設(shè)置主要詳述了五個模塊的總體框架圖和硬件電路圖,即8051數(shù)據(jù)處理模塊、DS18B20溫度采集模塊、基于LED溫度顯示模塊、ISD1420語音芯片模塊、鍵盤輸入模塊,以及所用到的芯片的介紹。軟件系統(tǒng)設(shè)置方面主要介紹了主程序和整體流程圖及DS18B20溫度采集模塊、ISD1420語音模塊、LED顯示模塊、JAVA程序繪圖模塊的流程圖。課程設(shè)計總結(jié)部分主要包括人員分工,總結(jié),心得體會,源程序清單和參考資料等內(nèi)容。此次課程設(shè)計
10、中借助了Protell99SE軟件繪制電路圖、keil軟件編程、eclipse軟件編寫上位機程序、Visio繪制流程圖。溫度控制器實現(xiàn)了在數(shù)碼管上顯示當前溫度,并且報當前溫度,當溫度超過警戒值時發(fā)出警告,java程序?qū)崿F(xiàn)對串口發(fā)送的溫度繪制溫度變化曲線圖的功能。研究結(jié)果表明,由于溫度控制器的應用相當普遍,所以其設(shè)計的核心在于硬件成本的節(jié)約軟件算法的優(yōu)化,力求做到物美價廉,才能擁有更廣闊的市場前景</p><p>
11、<b> 關(guān)鍵詞:</b></p><p> STC89C52;DS18B20;ISD1420;74HC273;74HC32AP;LED;JAVA</p><p><b> Abstract</b></p><p> This article mainly introduces to STC89C52 SCM de
12、velopment board as the core temperature controller design. Divided into the introduction, the hardware system Settings, software system Settings and course design summarize four main body part. Introduction of the course
13、 design paper the main content. Hardware system on the set up of the overall KuangJiaTu five module circuit diagram, namely 8051 hardware and data processing module, DS18B20 temperature gathering module, based on LED tem
14、perature di</p><p> Key Words:</p><p> STC89C52;DS18B20;ISD1420;74HC273;74HC32AP;LED;JAVA</p><p><b> 第一章 引言</b></p><p> 單片機的產(chǎn)品在我們?nèi)粘I钪须S處可見。所謂單片機就是利用大規(guī)模集
15、成電路技術(shù)把中央處理單元CPU和數(shù)據(jù)存儲器RAM、程序存儲器ROM及其他I/O通信口集成在一塊芯片上,構(gòu)成一個最小的計算機系統(tǒng),而現(xiàn)代的單片機則加上了中斷單元,定時單元及A/D轉(zhuǎn)換等更復雜、更完善的電路,使得單片機的功能越來越強大,應用更廣泛。世界上各大芯片制造公司都推出了自己的單片機??v觀單片機的發(fā)展過程,單片機的發(fā)展趨勢大致有:①低功耗CMOS化②微型單片化③主流與多品種共存?,F(xiàn)在雖然單片機的品種繁多,各具特色,但仍以80C51為核
16、心的單片機占主流,兼容其結(jié)構(gòu)和指令系統(tǒng)的有PHILIPS公司的產(chǎn)品,ATMEL公司的產(chǎn)品和中國臺灣的Winbond系列單片機。本次課程設(shè)計我們就是用的基于STC89C52單片機開發(fā)板的溫度控制器。溫度控制器在現(xiàn)代大多工業(yè)控制系統(tǒng)中</p><p> 使用很普遍,本次課程設(shè)計中用到了語言報溫、語音報警,就可以發(fā)揮聽覺的優(yōu)勢,彌補完全用視覺信號傳遞信息的不足。實現(xiàn)了工業(yè)儀表中人機聯(lián)系的一個友好界面。如把非常熟練的操
17、作者的經(jīng)驗、或者是領(lǐng)域?qū)<覍Υ藛栴}的評判及處理措施,用語音對現(xiàn)行操作者以提示、指導,使該系統(tǒng)具有一定的智能,具備這種功能的溫度控制器將會在現(xiàn)代工業(yè)測控系統(tǒng)中應用愈來愈廣泛。</p><p> 本次課程設(shè)計,我們小組主要以STC89C52單片機開發(fā)板,結(jié)合ISD1420語音芯片進行溫度控制器的設(shè)計,下面將從硬件系統(tǒng)設(shè)置、軟件系統(tǒng)設(shè)置、課設(shè)總結(jié)(包括匯編源代碼、硬件系統(tǒng)設(shè)置原理圖,參考文獻)幾方面介紹本次課設(shè)的主要
18、成果。此次主要是利用STC89C52單片機開發(fā)板作為課程設(shè)計的平臺進行數(shù)據(jù)處理。硬件方面主要利用DS18B20進行溫度采集,利用LED進行溫度顯示,使用ISD1420語音芯片實現(xiàn)錄音,報溫和報警功能。軟件方面借助了Protell99繪制電路圖,在keil開發(fā)環(huán)境下編程,同時通過在eclipse環(huán)境下編寫java程序?qū)崿F(xiàn)對串口發(fā)來的溫度繪制溫度變化曲線等功能。</p><p> 第一章為引言,粗略地介紹此次課設(shè)的
19、主要內(nèi)容。</p><p> 第二章為硬件系統(tǒng)設(shè)置,在此章中主要從各個模塊的硬件電路圖以及基本芯片入手,介紹STC89C52單片機、DS18B20語言芯片、ISD1420溫度控制芯片、LED數(shù)碼管以及74HC273和74HC32A等的內(nèi)部結(jié)構(gòu)功能、工作方式以及編程工作環(huán)境等幾個方面進行了簡要的介紹,以便讀者更容易了解此次課設(shè)的基本思路及整理概覽,對硬件原理有逐步深入的了解。</p><p&g
20、t; 第三章為軟件系統(tǒng)設(shè)置,在此章中主要包括主程序流程圖和詳細的整體流程圖,DS18B20溫度采集模塊流程圖、ISD1420模塊流程圖、LED顯示模塊流程圖以及java程序繪圖流程圖。</p><p> 第四章為課程設(shè)計總結(jié)。此部分主要包括人員分工、總結(jié)、心得體會、源程序清單和參考資料等方面。</p><p> 在此次課程設(shè)計中,在課程設(shè)計剛開始的硬件檢測,還有程序調(diào)試過程中出現(xiàn)的問
21、題特別是語音芯片ISD1420的使用方法中遇到問題,都得到了指導老師精心的指點,使我們受益匪淺,在此表示感謝!</p><p> 第二章 硬件系統(tǒng)設(shè)置</p><p><b> 2.1系統(tǒng)原理圖</b></p><p> 2.2模塊硬件電路圖</p><p> 主要接線:P1口接74HC273,然后連接到語音芯片
22、ISD1420上面,P0口接的數(shù)碼管,用于顯示接收到的溫度,DS18B20接的P2.2口,錄音鍵REC接的P2.3,放音鍵PLAYE接的P2.4,WR接的P2.5.</p><p><b> 2.2.1電源模塊</b></p><p> 2.2.2DS18B20模塊</p><p><b> 2.2.3排針模塊</b>
23、;</p><p> 2.2.4 LED顯示模塊</p><p> 2.2.5 ISD1420語音模塊</p><p><b> 2.3芯片資料介紹</b></p><p> 2.3.189C52單片機</p><p> 2.3.1.1課程設(shè)計中主要用途</p><p
24、> 本次課程設(shè)計我們小組使用的是STC89C52開發(fā)板,主要用到了開發(fā)板上的單片機部分,LED數(shù)碼管顯示部分,DS18B20部分及鍵盤部分。我們用P1口接74HC273,然后連接到語音芯片ISD1420上面,P0口接的數(shù)碼管,用于顯示接收到的溫度,DS18B20接的P2.2口,錄音鍵REC接的P2.3,放音鍵PLAYE接的P2.4,WR接的P2.5.</p><p> 2.3.1.2內(nèi)部結(jié)構(gòu)和引腳圖&l
25、t;/p><p> 89C52是一種帶4K字節(jié)FLASH存儲器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗稱單片機。AT89C2051是一種帶2K字節(jié)閃存可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復擦除1000次。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標準的MCS-
26、51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C52是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C單片機為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。</p><p> 2.3.1.3管腳說明:</p><p> VCC:供電電壓。 </p><p><b> GND:
27、接地。 </b></p><p> P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P0口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。 </p><p> P1口:P1口是一個內(nèi)部提供
28、上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。 </p><p> P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作
29、為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。 </p><p> P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸
30、出4個TTL門電流。當P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。 </p><p> RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。 </p><p> ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引
31、腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。 </p><p> 2
32、.3.1.4串口通訊 </p><p> SBUF 數(shù)據(jù)緩沖寄存器是一個可以直接尋址的串行口專用寄存器。實際上SBUF 包含了兩個獨立的寄存器,一個是發(fā)送寄存,另一個是接收寄存器,但它們都共同使用同一個尋址地址-99H。CPU 在讀SBUF 時會指到接收寄存器,在寫時會指到發(fā)送寄存器,而且接收寄存器是雙緩沖寄存器,這樣可以避免接收中斷沒有及時的被響應,數(shù)據(jù)沒有被取走,下一幀數(shù)據(jù)已到來,而造成的數(shù)據(jù)重疊問題。發(fā)送
33、器則不需要用到雙緩沖,一般情況下我們在寫發(fā)送程序時也不必用到發(fā)送中斷去外理發(fā)送數(shù)據(jù)。操作SBUF寄存器的方法則很簡單,只要把這個99H 地址用關(guān)鍵字sfr定義為一個變量就可以對其進行讀寫操作了。SCON 串行口控制寄存器通常在芯片或設(shè)備中為了監(jiān)視或控制接口狀態(tài),都會引用到接口控制寄存器。SCON 就是51 芯片的串行口控制寄存器。它的尋址地址是98H,是一個可以位尋址的寄存器,作用就是監(jiān)視和控制51 芯片串行口的工作狀態(tài)。51 芯片的串
34、口可以工作在幾個不同的工作模式下,其工作模式的設(shè)置就是使用SCON 寄存器。它的各個位的具體定義如下:SM0 SM1 SM2 REN TB8 RB8 TI RI 。 </p><p> SM0、SM1 為串行口工作模式設(shè)置位,這樣兩位可以對應進行四種模式的設(shè)置。串行口工作模式設(shè)置如下: </p><p> SM2 在模式2、模式3 中為多處理機通信使能位。在模式0 中要求該位為0。 &
35、lt;/p><p> 波特率在使用串口做通訊時,一個很重要的參數(shù)就是波特率,只有上下位機的波特率一樣時才可以進行正常通訊。波特率是指串行端口每秒內(nèi)可以傳輸?shù)牟ㄌ匚粩?shù)。51 芯片的串口工作模式0的波特率是固定的,為fosc/12,以一個12M 的晶振來計算,那么它的波特率可以達到1M。模式2 的波特率是固定在fosc/64 或fosc/32,具體用那一種就取決于PCON 寄存器中的SMOD位,如SMOD 為0,波特率
36、為focs/64,SMOD 為1,波特率為focs/32。模式1 和模式3 的波特率是可變的,取決于定時器1 或2(52 芯片)的溢出速率。</p><p> 2.3.2DS18B20芯片</p><p> 2.3.2.1課程設(shè)計中主要用途</p><p> 在本次課程設(shè)計中的作用是采集溫度為溫度控制器提供溫度的數(shù)據(jù)。通過DS18B20采集溫度,然后在LED數(shù)
37、碼管上顯示當前溫度,同時將采集到的溫度信息通過串口發(fā)送給上位機從而輸出溫度曲線。ISD1420芯片也是根據(jù)DS18B20提供的溫度報溫和發(fā)出警報。它是數(shù)字式溫度傳感器,具有測量精度高,電路連接簡單特點。此類傳感器僅需要一條數(shù)據(jù)線進行數(shù)據(jù)傳輸,使用P2.2口與DS18B20的I/O口連接加一個上拉電阻,Vcc接電源,GND接地。獨特的一線接口,只需要一條口線通信多點能力,簡化了分布式溫度傳感應用無需外部元件可用數(shù)據(jù)總線供電,電壓范圍為3.
38、0V至5.5V無需備用電源 測量溫度范圍為-55度至+125度。</p><p> 2.3.2.2內(nèi)部結(jié)構(gòu)和引腳圖</p><p><b> 引腳圖</b></p><p><b> 內(nèi)部結(jié)構(gòu)圖</b></p><p> 2.3.2.3 DS18B20暫存寄存器分布 </p>
39、<p> 高速暫存存儲器由9個字節(jié)組成,其分配如表5所示。當溫度轉(zhuǎn)換命令發(fā)布后,經(jīng)轉(zhuǎn)換所得的溫度值以二字節(jié)補碼形式存放在 高速暫存存儲器的第0和第1個字節(jié)。單片機可通過單線接口讀到該數(shù)據(jù),讀取時低位在前,高位在后,數(shù)據(jù)格式如表1所示。對應的溫度計算: 當符號位S=0時,直接將二進制位轉(zhuǎn)換為十進制;當S=1時,先將補碼變?yōu)樵a,再計算十進制值。表 2是對應的一部分溫度值。第九個字節(jié)是 冗余檢驗字節(jié)。 </p>
40、<p> 2.3.2.4 ROM及RAM指令表 </p><p> 本次課程設(shè)計中根據(jù)DS18B20的通訊協(xié)議,主機(單片機)控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個步驟:每一次讀寫之前都要對DS18B20進行 復位操作,復位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對DS18B20進行預定的操作。復位要求主CPU將數(shù)據(jù)線下拉500微秒,然后 釋放,當DS18B20收到信號后等待16~
41、60微秒左右,后發(fā)出60~240微秒的存在低脈沖,主CPU收到此信號表示復位成功。ROM及RAM指令表如下: </p><p> 2.3.2.5 DS18B20的應用電路</p><p> DS18B20測溫系統(tǒng)具有測溫系統(tǒng)簡單、測溫精度高、連接方便、占用口線少等優(yōu)點。本次課程設(shè)計中DS18B20和單片機的P2.2口連接,直接通過P2.2口對其進行控制,還有2個腳一個接GND,一
42、個接VCC.連接圖如下:</p><p> 2.3.2.6時序圖</p><p> 本次課程設(shè)計通過按照數(shù)據(jù)手冊上的時序,然后經(jīng)過修改,使程序得到了實現(xiàn),具體方法見代碼清單。</p><p><b> ①初始化時序</b></p><p><b> ?、谧x/寫時序</b></p>
43、<p> 2.3.3 ISD1420芯片</p><p> 2.3.3.1課程設(shè)計中主要用途</p><p> 本次課程設(shè)計中使用ISD1420芯片,其通過P1口接74HC273,然后連接到語音芯片ISD1420,錄音鍵REC接的P2.3,放音鍵PLAYE接的P2.4,WR接的P2.5。我們小組先通過ISD1420錄音1,2,3,4,5,6,7,8,9,10,點,度,當前
44、溫度,溫度過高。然后后面通過組合播放對應的信息。當按鍵顯示溫度時,ISD1420開始播放當前溫度,當溫度超過警戒值,發(fā)出警報。</p><p> 2.3.3.2內(nèi)部結(jié)構(gòu)和引腳圖</p><p> 本設(shè)計使用DIP28封裝的芯片,其封裝與實物圖 如下圖所示</p><p> 2.3.3.3時序圖</p><p> RECORD時序圖:&
45、lt;/p><p><b> PLAY時序圖:</b></p><p> 2.3.3.4單片機對1420的分段放音控制:</p><p> 用微處理器對ISD芯片的分段錄放音控制時,才算是發(fā)揮了芯片的優(yōu)勢。ISD1420地址輸入端具有雙重功能,根據(jù)地址中的A6、A7的電平狀態(tài)決定A0~A7的功能。如果A6、A7有一個低電平,A0~A7輸入全解
46、釋為地址位,作為起始地址用,此時地址線僅作為輸入端,在操作過程中不能輸出內(nèi)部地址信息。根據(jù)PLAYE、PLAYL或REC的下降沿信號,地址輸入被鎖定。如果A6、7同為高電平時,它們即為模式位。</p><p> 在這里我們只用到地址功能來分段控制,所以我們需要保證A6、A7不可同時為1,這里我們可以用軟件進行保護。地址輸入端A0~A7有效值范圍為00000000~10011111,這表明最多可被劃分為160個存
47、貯單元,可錄放多達160段語音信息。由A0~A7決定每段語音的起始地址,而起始地址又直接反映了錄放的起始時間。其關(guān)系見公式:TQ=0.125s×(128A7+64A6+32A5+16A4+8A3+4A2+2A1+0)</p><p> 我們小組是將要播放的內(nèi)容事先錄入芯片內(nèi),語音芯片的地址端與單片機的P2口對應連接起來,REC和單片機的P2.3腳相連,PLAYE與單片機的P2.4腳相連(具體連接方式見
48、原理圖)。就可以控制1420在什么時間播放什么地址的內(nèi)容:播放地址由P3口提出,播放起始時間及終止時間出P2.3腳控制。</p><p> 本次課程設(shè)計各語音所對應的地址及持續(xù)時間</p><p> 2.3.4 LED數(shù)碼管</p><p> 2.3.4.1課程設(shè)計中的作用</p><p> 本次課程設(shè)計中LED的作用主要是用來顯示D
49、S18B20芯片采集到的溫度,我們用的是通過中斷來對LED進行動態(tài)掃描,同時這一操作是在中斷中完成的,剛開始數(shù)碼管雖然能夠顯示溫度,但是抖動也很厲害,后來通過調(diào)試,修改掃描的時間解決了這個問題。</p><p> 2.3.4.2內(nèi)部結(jié)構(gòu)及引腳圖</p><p> led數(shù)碼管是由多個發(fā)光二極管封裝在一起組成“8”字型的器件,引線已在內(nèi)部連接完成,只需引出它們的各個筆劃,公共電極。led
50、數(shù)碼管常用段數(shù)一般為7段有的另加一個小數(shù)點,還有一種是類似于3位“+1”型。位數(shù)有半位,1,2,3,4,5,6,8,10位等等,led數(shù)碼管根據(jù)LED的接法不同分為共陰和共陽兩類,了解LED的這些特性,對編程是很重要的,因為不同類型的數(shù)碼管,除了它們的硬件電路有差異外,編程方法也是不同的。共陰和共陽極數(shù)碼管的內(nèi)部電路不同,它們的發(fā)光原理是一樣的,只是它們的電源極性不同而已。顏色有紅,綠,藍,黃等幾種。led數(shù)碼管廣泛用于儀表,時鐘,車站
51、,家電等場合。下面介紹常用LED數(shù)碼管內(nèi)部引腳圖:</p><p> 每一筆劃都是對應一個字母表示 DP是小數(shù)點. LED數(shù)碼管要正常顯示,就要用驅(qū)動電路來驅(qū)動數(shù)碼管的各個段碼,從而顯示出我們要的數(shù)位,因此根據(jù)LED數(shù)碼管的驅(qū)動方式的不同,可以分為靜態(tài)式和動態(tài)式兩類。 </p><p> 2.3.4.3顯示方式</p><p> A、靜態(tài)顯示驅(qū)動: </
52、p><p> 靜態(tài)驅(qū)動也稱直流驅(qū)動。靜態(tài)驅(qū)動是指每個數(shù)碼管的每一個段碼都由一個單片機的I/O埠進行驅(qū)動,或者使用如BCD碼二-十進位*器*進行驅(qū)動。靜態(tài)驅(qū)動的優(yōu)點是編程簡單,顯示亮度高,缺點是占用I/O埠多,如驅(qū)動5個數(shù)碼管靜態(tài)顯示則需要5×8=40根I/O埠來驅(qū)動,要知道一個89S51單片機可用的I/O口才32個呢。故實際應用時必須增加*驅(qū)動器進行驅(qū)動,增加了硬體電路的復雜性。 </p>
53、<p> B、動態(tài)顯示驅(qū)動: </p><p> 數(shù)碼管動態(tài)顯示介面是單片機中應用最為廣泛的一種顯示方式之一,動態(tài)驅(qū)動是將所有數(shù)碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp "的同名端連在一起,另外為每個數(shù)碼管的公共極COM增加位元選通控制電路,位元選通由各自獨立的I/O線控制,當單片機輸出字形碼時,所有數(shù)碼管都接收到相同的字形碼,但究竟是那個數(shù)碼管會顯示出字形,取決于單
54、片機對位元選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位元就顯示出字形,沒有選通的數(shù)碼管就不會亮。 </p><p> 透過分時輪流控制各個LED數(shù)碼管的COM端,就使各個數(shù)碼管輪流受控顯示,這就是動態(tài)驅(qū)動。在輪流顯示過程中,每位元數(shù)碼管的點亮時間為1~2ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極體的余輝效應,盡管實際上各位數(shù)碼管并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定
55、的顯示資料,不會有閃爍感,動態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O口,而且功耗更低。</p><p> 2.3.5 74HC273芯片</p><p> 2.3.5.1課程設(shè)計中的作用</p><p> 本次課程設(shè)計中74HC273是和74HC32P芯片結(jié)合配合語音芯片ISD1420使用的,起到鎖存作用。74HC273是一款高速CMOS器件,74
56、HC273引腳兼容低功耗肖特基TTL(LSTTL)系列。74HC273具有八路邊沿觸發(fā),D 型觸發(fā)器,帶獨立的D輸入和Q輸出。74HC273的公共時鐘(CP)和主復位(MR)端可同時讀取和復位(清零)所有觸發(fā)器。每個D輸入的狀態(tài)將在時鐘脈沖上升沿之前的一段就緒時間內(nèi)被傳輸?shù)接|發(fā)器對應的輸出(Qn)上。一旦MR輸入電平為低,則所有輸出將被強制置為低,而不依賴于時鐘或者數(shù)據(jù)輸入。74HC273適用于要求原碼輸出或者所有存儲元件共用時鐘和主復
57、位的應用。此芯片在課程設(shè)計中用來鎖存。</p><p> 2.3.5.2內(nèi)部結(jié)構(gòu)和引腳圖</p><p><b> 引腳圖</b></p><p> 2.3.5.3功能說明</p><p> 74HC273的主要功能說明如下:</p><p> 2.3.6 74HC32芯片</p&
58、gt;<p> 2.3.6.1課程設(shè)計中的作用</p><p> 本次課程設(shè)計中74HC32P是和74HC273芯片結(jié)合配合語音芯片ISD1420使用的,起到鎖存作用。</p><p> 2.3.6.2內(nèi)部結(jié)構(gòu)和引腳圖</p><p> 2.3.6.3功能說明</p><p> 74HC32的主要功能說明如下:<
59、/p><p> 第三章 軟件系統(tǒng)設(shè)置</p><p><b> 程序流程圖</b></p><p> 此部分包括主程序流程圖和詳細的整體流程圖,DS18B20溫度采集模塊流程圖,ISD1420語音模塊流程圖,LED顯示模塊流程圖及java程序繪圖流程圖。</p><p><b> 主程序流程圖</b
60、></p><p><b> 詳細的整體程圖</b></p><p> DS18B20溫度采集模塊</p><p> ISD1420語音模塊流程圖</p><p> LED顯示模塊流程圖</p><p> java程序繪圖流程圖</p><p><b&
61、gt; 參數(shù)信息</b></p><p> sbit ds18b20_io=P2^2; 定義ds18b20_io口</p><p> sbit wela=P2^7; 定義位選口</p><p>
62、sbit dula=P2^6; 定義段選口</p><p> sbit lu=P2^4; 定義語言芯片錄音</p><p> sbit play=P2^3;
63、 定義語言芯片播放</p><p> sbit wr=P2^5; 定義讀寫口</p><p> sbit key1=P3^7; 定義鍵盤口</p><p> uchar tempe
64、rature_low,temperature_high; 定義最高最低溫度</p><p> uchar num=500; 定義delay溫度常數(shù)</p><p> uint temperature;
65、 定義溫度參數(shù)</p><p> bit flagtemper=0; 定義標志位</p><p> bit flag_500=0; 定義500S標志位</p><p> bit flag_1500
66、=0; 定義1500S標志位</p><p> uint danyuan[]={0,8,16,24,32,40,48,56,64,72,80,88,96,104,120}; 定義錄音放音地址</p><p> unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x
67、66,0x6d, 定義0-9</p><p> 0x7d, 0x07,0x7f,0x6f};</p><p> unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed, 定義數(shù)字加’.’的0-9</p><p> 0xfd, 0x87,0xff,0xef};</p><
68、p> 第四章 課程設(shè)計總結(jié)</p><p><b> 人員分工</b></p><p> ISD1420語言模塊:蔡俊鈺</p><p> DS18B20溫度模塊:鐘鵬</p><p> 上位機java繪圖模塊:陳忠崗</p><p><b> 硬件電路圖:沈霞<
69、/b></p><p><b> 系統(tǒng)總體設(shè)計:吳邊</b></p><p><b> 總結(jié)</b></p><p> 軟件延時與定時器計時</p><p> 課程開始時,我們嘗試過用軟件延時,發(fā)現(xiàn)軟件延時雖然設(shè)計簡單,使用方便,但是無法進行精確計時,會出現(xiàn)延遲時間不確定,數(shù)碼管顯示出
70、現(xiàn)抖動和錄音時序出現(xiàn)錯誤等諸多問題。所以我們在課程設(shè)計中利用定時器0進行計時,利用標志位來判斷時間是否到了我們所需的時間,這樣就使得連線看起來更清晰,同樣的可以精確的達到要求,使課程設(shè)計更加完美。</p><p><b> 模塊化及團隊合作</b></p><p> 在項目開發(fā)中,團隊合作是非常重要的,在對設(shè)計進行模塊劃分、統(tǒng)一變量之后,分別設(shè)計不同設(shè)計然后進行整
71、合,這樣進行開發(fā)是非常快速簡單的。同時將程序模塊化也是非常重要的,通過將程序模塊化使思路更清晰,我們就是先做了溫度采集DS18B20模塊,之后做數(shù)碼管顯示模塊,接著是ISD1420語音模塊,然后又用JAVA程序?qū)崿F(xiàn)了溫度曲線繪制的模塊,最后又加入了鍵盤模塊;以便控制,這樣感覺輕松多了。</p><p><b> 關(guān)于本次課程設(shè)計</b></p><p> 在本次設(shè)
72、計中實現(xiàn)了利用DS18B20采集溫度,在數(shù)碼管上顯示當前溫度,并且通過ISD1420報當前溫度,通過java程序中設(shè)置的警戒溫度,當溫度超過警戒值時發(fā)出警告聲。程序中將采集到的溫度發(fā)到上位機,通過java程序?qū)崿F(xiàn)對采集到的溫度繪制溫度變化曲線的功能。在老師的指導下,我們做到了自主設(shè)計,自主編寫代碼在設(shè)計中掌握的單片機設(shè)計的基本方法、鍛煉了團隊合作的能力!</p><p><b> 調(diào)試記錄及結(jié)果分析&
73、lt;/b></p><p><b> 遇到的問題和解決:</b></p><p> 1通過串口發(fā)送溫度給上位機,剛開始只能一位一位發(fā),不能將一個溫度3位連續(xù)的發(fā)出去。通過調(diào)試解決了這個問題。</p><p> 2.采集的溫度是三位一位一位發(fā)給上位機,JAVA程序中設(shè)置的是3位一起接收然后顯示,兩者沖突,后來通過用調(diào)試程序在串口窗口
74、printf一串三位溫度,通過調(diào)試解決了這個問題。</p><p> 3.在主函數(shù)之前加一個delay(1000),防止程序還沒有完全下載到單片機中,其中的串口中斷程序就開始執(zhí)行,造成程序錯誤。</p><p> 4.在做錄音模塊時發(fā)現(xiàn)錄音地址問題,無論錄幾個音,放音總是放最后一個錄的音,地址變化同樣也不起作用。后來發(fā)現(xiàn)和ISD1420相連的74HC273和74HC32沒有考慮到,所以
75、地址一直是最后一個地址。后來通過WR進行地址鎖存解決了這個問題。</p><p> 5數(shù)碼管顯示時一直存在著一個問題,就是3位數(shù),最后一位一直比前面2位亮度大,沒有得到解決,后來在詢問韓老師得到了解決,通過沒執(zhí)行完一次將數(shù)碼管關(guān)掉解決這個亮度不一樣的問題。</p><p> 6.在進行DS18B20程序編寫時,按照時序?qū)?,但但發(fā)現(xiàn)有許多延遲有問題,后來通過逐步修改,使程序得到了實現(xiàn)。&
76、lt;/p><p><b> 心得體會</b></p><p> 本次微機接口課程設(shè)計所作的課題是溫度控制器,從總體上是對89C52單片機、以及對DS18B20、ISD1420、LED、74HC273、74HC32A等的應用。此次課程設(shè)計主要有DS18B20溫度采集模塊,語言芯片ISD1420的錄音,報溫模塊,LED顯示模塊以及java程序繪圖模塊等。 溫度
77、控制器主要實現(xiàn)了利用DS18B20芯片采集當前溫度,然后利用單片機數(shù)碼管顯示當前溫度,并且通過用鍵盤控制并利用語音芯片ISD1420報溫,通過在java程序上設(shè)置的警戒溫度,當溫度超過警戒值時發(fā)出警告“溫度太高了”,最終將溫度值通過串口傳給上位機java程序?qū)崿F(xiàn)對采集到的溫度繪制溫度變化曲線。</p><p> 課程設(shè)計中我主要負責DS18B20芯片模塊程序的編寫。由于本設(shè)計課程設(shè)計采用了集成溫度傳感器,這樣不
78、僅減少了硬件電路的設(shè)計與調(diào)試,并且此溫度傳感元件的集成性能比傳統(tǒng)的元件要優(yōu)越得多,這樣簡化了電路的設(shè)計難度還降低了產(chǎn)品的價格。DS18B20程序的主要思路是:先啟動DS18B20溫度采集的轉(zhuǎn)換函數(shù)(包括初始化,等待響應脈沖,發(fā)跳過ROM命令,發(fā)啟動DS18B20溫度轉(zhuǎn)換功能命令),然后讀DS18B20溫度值(包括初始化,等待響應脈沖,延遲,發(fā)跳過ROM命令,發(fā)讀DS18B20溫度值功能命令),最后利用串行口擴展的LED顯示溫度值。同時語
79、言芯片的使用使溫度控制器更加實用性,普遍性。</p><p> 通過此次課程設(shè)計發(fā)現(xiàn)了自己的許多不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固。比如對串口調(diào)試過程中波特率設(shè)置的問題出現(xiàn)了一些問題,導致出現(xiàn)了一連串的問題。以及對于單片機將溫度信息發(fā)到上位機中java程序中,兩種程序中的發(fā)送和就收到數(shù)據(jù)的格式轉(zhuǎn)化也出現(xiàn)了一些問題。這次課程設(shè)計中最突出的問題,就是在錄音進行存儲時,沒有考慮到74HC273
80、以及74HC32A芯片在其中所起到的作用,導致地址一直沒有鎖存進去,一直報最后一次錄得音,這個問題糾結(jié)了我們2天時間。最后通過查閱資料和詢問老師得到了解答。在課程設(shè)計過程中通過小組中互相討論,交流經(jīng)驗,使自己學到了不少知識,收獲了很多,不久在編寫代碼方面,在連線方面也得到了不少的提升。最重要的一個方面是韓老師在程序模塊化方面對我們這組的指導,使我們受益匪淺。在課程設(shè)計過程中雖然有時候感覺理論上行得通應該正確的程序,但在運用到實踐的過程中
81、仍有意想不到的困惑,往往出現(xiàn)一連串的問題,使我們困惑不已,還要一步一步調(diào)試經(jīng)過一番努力才得以解決。這也激發(fā)了我今后努力學習的興趣,了解到了實踐的重要性。我想這將對我以后的學習產(chǎn)生積極的影響。通過這次設(shè)計,我懂得</p><p><b> 源程序清單</b></p><p> 單片機實驗(已模塊化)</p><p> //Include.h
82、</p><p> #include<reg52.h></p><p> #include<intrins.h></p><p> #define uchar unsigned char </p><p> #define uint unsigned int</p><p> void
83、 delay_1ms(uint x);</p><p> //ds18b20.h</p><p> #include<Include.h></p><p> sbit ds18b20_io=P2^2;</p><p> extern uchar temperature_low,temperature_high;</p
84、><p> extern uint temperature;</p><p> void reset_ds18b20();</p><p> void ack_ds18b20();</p><p> void write_ds18b20(uchar date);</p><p> uchar read_ds18b
85、20(void);</p><p> void convert_ds18b20();</p><p> void read_temperature();</p><p> uint readdata();</p><p> //rsd1420.h</p><p> # include <Include.
86、h></p><p> sbit lu=P2^4;</p><p> sbit play=P2^3;</p><p> sbit wr=P2^5;</p><p> extern uint address[20];</p><p> void play_word(uchar);</p>&
87、lt;p> void play_sentence(uchar);</p><p> void play_temp(uint temp);</p><p> //serial.h</p><p> #include<Include.h></p><p> extern uchar num;</p>&l
88、t;p> void init();</p><p> void sendtempertoserial(uint zhi);</p><p> //include.c</p><p> # include<include.h></p><p> void delay_1ms(uint x)</p>&l
89、t;p><b> {</b></p><p><b> uint y,z;</b></p><p> for(y=x;y>0;y--)</p><p> for(z=110;z>0;z--);</p><p><b> }</b></p&g
90、t;<p> //ds18b20.c</p><p> #include<ds18b20.h></p><p> void reset_ds18b20() //初始化命令</p><p><b> {</b></p><p> uchar dela
91、y=250;</p><p> ds18b20_io=1;</p><p> ds18b20_io=0;</p><p> while(--delay); //延遲500us</p><p> ds18b20_io=1;</p><p><b> delay=15;</b
92、></p><p> while(--delay); / /延遲30us;</p><p><b> }</b></p><p> //////////////////////////////////////////////////////////////////</p><p> vo
93、id ack_ds18b20() //等待響應脈沖</p><p><b> {</b></p><p> uchar delay=15;</p><p> while(ds18b20_io);</p><p> while(!ds18b20_io);</p><
94、p> while(--delay);</p><p><b> }</b></p><p> //////////////////////////////////////////////////////////////////////////////// </p><p> void write_ds18b20(uchar da
95、te) //寫數(shù)據(jù)</p><p><b> {</b></p><p> uchar i=0,delay;</p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p><b> delay=
96、30;</b></p><p> ds18b20_io=0;</p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p> if(date&0x01)</p><p><b>
97、 {</b></p><p> ds18b20_io=1;</p><p> while(--delay);</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b>&l
98、t;/p><p> ds18b20_io=0;</p><p> while(--delay);</p><p> ds18b20_io=1;</p><p><b> _nop_();</b></p><p><b> _nop_();</b></p>
99、<p><b> }</b></p><p><b> date>>=1;</b></p><p><b> }</b></p><p><b> }</b></p><p> uchar read_ds18b20(void
100、) //讀數(shù)據(jù)</p><p><b> {</b></p><p> uchar date=0,delay=8;</p><p> uchar i=0;</p><p> for(i=0;i<8;i++)</p><p><b> {</b>&
101、lt;/p><p><b> date>>=1;</b></p><p> ds18b20_io=0;</p><p><b> _nop_();</b></p><p> ds18b20_io=1;</p><p> while(--delay);<
102、/p><p> if(ds18b20_io)</p><p> date|=0x80;</p><p><b> delay=8;</b></p><p><b> }</b></p><p> return(date);</p><p>&l
103、t;b> }</b></p><p> void convert_ds18b20()</p><p><b> {</b></p><p> reset_ds18b20();</p><p> ack_ds18b20();</p><p> write_ds18
104、b20(0xcc);</p><p> write_ds18b20(0x44);</p><p><b> }</b></p><p> void read_temperature() //讀溫度</p><p><b> {</b></p><p>
105、uchar delay1=250;</p><p> reset_ds18b20(); //發(fā)初始化命令</p><p> ack_ds18b20(); //等待響應脈沖</p><p> write_ds18b20(0xcc); //發(fā)跳過ROM指令</p><p> write_ds18b
106、20(0xbe); //發(fā)啟動DS18B20溫度轉(zhuǎn)換功能命令</p><p> temperature_low=read_ds18b20(); //讀溫度低位字節(jié)</p><p> temperature_high=read_ds18b20(); //讀溫度高位字節(jié)</p><p><b> }</b></p>
107、<p> uint readdata() //讀數(shù)據(jù)</p><p><b> {</b></p><p><b> float tt;</b></p><p> uint temp;</p><p> read_temperature();</p
108、><p> temp=temperature_high;</p><p> temp<<=8; </p><p> temp=temp|temperature_low;</p><p> tt=temp*0.0625;</p><p> temp=tt*10; </
109、p><p> return(temp);</p><p><b> }</b></p><p> //rsd1420.c</p><p> # include<rsd1420.h></p><p> void play_sentence(uchar c)</p>&
110、lt;p><b> {</b></p><p><b> P1=c;</b></p><p><b> wr=0;</b></p><p> delay_1ms(1);</p><p><b> wr=1;</b></p>&
111、lt;p><b> play=0;</b></p><p> delay_1ms(1000);</p><p><b> play=1;</b></p><p><b> }</b></p><p> void play_word(uchar c )<
112、/p><p><b> { P1=c;</b></p><p><b> wr=0;</b></p><p> delay_1ms(1);</p><p><b> wr=1;</b></p><p><b> play=0;<
113、/b></p><p> delay_1ms(500);</p><p><b> play=1;</b></p><p><b> }</b></p><p> void play_temp(uint temp)</p><p><b>
114、{</b></p><p> uchar A1,A2,A2t,A3;</p><p> A1=temp/100;</p><p> A2t=temp%100;</p><p> A2=A2t/10;</p><p> A3=A2t%10;</p><p> delay_1
115、ms(1000);</p><p> play_sentence(address[13]);</p><p> play_word(address[A1]);</p><p> play_word(address[10]);</p><p><b> if(A2!=0)</b></p><p&
116、gt; play_word(address[A2]);</p><p> play_word(address[11]);</p><p> play_word(address[A3]);</p><p> play_word(address[12]);</p><p><b> }</b></p>
117、<p> //serial.c</p><p> #include<serial.h></p><p> void init()</p><p><b> {</b></p><p> TMOD=0x21;</p><p><b> TH1=0xfd;
118、</b></p><p><b> TL1=0xfd;</b></p><p> TH0=(65536-25000)/256;</p><p> TL0=(65536-25000)%256;</p><p><b> TR0=1;</b></p><p>
119、<b> ET0=1;</b></p><p><b> TR1=1;</b></p><p><b> REN=1;</b></p><p><b> SM0=0;</b></p><p><b> SM1=1;</b>&
120、lt;/p><p> EA=1; </p><p> ES=1; </p><p><b> }</b></p><p> void sendtempertoserial(uint zhi)</p><p><b> {</b></p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于單片機實現(xiàn)的溫度控制器課程設(shè)計
- 單片機課程設(shè)計----空調(diào)溫度控制器的設(shè)計
- 單片機數(shù)字傳感器課程設(shè)計-- 溫度控制器
- 單片機課程設(shè)計-時間控制器
- 單片機課程設(shè)計---單片機節(jié)日彩燈控制器
- 單片機課程設(shè)計:彩燈控制器設(shè)計
- 單片機課程設(shè)計---基于單片機的定時控制器設(shè)計
- 單片機課程設(shè)計-- 彩燈控制器的設(shè)計
- 彩燈控制器的設(shè)計 單片機課程設(shè)計
- 單片機課程設(shè)計---基于單片機控制的時鐘控制器
- 單片機課程設(shè)計——基于單片機的步進電機控制器設(shè)計
- 單片機溫度控制課程設(shè)計
- 彩燈控制器的設(shè)計 單片機課程設(shè)計
- 單片機課程設(shè)計--步進電機控制器設(shè)計
- 單片機課程設(shè)計——基于單片機的步進電機控制器設(shè)計
- 單片機課程設(shè)計---水溫控制器設(shè)計
- 單片機課程設(shè)計--水溫控制器設(shè)計
- 單片機課程設(shè)計--步進電機控制器
- 單片機課程設(shè)計--基于單片計算機的溫度控制器
- 單片機課程設(shè)計--節(jié)日彩燈控制器設(shè)計
評論
0/150
提交評論