單片機(jī)的電子溫計(jì)_第1頁(yè)
單片機(jī)的電子溫計(jì)_第2頁(yè)
單片機(jī)的電子溫計(jì)_第3頁(yè)
單片機(jī)的電子溫計(jì)_第4頁(yè)
單片機(jī)的電子溫計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、目錄第一章緒論 31.1 國(guó)內(nèi)外現(xiàn)狀 31.2 研究意義 41.3 本文內(nèi)容 錯(cuò)誤!未定義書(shū)簽。第二章系統(tǒng)框圖及創(chuàng)新點(diǎn)介紹 52.1 系統(tǒng)框圖 52.2 創(chuàng)新點(diǎn)介紹 錯(cuò)誤!未定義書(shū)簽。第三章系統(tǒng)硬件設(shè)計(jì) 53.1 CPU 介紹 53.1.1 CPU 介紹 53.1.2 主要功能特性 63.1.3AT89C52 各引腳功能及管腳電壓 63.1.4 自動(dòng)重裝載(向上或向下計(jì)數(shù)器)方式 錯(cuò)誤!未定義書(shū)簽。3.1.5 波特率發(fā)生器 錯(cuò)誤!未定義書(shū)簽。3.1.6 可編程時(shí)鐘輸出 錯(cuò)誤!未定義書(shū)簽。3.1.7 中斷 錯(cuò)誤!未定義書(shū)簽。3.1.8 時(shí)鐘振蕩器 錯(cuò)誤!未定義書(shū)簽。3.1.9 空閑節(jié)電模式 錯(cuò)誤

2、!未定義書(shū)簽。3.1.10 掉電模式 錯(cuò)誤!未定義書(shū)簽。3.1.11 程序存儲(chǔ)器的加密 錯(cuò)誤!未定義書(shū)簽。3.1.12Flash 存儲(chǔ)器的編程 錯(cuò)誤!未定義書(shū)簽。3.2 傳感器介紹 73.2.1 溫度傳感器的歷史及簡(jiǎn)介 73.2.2 DS18B20 性能特點(diǎn)與內(nèi)部結(jié)構(gòu) 73.2.3 DS18B20 工作時(shí)序 123.2.4 DS18B20 的操作協(xié)議 143.2.5 DS18B20 序列號(hào)編碼 錯(cuò)誤!未定義書(shū)簽。3.2.6 DS18B20 的測(cè)溫原理 163.2.7 DS18B20 的測(cè)溫流程 173.2.8 DS18B20 數(shù)據(jù)校驗(yàn)與糾錯(cuò) 173.2.9DS18B20 在測(cè)溫系統(tǒng)中的應(yīng)用 1

3、93.2.10 測(cè)溫系統(tǒng)的硬件工作原理 193.2.11注意事項(xiàng) 203.3 鍵盤(pán)電路介紹 203.3.1 鍵盤(pán)接口技術(shù) 203.3.2 獨(dú)立式鍵盤(pán)接口 213.4 顯示電路介紹 223.4.1 字符型液晶顯示器 RT1602C223.4.2 RT1602C 與單片機(jī)接口及程序 22第四章系統(tǒng)軟件設(shè)計(jì) 234.1 軟件設(shè)計(jì)流程圖 234.2 鍵盤(pán)程序設(shè)計(jì) 234.3 顯示程序設(shè)計(jì) 30 第五章系統(tǒng)測(cè)試 345.1 軟硬件測(cè)試結(jié)果 34 第六章結(jié)論 34第一章 緒論1.1 國(guó)內(nèi)外現(xiàn)狀溫度是一個(gè)非常重要的物理量,因?yàn)樗苯佑绊懭紵?、化學(xué)反應(yīng)、發(fā)酵、烘 烤、煅燒、蒸餾、濃度、擠壓成形、結(jié)晶以及空氣流

4、動(dòng)等物理和化學(xué)過(guò)程。溫度 控制失誤就可能引起生產(chǎn)安全、產(chǎn)品質(zhì)量、產(chǎn)品產(chǎn)量等一系列問(wèn)題。因此對(duì)溫度 的檢測(cè)的意義就越來(lái)越大。溫度采集控制系統(tǒng)在工業(yè)生產(chǎn)、科學(xué)研究和人們的生 活領(lǐng)域中,得到了廣泛應(yīng)用。在工業(yè)生產(chǎn)過(guò)程中,很多時(shí)候都需要對(duì)溫度進(jìn)行嚴(yán) 格的監(jiān)控,以使得生產(chǎn)能夠順利的進(jìn)行,產(chǎn)品的質(zhì)量才能夠得到充分的保證。使 用自動(dòng)溫度控制系統(tǒng)可以對(duì)生產(chǎn)環(huán)境的溫度進(jìn)行自動(dòng)控制,保證生產(chǎn)的自動(dòng)化、 智能化能夠順利、安全進(jìn)行,從而提高企業(yè)的生產(chǎn)效率。 溫度采集控制系統(tǒng)是在嵌入式系統(tǒng)設(shè)計(jì)的基礎(chǔ)上發(fā)展起來(lái)的。嵌入式系統(tǒng)雖然起 源于微型計(jì)算機(jī)時(shí)代,但是微型計(jì)算機(jī)的體積、價(jià)位、可靠性,都無(wú)法滿足廣大 對(duì)象對(duì)嵌入式系統(tǒng)的

5、要求,因此,嵌入式系統(tǒng)必須走獨(dú)立發(fā)展道路。這條道路就 是芯片化道路。將計(jì)算機(jī)做在一個(gè)芯片上,從而開(kāi)創(chuàng)了嵌入式系統(tǒng)獨(dú)立發(fā)展的單 片機(jī)時(shí)代。單片機(jī)誕生于二十世紀(jì)七十年代末,經(jīng)歷了 SCMMCI和SOC三大階段。在現(xiàn)代化的工業(yè)生產(chǎn)中,電流、電壓、溫度、壓力、流量、流速和開(kāi)關(guān)量都 是常用的主要被控參數(shù)。例如:在冶金工業(yè)、化工生產(chǎn)、電力工程、造紙行業(yè)、 機(jī)械制造和食品加工等諸多領(lǐng)域中, 人們都需要對(duì)各類加熱爐、 熱處理爐、 反應(yīng) 爐和鍋爐中的溫度進(jìn)行檢測(cè)和控制。采用 MCS-51單片機(jī)來(lái)對(duì)溫度進(jìn)行控制,不 僅具有控制方便、 組態(tài)簡(jiǎn)單和靈活性大等優(yōu)點(diǎn), 而且可以大幅度提高被控溫度的 技術(shù)指標(biāo), 從而能夠大

6、大提高產(chǎn)品的質(zhì)量和數(shù)量。 因此,單片機(jī)對(duì)溫度的控制問(wèn) 題是一個(gè)工業(yè)生產(chǎn)中經(jīng)常會(huì)遇到的問(wèn)題。 同時(shí)溫度也是生活中最常見(jiàn)的一個(gè)物理 量,也是人們很關(guān)心的一個(gè)物理量, 它與我們的生活息息相關(guān), 有著十分重要的 意義,在工業(yè)生產(chǎn)中, 溫度過(guò)高或過(guò)低會(huì)直接影響到產(chǎn)品的質(zhì)量、 對(duì)機(jī)械設(shè)備和 控制系統(tǒng)中的各種元器件造成一定的損壞, 嚴(yán)重的會(huì)影響到生產(chǎn)安全。 在日常生 活中,溫度過(guò)高或過(guò)低同樣會(huì)造成一些不良影響。在實(shí)際生產(chǎn)、 生活等各個(gè)領(lǐng)域中, 溫度是環(huán)境因素的不可或缺的一部分, 對(duì) 溫度及時(shí)精確的控制和檢測(cè)顯得尤為重要。 比如,農(nóng)業(yè)上土壤各個(gè)層面上的溫度 將會(huì)影響植物的生長(zhǎng); 在醫(yī)院的監(jiān)護(hù)中也用到溫度的測(cè)量

7、。 在工業(yè)中, 料桶里外 上限溫度要求不一, 以及熱處理中工件各個(gè)部位的溫度對(duì)工件形成后的性能至關(guān) 重要等等。 現(xiàn)代電子工業(yè)的飛速發(fā)展對(duì)自動(dòng)測(cè)試的要求越來(lái)越高。 隨著人們生活 水平的不斷提高 , 單片機(jī)控制無(wú)疑是人們追求的目標(biāo)之一,它所給人帶來(lái)的方便 也是不可否定的, 其中數(shù)字溫度計(jì)就是一個(gè)典型的例子, 但人們對(duì)它的要求越來(lái) 越高,要為現(xiàn)代人工作、科研、生活、提供更好的更方便的設(shè)施就需要從數(shù)單片 機(jī)技術(shù)入手,一切向著數(shù)字化控制,智能化控制方向發(fā)展。1.2 研究意義采用單片機(jī)對(duì)溫度進(jìn)行控制 , 不僅具有控制方便和組態(tài)簡(jiǎn)單的優(yōu)點(diǎn) , 而且可 以提高被控溫度的技術(shù)指標(biāo)。 針對(duì)以上情況, 在控制成本的

8、前提下, 通過(guò)本設(shè)計(jì) 設(shè)計(jì)一款能夠?qū)崟r(shí)檢測(cè)控制溫度, 又具有對(duì)系統(tǒng)設(shè)定不同的報(bào)警溫度的溫度控制 報(bào)警系統(tǒng)功能。 此系統(tǒng)能夠滿足現(xiàn)代生產(chǎn)生活的需要, 效率高, 具有較強(qiáng)的穩(wěn)定 性和靈活性。 因此,在生產(chǎn)和生活中要對(duì)溫度進(jìn)行嚴(yán)格的控制, 使溫度在規(guī)定的 范圍內(nèi)變化。 通過(guò)本系統(tǒng)提高學(xué)生對(duì)于溫度控制的認(rèn)識(shí)。 在學(xué)習(xí)實(shí)踐中提高對(duì)理 論的認(rèn)知能力和動(dòng)手解決實(shí)際問(wèn)題的能力,達(dá)到教學(xué)實(shí)踐相結(jié)合的目的。1.3 研究?jī)?nèi)容本項(xiàng)目采用 STC89C52 單片機(jī)作為核心控制芯片,采用 DS18B20 作為溫度傳感器,將 采集到的溫度數(shù)據(jù)顯示在 1602 液晶上,同時(shí)可以將溫度數(shù)據(jù)上傳到 PC 機(jī)內(nèi)顯示。本文內(nèi) 容分為

9、以下幾個(gè)部分。第一章 緒論。第二章 系統(tǒng)框圖及創(chuàng)新點(diǎn)介紹。第三章 系統(tǒng)硬件設(shè)計(jì)。第四章 系統(tǒng)軟件設(shè)計(jì)。第五章 系統(tǒng)測(cè)試。第六章 結(jié)論。第二章系統(tǒng)框圖及創(chuàng)新點(diǎn)介紹2.1系統(tǒng)框圖第三章系統(tǒng)硬件設(shè)計(jì)3.1 CPU介紹3.1.1 CPU 簡(jiǎn)介STC89C52是51系列單片機(jī)的一個(gè)型號(hào),它是ATMEL公司生產(chǎn)的。STC89C52是一個(gè)低電壓,高性能CMOS 8位單片機(jī),片內(nèi)含 8k bytes的可反復(fù)擦寫(xiě)的Flash只讀程序存儲(chǔ)器和256 bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),器件采用 ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存

10、儲(chǔ)單元,功能強(qiáng)大的AT89C52單片機(jī)可為您提供許多較復(fù)雜系統(tǒng)控制應(yīng)用場(chǎng)合。STC89C52有40個(gè)引腳,32個(gè)外部雙向輸入/輸出(I/O )端口,同時(shí)內(nèi)含 2個(gè)外中斷 口,3個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,2個(gè)讀寫(xiě)口線, AT89C52可以按照常規(guī)方法進(jìn)行編程,但不可以在線編程 (S系列的才支持在線編程)。其將通用的微處理器和Flash存儲(chǔ)器結(jié)合在一起,特別是可反復(fù)擦寫(xiě)的Flash存儲(chǔ)器可有效地降低開(kāi)發(fā)成本。STC89C52有PDIP、PQFP/TQFP及PLCC等三種封裝形式,以適應(yīng)不同產(chǎn)品的需求。3.1.2主要功能特性兼容 MCS51指令系統(tǒng)8k可反復(fù)擦寫(xiě)(1000次)F

11、lash ROM32個(gè)雙向I/O 口256x8bit內(nèi)部 RAM3個(gè)16位可編程定時(shí)/計(jì)數(shù)器中斷時(shí)鐘頻率 0-24MHZ2個(gè)串行中斷可編程UART串行通道2個(gè)外部中斷源共8個(gè)中斷源2個(gè)讀寫(xiě)中斷口線-3級(jí)加密位低功耗空閑和掉電模式-軟件設(shè)置睡眠和喚醒功能3.1.3 STC89C52各引腳功能及管腳電壓概述:STC89C52為40腳雙列直插封裝的8位通用微處理器,采用工業(yè)標(biāo)準(zhǔn)的C51內(nèi)核,在內(nèi)部功能及管腳排布上與通用的8xc52相同,其主要用于會(huì)聚調(diào)整時(shí)的功能控制。功能包括對(duì)會(huì)聚主IC內(nèi)部寄存器、數(shù)據(jù) RAM及外部接口等功能部件的初始化,會(huì)聚調(diào)整控制,會(huì)聚測(cè)試圖控制,紅外遙控信號(hào)IR的接收解碼及與

12、主板CPU通信等。主要管腳有:XTAL1 ( 19腳)和XTAL2 ( 18腳)為振蕩器輸入輸出端口,外接12MHz晶振。RST/Vpd (9腳)為復(fù)位輸入端口,外接電阻電容組成的復(fù)位電路。VCC (40腳)和 VSS (20腳)為供電端口,分別接 +5V電源的正負(fù)端。P0P3為可編程通用I/O腳,其功能用途由軟件定義,在本設(shè)計(jì)中,P0端口( 3239腳)被定義為N1功能控制端口,分別與N1的相應(yīng)功能管腳相連接,13腳定義為IR輸入端,10腳和11腳定義為I2C總線控制端口,分別連接N1的SDAS ( 18腳)和SCLS ( 19腳)端口,12腳、27腳及28腳定義為握手信號(hào)功能端口,連接主板

13、 CPU的相應(yīng)功能端,用于當(dāng)前制式的檢測(cè)及會(huì)聚調(diào)整狀態(tài)進(jìn)入的控制功能。i2 EJQP1 1CPliCP1屮匚 PI rc RSTC F) )aRajoq tra.w. rohPJ 4 C畫(huà)P3住匸 兩P3T匸XTf21 ::C .VPDIP3.2 傳感器介紹3.2.1 溫度傳感器的歷史及簡(jiǎn)介溫度的測(cè)量是從金屬 (物質(zhì)) 的熱脹冷縮開(kāi)始。水銀溫度計(jì)至今仍是各種溫度 測(cè)量的計(jì)量標(biāo)準(zhǔn)。 可是它的缺點(diǎn)是只能近距離觀測(cè), 而且水銀有毒,玻璃管易碎。 代替水銀的有酒精溫度計(jì)和金屬簧片溫度計(jì), 它們雖然沒(méi)有毒性, 但測(cè)量精度很 低,只能作為一個(gè)概略指示。 不過(guò)在居民住宅中使用已可滿足要求。 在工業(yè)生產(chǎn) 和實(shí)

14、驗(yàn)研究中為了配合遠(yuǎn)傳儀表指示, 出現(xiàn)了許多不同的溫度檢測(cè)方法, 常用的 有電阻式、熱電偶式、 PN 結(jié)型、輻射型、光纖式及石英諧振型等。它們都是基 于溫度變化引起其物理參數(shù) (如電阻值,熱電勢(shì)等 )的變化的原理。 隨著大規(guī)模集 成電路工藝的提高,出現(xiàn)了多種集成的數(shù)字化溫度傳感器。3.2.2 DS18B20 性能特點(diǎn)與內(nèi)部結(jié)構(gòu)DS18B2C是美國(guó)DALLAS司生產(chǎn)的單總線數(shù)字溫度傳感器,它具有微型化、 低功耗、高性能、抗干擾能力強(qiáng)、易于與未處理器接口等優(yōu)點(diǎn),適合于各種溫度 測(cè)控系統(tǒng)。該器件將半導(dǎo)體溫敏器件、 A/D 轉(zhuǎn)化器、存儲(chǔ)器等做在一個(gè)很小的集成電路 芯片上,傳感器直接輸出的就是溫度信號(hào)數(shù)字

15、值。信號(hào)傳輸采用兩芯(或三芯) 電纜構(gòu)成的單總線結(jié)構(gòu)。 一條單總線上可以掛接若干個(gè)數(shù)字溫度傳感器, 每個(gè)傳 感器有一個(gè)唯一的地址碼。 微控制器通過(guò)對(duì)器件的尋址, 就可以讀取某個(gè)傳感器 的溫度值,從而簡(jiǎn)化了信號(hào)采集系統(tǒng)的電路結(jié)構(gòu)。(1) DS18B20 的性能特點(diǎn)如下:1) 獨(dú)特的單線接口僅需要一個(gè)端口引腳進(jìn)行通信;2) 多個(gè)DS18B2C可以并聯(lián)在惟一的三線上,實(shí)現(xiàn)多點(diǎn)組網(wǎng)功能;3) 無(wú)須外部器件;4) 可通過(guò)數(shù)據(jù)線供電,電壓范圍為 3.05.5V;5) 零待機(jī)功耗;6) 溫度以 3 位數(shù)字顯示;7) 用戶可定義報(bào)警設(shè)置;8) 報(bào)警搜索命令識(shí)別并標(biāo)志超過(guò)程序限定溫度(溫度報(bào)警條件)的器件;9)

16、 負(fù)電壓特性,電源極性接反時(shí),溫度計(jì)不會(huì)因發(fā)熱而燒毀,但不能正常 工作。(2) DS18B20 的外形及管腳排列如下圖 2:弓i刊期m歹J- -gs:n-?-oA弓I卿侃明GNO OO Vran IMC-地_引迭VDD_空腳OS T mo圖 3.7 DS18B20 封裝(3)DS18B20內(nèi)部結(jié)構(gòu)主要由六分組成:1)64位光刻ROM開(kāi)始8位是產(chǎn)品類型的編號(hào),接著是每個(gè)器件的惟一的 序號(hào),共有48位,最后8位是前56位的CRC校驗(yàn)碼,這也是多個(gè)DS18B20可以 采用一線進(jìn)行通信的原因10 。 64位閃速ROM勺結(jié)構(gòu)如下:8b檢驗(yàn)CRC48b序列號(hào)8b工廠代碼(10H)MSBLSB MSBLSB

17、 MSBLSB圖3.8 DS18B20內(nèi)部結(jié)構(gòu)2) 非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL,可通過(guò)軟件寫(xiě)入用戶報(bào)警上下限值。3) 高速暫存存儲(chǔ),可以設(shè)置DS18B20溫度轉(zhuǎn)換的精度。DS18B2C溫度傳感器的內(nèi)部存儲(chǔ)器還包括一個(gè)高速暫存 RAM和一個(gè)非易失性 的可電擦除的UPRAM高速暫存RAM的結(jié)構(gòu)為8字節(jié)的存儲(chǔ)器,結(jié)構(gòu)如圖 2.1 所示。頭2個(gè)字節(jié)包含測(cè)得的溫度信息,第3和第4字節(jié)TH和TL的拷貝,是易 失的,每次上電復(fù)位時(shí)被刷新。第5個(gè)字節(jié),為配置寄存器,它的內(nèi)容用于確定 溫度值的數(shù)字轉(zhuǎn)換分辨率。DS18B2C工作時(shí)寄存器中的分辨率轉(zhuǎn)換為相應(yīng)精度的012345678ByteByteByteBy

18、teByteByteByteByteByte溫度測(cè)量值LSB (50H)溫度測(cè)量值MSB (50H)TH高溫寄存器TL低溫寄存器配位寄存器預(yù)留(FFH)預(yù)留(0CH)預(yù)留(IOH)循環(huán)冗余碼校驗(yàn)(CRC)2E2PROMTH高溫寄存器TL低溫寄 存器配位寄存器溫度數(shù)值。它的內(nèi)部存儲(chǔ)器結(jié)構(gòu)和字節(jié)定義如圖 2.2所示。低5位一直為1, TM 是工作模式位,用于設(shè)置 DS18B20在工作模式還是在測(cè)試模式,圖2.3 DS18B20內(nèi)部存儲(chǔ)器結(jié)構(gòu)DS18B20出廠時(shí)該位被設(shè)置為0,用戶要去改動(dòng),R1和R0決定溫度轉(zhuǎn)換的 精度位數(shù),來(lái)設(shè)置分辨率,如圖2.3。TRRM1011111圖2.4 DS18B20字

19、節(jié)定義由表2.1可見(jiàn),分辨率越高,所需要的溫度數(shù)據(jù)轉(zhuǎn)換時(shí)間越長(zhǎng)。因此,在實(shí) 際應(yīng)用中要將分辨率和轉(zhuǎn)換時(shí)間權(quán)衡考慮。高速暫存RAM勺第6、7、8字節(jié)保留未用,表現(xiàn)為全邏輯1。第9字節(jié)讀出 前面所有8字節(jié)的CRC碼,可用來(lái)檢驗(yàn)數(shù)據(jù),從而保證通信數(shù)據(jù)的正確性。當(dāng)DS18B2C接收到溫度轉(zhuǎn)換命令后,開(kāi)始啟動(dòng)轉(zhuǎn)換。轉(zhuǎn)換完成后的溫度值就 以16位帶符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼形式存儲(chǔ)在高速暫存存儲(chǔ)器的第1、2字節(jié)。單片機(jī)可以通過(guò)單線接口讀出該數(shù)據(jù), 讀數(shù)據(jù)時(shí)低位在先,高位在后,數(shù)據(jù)格式以 0.0625 C/ LSB形式表示。當(dāng)符號(hào)位S= 0時(shí),表示測(cè)得的溫度值為正值,可以直接將二進(jìn)制位轉(zhuǎn)換為 十進(jìn)制;當(dāng)符號(hào)位S=

20、 1時(shí),表示測(cè)得的溫度值為負(fù)值,要先將補(bǔ)碼變成原碼, 再計(jì)算十進(jìn)制數(shù)值。表2.2是一部分溫度值對(duì)應(yīng)的二進(jìn)制溫度數(shù)據(jù)。表2.1 DS18B20溫度轉(zhuǎn)換時(shí)間表:RR分辨率/溫度最大轉(zhuǎn)向時(shí)10位間/ms00993.750110187.510113751112750表2.2一部分溫度對(duì)應(yīng)值表溫度/ C二進(jìn)制表示十六進(jìn)制表示+1250000 0111 1101000007D0H+850000 0101 010100000550H+25.06250000 0001 100100000191H+10.1250000 0000 1010000100A2H+0.50000 0000 000000100008H0

21、0000 0000 000010000000H-0.51111 1111 11110000FFF8H-10.1251111 1111 01011110FF5EH-25.06251111 1110 01101111FE6FH-551111 1100 10010000FC90H?K?K4) CRC勺產(chǎn)生在64 b ROM勺最高有效字節(jié)中存儲(chǔ)有循環(huán)冗余校驗(yàn)碼(CRC。 主機(jī)根據(jù)ROM勺前56位來(lái)計(jì)算CRCfi,并和存入DS18B20中的CRCfi做比較, 以判斷主機(jī)收到的ROh數(shù)據(jù)是否正確。另外,由于DS18B2C單線通信功能是分時(shí)完成的,它有嚴(yán)格的時(shí)隙概念,因 此讀寫(xiě)時(shí)序很重要。系統(tǒng)對(duì)DS18B2

22、0的各種操作按協(xié)議進(jìn)行。操作協(xié)議為:初使 化DS18B20(發(fā)復(fù)位脈沖)一發(fā)ROM功能命令一發(fā)存儲(chǔ)器操作命令一處理數(shù)據(jù)。5)寄生電源寄生電源有二極管VD1 VD2寄生電容C和電源檢測(cè)電路組成,如圖所示。 電源檢測(cè)電路用于判定供電方式。 DS18B20有兩種供電方式:3.0 5.5V的電源供電方式和寄生電源供電方式(直接從數(shù)據(jù)線獲取電源)。若采用外部電源給器件供電,外部電源接VCC引腳通過(guò)VD2向器件供電,如 圖所示。寄生電源供電時(shí),VCg接地,器件從單線總線上獲取電源,如圖所示。在 I/O線呈低電平時(shí),改由電容 C上的典雅繼續(xù)向器件供電。該寄生電源的優(yōu)點(diǎn):osfa寄生電源供電6)溫度報(bào)警信號(hào)D

23、S18B2C完成溫度轉(zhuǎn)化后,就把測(cè)的的溫度值與 Th、TI做比較,若TTh或 T11圖2.6寫(xiě)時(shí)序?qū)憰r(shí)序包括寫(xiě)0時(shí)序和寫(xiě)1時(shí)序。所有寫(xiě)時(shí)序至少需要60us,且在2次獨(dú) 立的寫(xiě)時(shí)序之間至少需要1us的恢復(fù)時(shí)間,都是以總線拉低開(kāi)始。寫(xiě)1時(shí)序,主 機(jī)輸出低電平,延時(shí)2us,然后釋放總線,延時(shí)60us。寫(xiě)0時(shí)序,主機(jī)輸出低電 平,延時(shí)60us,然后釋放總線,延時(shí)2us8。(3) 讀時(shí)序* 主機(jī)寫(xiě)0時(shí)序L主機(jī)寫(xiě)1時(shí)序1 1主機(jī)采樣王機(jī)采樣45 ”2- - - 45-圖2.7讀時(shí)序總線器件僅在主機(jī)發(fā)出讀時(shí)序是,才向主機(jī)傳輸數(shù)據(jù),所以,在主機(jī)發(fā)出讀 數(shù)據(jù)命令后,必須馬上產(chǎn)生讀時(shí)序,以便從機(jī)能夠傳輸數(shù)據(jù)。所有

24、讀時(shí)序至少需 要60us,且在2次獨(dú)立的讀時(shí)序之間至少需要 1us的恢復(fù)時(shí)間。每個(gè)讀時(shí)序都 由主機(jī)發(fā)起,至少拉低總線1us。主機(jī)在讀時(shí)序期間必須釋放總線,并且在時(shí)序 起始后的15us之內(nèi)采樣總線狀態(tài)。主機(jī)輸出低電平延時(shí)2us,然后主機(jī)轉(zhuǎn)入輸入模式延時(shí)12us,然后讀取總線當(dāng)前電平,然后延時(shí) 50us4。3.2.4 DS18B20的操作協(xié)議DS18B2C單線通信功能是分時(shí)完成的。單線信號(hào)包括復(fù)位脈沖,響應(yīng)脈沖, 寫(xiě)“ 0”,寫(xiě)“ 1”,讀“ 1”。它們有嚴(yán)格的時(shí)隙概念。系統(tǒng)對(duì)DS18B20的操作以ROM命令(5個(gè))和存儲(chǔ)器命令(6)形式表現(xiàn),各種指令功能如表 2-3,2-4所 示。表 2-3DS

25、18B20 ROM 命令指令約定代碼功能讀ROM33H讀DS18B20中的編碼(既讀 64位地址)符合ROM55H發(fā)出此命令后,接著發(fā)出64位ROM編碼,訪問(wèn)單總線上與該編碼相應(yīng)的DS18B20使之做出響應(yīng),為下一步對(duì)該DS18B20的讀寫(xiě)做準(zhǔn)備。搜 索ROM0F0H用于確定掛在冋一總線上 DS18B20的個(gè)數(shù)和識(shí)別64位ROM地址, 為操作各個(gè)器件做好準(zhǔn)備。跳 過(guò)ROM0CCH忽略64位ROM地址,直接向 DS18B20發(fā)溫度轉(zhuǎn)換命令,適用于 單片工作。告警搜索命令0ECH執(zhí)行后,只有溫度超過(guò)設(shè)定上限或是下限的片子做出響應(yīng)。表 2-4DS18B20 RAM 命令指令約定代碼功能溫度變換44H

26、啟動(dòng)DS18B20進(jìn)行溫度轉(zhuǎn)換,結(jié)果存入內(nèi)部RAM。讀暫存器0BEH讀內(nèi)部RAM中的內(nèi)容。寫(xiě)暫存器4EH發(fā)出向內(nèi)部RAM的第3、4字節(jié)寫(xiě)上、下限溫度數(shù)據(jù)命令, 緊跟該命令之后,是傳送兩字節(jié)的數(shù)據(jù)。復(fù)制48H將RAM中的第3、4字內(nèi)容復(fù)制到 EEPROM中。暫存器重調(diào)EEPRAM0B8H將EEPROM中內(nèi)容恢復(fù)到 RAM中的第3、4字節(jié)。讀供電方式0B4H讀DS18B20的供電模式,寄生供電是DS18B20發(fā)送“ 0”,外接電源供電 DS18B20發(fā)送“ 1”。對(duì)DS18B20操作協(xié)議是:初始化DS18B20(發(fā)復(fù)位脈沖)一發(fā)ROM功能命令 處理數(shù)據(jù)發(fā)存儲(chǔ)命令處理數(shù)據(jù)。初始化:主機(jī)發(fā)一位復(fù)位脈沖

27、(對(duì)短為 480us的低電平),接著主機(jī)釋放總 線進(jìn)入接收狀態(tài),DS18B2C在檢測(cè)到I/O引腳上的上升沿之后,等待1560us然 后發(fā)出存在脈沖(60240us的低電平)。寫(xiě)時(shí)間片:將數(shù)據(jù)線從高電平拉至低電平,產(chǎn)生起始信號(hào)。在 15us之內(nèi)將 所需寫(xiě)的位送到數(shù)據(jù)線上,在15us到60us之間對(duì)數(shù)據(jù)線進(jìn)行采樣,如果采樣為 高電平,就寫(xiě)1,如果是低電平,寫(xiě)0就發(fā)生。在開(kāi)始另一個(gè)寫(xiě)周期前必須有1us 以上的高電平恢復(fù)期。讀時(shí)間片:主機(jī)將數(shù)據(jù)線從高電平拉至低電平 1us以上,再使數(shù)據(jù)線升為高 電平,從而產(chǎn)生讀起始信號(hào)。主機(jī)在讀時(shí)間片下降沿之后 15us內(nèi)完成讀位。每 個(gè)讀周期最短的持續(xù)時(shí)間為60us

28、,各個(gè)讀周期之間必須有1us以上的高電平恢 復(fù)期。用戶對(duì)于DS18B20勺訪問(wèn)有三個(gè)步驟:(1) .初始化用戶通過(guò)信號(hào)線,向DS18B2C發(fā)送一個(gè)滿足特定時(shí)序的負(fù)脈沖,信號(hào)線上所 有DS18B2C芯片都被復(fù)位。準(zhǔn)備接受用戶的序列號(hào)命令。(2) .序列號(hào)訪問(wèn)命令接下來(lái),用戶通過(guò)信號(hào)線,發(fā)送一個(gè)特定的64位序列號(hào)編碼。這時(shí),信號(hào)線上所有相連DS18B2C都進(jìn)行編碼匹配,只有編碼一致的DS18B2C才被激活,可 以接受下面的內(nèi)存訪問(wèn)命令。(3) .存訪問(wèn)命令在用戶發(fā)送序列號(hào)訪問(wèn)命令選定 DS18B2C芯片后,被選中的芯片便可以接受 內(nèi)存訪問(wèn)命令。讀取溫度數(shù)據(jù),設(shè)定溫度報(bào)警限。二進(jìn)制數(shù)據(jù)與溫度的對(duì)應(yīng)關(guān)

29、系 見(jiàn)表2-5。表2-5二進(jìn)制數(shù)據(jù)與溫度的對(duì)應(yīng)關(guān)系溫度溫度數(shù)據(jù)輸出(二進(jìn)制)溫度數(shù)據(jù)輸出(16進(jìn)制)+ 125 C0000 0111 1101 000007D0h+85 C0000 0101 0101 00000550h+25.0625 C0000 0001 1001 00010191h+ 10.125 C0000 0000 1010 001000A2h+0.5 C0000 0000 0000 10000008h0 C0000 0000 0000 0000000h-0.5 C1111 1111 1111 1000FFF8h-10.125 C1111 1111 0101 1110FF5Eh-25

30、.0625 C1111 1110 0110 1111FF6Fh-55 C1111 1100 1001 0000FC90h325 DS18B20的測(cè)溫原理每一片DS18B20在其ROM中都存有其唯一的48位序列號(hào),在出廠前已寫(xiě)入 片內(nèi)ROM中。主機(jī)在進(jìn)入操作程序前必須用讀 ROM(33H命令將該DS18B20的序 列號(hào)讀出。程序可以先跳過(guò)ROM啟動(dòng)所有DS18B20進(jìn)行溫度變換,之后通過(guò)匹配ROM 再逐一地讀回每個(gè)DS18B20的溫度數(shù)據(jù)。DS18B20的測(cè)溫原理如圖2.8所示,圖中低溫度系數(shù)晶振的振蕩頻率受溫度 的影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給減法計(jì)數(shù)器1,高溫度系數(shù)晶振隨溫度變化其

31、震蕩頻率明顯改變,所產(chǎn)生的信號(hào)作為減法計(jì)數(shù)器2的脈沖輸入,圖中還隱含著計(jì)數(shù)門,當(dāng)計(jì)數(shù)門打開(kāi)時(shí),DS18B20就對(duì)低溫度系數(shù)振蕩器產(chǎn)生的 時(shí)鐘脈沖后進(jìn)行計(jì)數(shù),進(jìn)而完成溫度測(cè)量。計(jì)數(shù)門的開(kāi)啟時(shí)間由高溫度系數(shù)振蕩 器來(lái)決定,每次測(cè)量前,首先將-55 C所對(duì)應(yīng)的基數(shù)分別置入減法計(jì)數(shù)器 1和溫 度寄存器中,減法計(jì)數(shù)器1和溫度寄存器被預(yù)置在-55 C所對(duì)應(yīng)的一個(gè)基數(shù)值。 減法計(jì)數(shù)器1對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行減法計(jì)數(shù),當(dāng)減法計(jì)數(shù)器1 的預(yù)置值減到0時(shí)溫度寄存器的值將加1,減法計(jì)數(shù)器1的預(yù)置將重新被裝入, 減法計(jì)數(shù)器1重新開(kāi)始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán)直 到減法計(jì)數(shù)器2計(jì)數(shù)到0

32、時(shí),停止溫度寄存器值的累加,此時(shí)溫度寄存器中的數(shù) 值即為所測(cè)溫度。圖2.8中的斜率累加器用于補(bǔ)償和修正測(cè)溫過(guò)程中的非線性, 其輸出用于修正減法計(jì)數(shù)器的預(yù)置值, 只要計(jì)數(shù)門仍未關(guān)閉就重復(fù)上述過(guò)程, 直 至溫度寄存器值達(dá)到被測(cè)溫度值,這就是 DS18B20的測(cè)溫原理。另外,由于DS18B20單線通信功能是分時(shí)完成的,他有嚴(yán)格的時(shí)隙概念,因此讀寫(xiě)時(shí)序很重要。系統(tǒng)對(duì) DS18B20勺各種操作必須按協(xié)議進(jìn)行。操作協(xié)議為: 初始化DS18B20(發(fā)復(fù)位脈沖)一發(fā)ROM功能命令-發(fā)存儲(chǔ)器操作命令一處理數(shù) 據(jù)。圖2.8測(cè)溫原理內(nèi)部裝置3.2.7 DS18B20的測(cè)溫流程圖2.9 DS18B20測(cè)溫流程3.2.

33、8 DS18B20數(shù)據(jù)校驗(yàn)與糾錯(cuò)在進(jìn)行多點(diǎn)測(cè)溫時(shí),敏感元件與數(shù)據(jù)采集系統(tǒng)一般有一定的距離,不可避免的要遇到電磁干擾。信號(hào)衰減問(wèn)題,使數(shù)據(jù)發(fā)生錯(cuò)誤。如果在數(shù)據(jù)的傳輸過(guò)程中 系統(tǒng)具有一定的容錯(cuò)能力,在糾錯(cuò)范圍內(nèi),就可以對(duì)錯(cuò)誤的數(shù)據(jù)進(jìn)行糾正,提高 抗干擾能力和加大傳輸距離,當(dāng)錯(cuò)誤超出糾錯(cuò)范圍時(shí),也可以識(shí)別出錯(cuò)誤的數(shù)據(jù) 進(jìn)行從新采集,從而提高了采集數(shù)據(jù)的可信度。DS18B20在設(shè)計(jì)時(shí)已經(jīng)為用戶提高了用于檢驗(yàn)遇救錯(cuò)的循環(huán)冗余校驗(yàn)碼(cyclic redundancy code crc )。下邊 將就用軟件對(duì)DS18B2C中數(shù)據(jù)的校驗(yàn)與糾錯(cuò)進(jìn)行詳細(xì)的討論,并給出了用查表法進(jìn)行校驗(yàn)及糾錯(cuò)的算法以及實(shí)現(xiàn)這一算

34、法的過(guò)程。字節(jié)數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)如表2-10所示。圖2-109字節(jié)數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)圖CRC:保留保留保留配 置寄存 器低 溫限值TL高 溫限值TL溫 度高字 節(jié)溫 度低字 節(jié)由溫度存儲(chǔ)器的低字節(jié)、高字節(jié),低溫報(bào)警器TL,高字節(jié)報(bào)警觸發(fā)器TH配置寄存器,和CRC字節(jié)組成了 DS18B20勺數(shù)據(jù)存儲(chǔ)器,共九個(gè)字節(jié),結(jié)構(gòu)如圖 2-9。其中溫度存儲(chǔ)器的低位字節(jié)、高位字節(jié)是以符號(hào)擴(kuò)展,0表示正數(shù),1表示負(fù)數(shù)值,其余位正整數(shù)部分。例如16進(jìn)制溫度值018CH對(duì)應(yīng)的二進(jìn)制數(shù)為0000000110001100, 溫 度值是 24.75 C ; FF5EH對(duì) 應(yīng)的二 進(jìn)制為 111111110101111Q溫度值-10.

35、125 C。圖中的CRC是通過(guò)CRC發(fā)生器產(chǎn)生的。 CRC發(fā)生器產(chǎn)生的邏輯電路是由移位寄存器或異或門組成,也稱除法邏輯電路。CRC發(fā)生器的邏輯電路對(duì)應(yīng)的表達(dá)式是X8+X5+X4+1 (對(duì)應(yīng)的二進(jìn)制數(shù)為 100110001),也稱生成多項(xiàng)式,記位g (x)。實(shí)際應(yīng)用中就是通過(guò)這種除法邏輯 電路對(duì)一組數(shù)據(jù)進(jìn)行校驗(yàn)和糾錯(cuò)。如果速度允許,也常使用生成多項(xiàng)式g (x)通過(guò)軟件方法進(jìn)行校驗(yàn)與糾錯(cuò)。(2) CRC校驗(yàn)的算法與編碼的算法是相同的,校驗(yàn)時(shí)要將 CRC乍為數(shù)據(jù)一 同進(jìn)行計(jì)算。下邊對(duì)其進(jìn)行討論并給出查表算法。直接算法:用于生成多項(xiàng)式直接進(jìn)行校驗(yàn)的方法是將低字節(jié)位放在前 (左)。 然后用g (x)去做

36、異或除法。得到的余數(shù)若為0,則表示數(shù)據(jù)正確,余數(shù)不為0, 則表示數(shù)據(jù)有錯(cuò),通過(guò)余數(shù)便可知道結(jié)果是否正確。 DS18B20的 CRC碼是可以糾 正一位錯(cuò)誤的。改進(jìn)算法;直接算法由于循環(huán)次數(shù)較多而且需要的時(shí)間很長(zhǎng)。改進(jìn)算法能叫為方便的進(jìn)行處理,該算法是對(duì)數(shù)據(jù)進(jìn)行逐步字節(jié)處理, 處理順序是由低字節(jié)到 高字節(jié)。這里首先將CRC單元賦0,取一個(gè)字節(jié)數(shù)據(jù)做異或并將結(jié)果存入暫存單 元AY,然后字節(jié)數(shù)據(jù)左環(huán)移。如果 AY的最低位是一,則CRC只左移。在將AY 的最低移入CRC勺最高位。做完一個(gè)字節(jié)之后,將CRC勺結(jié)果與下一個(gè)字節(jié)做同 樣處理直至最后一個(gè)字節(jié)處理完。(3) 糾錯(cuò):如果結(jié)果不為0,則意味著數(shù)據(jù)錯(cuò)誤

37、。DS18B2啲編碼是可以糾 正一位錯(cuò)誤的,當(dāng)錯(cuò)誤多余一個(gè)就是要重新采集數(shù)據(jù), 本文給出一種利用查表進(jìn) 行糾錯(cuò)的方法。該方法是首先計(jì)算出一位錯(cuò)誤代碼的樣圖,如表 2-7所示。表2-7 一位錯(cuò)誤代碼的樣圖下標(biāo)D7D6D5D4D3D2D1D00172110189316811638962411473168442211367684215192325241512611991152323117189116221105542104202324126231132033841552122112562814714743698491474371579178817471519231185914195365681470

38、3515199718940748然后根據(jù)查表得到這個(gè)余數(shù)在圖中的位置(這里設(shè)為 N, N的值從0到71), 通過(guò)N的值就可以計(jì)算出錯(cuò)誤在數(shù)據(jù)中的值, 計(jì)算的方法是,將N被8除,商的 整數(shù)部分位錯(cuò)誤字節(jié)的位置,用7減去余數(shù)則得到錯(cuò)誤位在該字節(jié)中的位號(hào), 只 需對(duì)錯(cuò)誤位取反即可糾正錯(cuò)誤??偨Y(jié):由于使用了校驗(yàn)與糾錯(cuò)方法,增加了數(shù)據(jù)的傳輸距離與可信度。 在沒(méi) 有使用校驗(yàn)與糾錯(cuò)方式時(shí),線路大于 20米,顯示的溫度常出現(xiàn)大幅度的跳動(dòng)。 在使用了校驗(yàn)與糾錯(cuò)方法后,線路在 50米時(shí)仍然十分穩(wěn)定。3.2.9DS18B20在測(cè)溫系統(tǒng)中的應(yīng)用DS18B20與單片機(jī)的接口極其簡(jiǎn)單,只需將 DS18B20的信號(hào)線與單片

39、機(jī)的 一位雙向端口相連即可。一般測(cè)溫電纜采用屏蔽4芯雙絞線,其中一對(duì)接地線與 信號(hào)線,另一對(duì)Vdd和地線,屏蔽層在源端單點(diǎn)接地。3.2.10測(cè)溫系統(tǒng)的硬件工作原理對(duì)DS18B2C初始化后,主機(jī)發(fā)出SKIP ROM命令,此命令執(zhí)行后的存儲(chǔ)器操 作命令將對(duì)所在線的DS18B20在發(fā)出溫度轉(zhuǎn)換啟動(dòng)碼44H,等待750ms后,先 發(fā)出匹配ROM命令(55H),緊接著主機(jī)提供一片 DS18B20的64位序列號(hào),讀取 其溫度存儲(chǔ)器值,存入數(shù)據(jù)緩存。3.2.11 注意事項(xiàng)DS18B2C具有測(cè)溫系統(tǒng)簡(jiǎn)單,測(cè)溫精度高,連接方便,站用口線少等優(yōu)點(diǎn), 但是在實(shí)際使用中也應(yīng)注意以下幾方面的問(wèn)題:(1) DS18B20

40、從測(cè)溫結(jié)束到將溫度值轉(zhuǎn)換成數(shù)字量需要一定的轉(zhuǎn)換時(shí)間,這是必須保證的,不然會(huì)出現(xiàn)轉(zhuǎn)換錯(cuò)誤的現(xiàn)象,使溫度輸出總是顯示85。(2) 在實(shí)際使用時(shí)發(fā)現(xiàn),應(yīng)使電源保持在 5V左右。若電源電壓過(guò)低,會(huì)使所測(cè)得的溫度與實(shí)際溫度出現(xiàn)偏高現(xiàn)象,經(jīng)過(guò)實(shí)驗(yàn)發(fā)現(xiàn),一般在5V左右。(3) 初始化時(shí),當(dāng)主機(jī)受到 DS18B2C回應(yīng)的低電平信號(hào)后等到單總線恢復(fù) 高電平后,主機(jī)才能接著對(duì) DS18B20進(jìn)行操作。(4) 當(dāng)主機(jī)發(fā)溫度轉(zhuǎn)換命令使 DS18B20進(jìn)行溫度轉(zhuǎn)換時(shí),數(shù)據(jù)線要保持高 電平的時(shí)間為 750ms。(5) 當(dāng)主機(jī)發(fā)數(shù)值拷貝命令使 DS18B20將溫度寄存器的數(shù)值拷貝到 EERAM 中時(shí),數(shù)據(jù)線保持高電平時(shí)間至

41、少為 10ms。(6) 當(dāng)不進(jìn)行復(fù)位時(shí),數(shù)據(jù)線保持為低電平時(shí)間不超過(guò) 60us,否則將產(chǎn)生 復(fù)位讀操作。(7)要嚴(yán)格的按照時(shí)隙圖對(duì)DS18B20進(jìn)行復(fù)位和讀寫(xiě)操作 (8)單總線上所掛的DS18B20超過(guò)8個(gè)時(shí),要注意微處理器的總線驅(qū)動(dòng)問(wèn)15(9)在DS18B20測(cè)溫程序設(shè)計(jì)中,向DS18B2C發(fā)出溫度轉(zhuǎn)換命令后,程序 總要等待DS18B20勺返回信號(hào),一旦某個(gè)DS18B2C接觸不好或斷線,當(dāng)程序讀該DS18B20寸,將沒(méi)有返回信號(hào),程序進(jìn)入死循環(huán)。這一點(diǎn)在進(jìn)行DS18B2C硬件連接和軟件設(shè)計(jì)時(shí)要注意(10) 測(cè)溫電纜線在這里采用屏蔽 4雙絞線,其中一對(duì)線接地線與信號(hào)線,另一組接 Vcc 和地線

42、,屏蔽層在源端點(diǎn)單點(diǎn)接地3.3 鍵盤(pán)電路介紹3.3.1 鍵盤(pán)接口技術(shù)單片機(jī)使用的鍵盤(pán)一般分為兩種: 獨(dú)立式鍵盤(pán)與矩陣式鍵盤(pán)。 獨(dú)立式鍵盤(pán)實(shí)NfCUproPLlP12Pl 3r n4X 10K_4t_際上就是一組相互獨(dú)立的按鍵,這些按鍵可直接與單片機(jī)的 I/O 口連接,即每 個(gè)按鍵獨(dú)占一條口線,接口簡(jiǎn)單,在按鍵數(shù)目不多的場(chǎng)合使用方便。 矩陣式鍵盤(pán) 也叫行列式鍵盤(pán),因?yàn)榘存I的個(gè)數(shù)較多,所以按鍵組成行列式的矩陣。鍵盤(pán)在應(yīng)用的時(shí)候包括兩項(xiàng)工作:一個(gè)是按鍵的識(shí)別,即在鍵盤(pán)中找出被按 下的是哪一個(gè)鍵,一般使用接口電路來(lái)實(shí)現(xiàn);另一個(gè)是按鍵功能的實(shí)現(xiàn),要通過(guò) 鍵盤(pán)服務(wù)程序來(lái)完成。接口電路可以采用如下4種方式:

43、使用單片機(jī)本身的并行口;使用單片機(jī)本身的串行口;使用通用接口芯片(如 8255);使用專用接口 芯片(如 HD7279 8279,ZLG7289等)。鍵盤(pán)處理的過(guò)程如下:1、 鍵盤(pán)掃描,用查詢或中斷方式判斷是否有按鍵被按下。2、 去抖動(dòng),用硬件或軟件方法去除按鍵抖動(dòng)。3、 鍵碼的識(shí)別,用來(lái)區(qū)分不同的按鍵。4、 根據(jù)鍵碼編制程序來(lái)處理該按鍵操作。所謂去抖動(dòng)是指消除按鍵閉合或斷開(kāi)時(shí)引起的瞬間電壓抖動(dòng),這樣才能保證鍵掃描的正確性。常用的去抖動(dòng)方法為軟件方法,其方法為判別到有鍵按下后, 軟件延時(shí)一段時(shí)間(一般為10ms左右)后,再判斷鍵盤(pán)狀態(tài),如果仍為有鍵按 下?tīng)顟B(tài),則認(rèn)為有一個(gè)確定的鍵被按下,否則把

44、按鍵當(dāng)作抖動(dòng)處理。3.3.2獨(dú)立式鍵盤(pán)接口在單片機(jī)的運(yùn)行過(guò)程中,鍵盤(pán)的掃描和處理有兩種方式:查詢方式和中斷方式。查詢方式是當(dāng)CPU空閑時(shí)就執(zhí)行鍵盤(pán)掃描程序,這種方式浪費(fèi)CPU時(shí)間,在CPU處理任務(wù)較重的場(chǎng)合容易產(chǎn)生延遲;中斷方式是每當(dāng)有按鍵閉合就向CPU發(fā)出中斷申請(qǐng),中斷響應(yīng)后執(zhí)行鍵盤(pán)掃描程序,這種方式響應(yīng)速度快,CPU利用率高。1、查詢方式示例圖7-8為一種典型的獨(dú)立式鍵盤(pán)接口電路,可以看出,各按鍵接到了單片機(jī)的P1 口,且無(wú)鍵按下時(shí)P1.0-P1.3為高電平,當(dāng)某個(gè)鍵被按下時(shí),與該鍵相連的口線被拉成低電平, 利用某個(gè)口線電平的變化即可判斷出哪個(gè)鍵被按下了。KEY2圖7-8查詢方式鍵盤(pán)接口亠

45、5VKEYKEY3KEY43.4顯示電路介紹3.4.1字符型液晶顯示器RT1602C字符型液晶顯示器是一種用 5X 7點(diǎn)陣圖形來(lái)顯示字符的液晶顯示器,根據(jù)顯示的容量 可以分為1行16個(gè)字、2行16個(gè)字、2行20個(gè)字等,最常用的為2行16個(gè)字,即我們馬 上要學(xué)習(xí)的 RT1602C液晶模塊。RT1602C液晶模塊內(nèi)帶標(biāo)準(zhǔn)字庫(kù),內(nèi)部的字符發(fā)生存儲(chǔ)器 已經(jīng)存儲(chǔ)了 192個(gè)5X 7點(diǎn)陣字符,32個(gè)5X 10點(diǎn)陣字符。另外還有字符生成RAM512字節(jié),供用戶自定義字符。這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫(xiě)、常用的符號(hào)、和日 文假名等。每一個(gè)字符都有一個(gè)固定的代碼,比如大寫(xiě)的英文字母 “A”的代碼是01

46、000001B(41H,也就是其ASCII碼),顯示時(shí)模塊把地址 41H中的點(diǎn)陣字符圖形顯示出來(lái),我們就 能看到字母“ A”。3.4.2 RT1602C與單片機(jī)接口及程序圖14-3 1602 與單片機(jī)接口if(flag=1)第四章系統(tǒng)軟件設(shè)計(jì)4.1軟件設(shè)計(jì)流程圖4.2鍵盤(pán)程序設(shè)計(jì)un sig ned flag=O; sbit key1=P1A0; sbit key2=P1Al; sbit key3=P1A2; sbit key4=P1A3;void keysca n()if (P1 &0 x0f)!=0 x0f)while(1) /WIR(OxOf);if(key1=0) delay1(1OO

47、);鍵盤(pán)去抖動(dòng) if(key1=0)y+;MoveMouse(2, 1);WDR(numy/10%10);MoveMouse(3, 1);WDR(numy%10);MoveMouse(3, 1);else if(flag=2)y+=10;if(y=99)y=0;MoveMouse(2, 1);WDR(numy/10);MoveMouse(3, 1);WDR(numy%10);MoveMouse(2, 1);else if(flag=3)mo+;if(mo=13)mo=1;MoveMouse(5, 1);WDR(nummo/10);MoveMouse(6, 1);WDR(nummo%10);Mo

48、veMouse(6, 1);else if(flag=4)mo+=10;if(mo=13)mo=1;MoveMouse(5, 1);WDR(nummo/10);MoveMouse(6, 1);WDR(nummo%10);MoveMouse(5, 1);else if(flag=5)d+;if(d31)else if(flag=9)d=1;MoveMouse(8, 1);WDR(numd/10);MoveMouse(9, 1);WDR(numd%10);MoveMouse(9, 1);else if(flag=6)d+=10;if(d31)d=1;MoveMouse(8, 1);WDR(numd

49、/10);MoveMouse(9, 1);WDR(numd%10);MoveMouse(8, 1);else if(flag=7) h+;if(h=24) h=0;MoveMouse(0, 0);WDR(numh/10);MoveMouse(1, 0);WDR(numh%10);MoveMouse(1, 0); else if(flag=8) h+=10;if(h=24) h=0;MoveMouse(0, 0); WDR(numh/10);MoveMouse(1, 0); WDR(numh%10);MoveMouse(0, 0); mi+ ; if(mi=60) mi=0; MoveMouse

50、(3, 0); WDR(nummi/10); MoveMouse(4, 0);WDR(nummi%10); MoveMouse(4, 0);else if(flag=10) mi+=10 ;if(mi=60) mi=0;MoveMouse(3, 0); WDR(nummi/10);MoveMouse(4, 0); WDR(nummi%10);MoveMouse(3, 0); while(key1=0); /防止按下一次按鍵后執(zhí)行多次操作 else if(key2=0) delay1(100);/ 鍵盤(pán)去抖動(dòng) if(key2=0)if(flag=1) y-;MoveMouse(2, 1); WD

51、R(numy/10%10); MoveMouse(3, 1);WDR(numy%10); MoveMouse(3, 1);else if(flag=2) y-=10;if(y=-1)y=99;MoveMouse(2, 1);WDR(numy/10%10);MoveMouse(3, 1);WDR(numy%10);MoveMouse(2, 1);else if(flag=3)mo-;if(mo=10)mo-=10;if(mo=0)mo=12;MoveMouse(5, 1);WDR(nummo/10);MoveMouse(6, 1);WDR(nummo%10);MoveMouse(5, 1);el

52、se if(flag=5)d-;if(d=10)d-=10;if(d=0)d=31;MoveMouse(8, 1);WDR(numd/10);MoveMouse(9, 1);WDR(numd%10);MoveMouse(8, 1);else if(flag=7)h-;if(h=10)h-=10;if(h=-1)h=23 ;MoveMouse(0, 0);WDR(numh/10);MoveMouse(1, 0);WDR(numh%10);MoveMouse(0, 0);else if(flag=9)mi-;if(mi=10) mi-=10;if(mi=-1) mi=59;MoveMouse(3,

53、 0);WDR(nummi/10);MoveMouse(4, 0); WDR(nummi%10);MoveMouse(3, 0); while(key2=0); /防止按下一次按鍵后執(zhí)行多次操作else if(key3=0) WIR(0 x0f); delay1(100);/ 鍵盤(pán)去抖動(dòng)if(key3=0) flag+;switch(flag)case 1:MoveMouse(3, 1); break; case 2:MoveMouse(2, 1); break; case 3:MoveMouse(6, 1); break; case 4:MoveMouse(5, 1); break; cas

54、e 5:MoveMouse(9, 1); break; case 6:MoveMouse(8, 1); break; case 7:MoveMouse(1, 0); break; case 8:MoveMouse(0, 0); break; case 9:MoveMouse(4, 0); break; case 10:MoveMouse(3, 0); break; if(flag=11) WIR(0 x0c);if(flag=12) flag=0;while(key3=0); /防止按下一次按鍵后執(zhí)行多次操作指令 /數(shù)據(jù)寄存器選擇讀/寫(xiě)控制使能忙else if(key4=0)delay1(10

55、0);/ 鍵盤(pán)去抖動(dòng)if(key4=0)break;else while(key4=0); /防止按下一次按鍵后執(zhí)行多次操作WriteSet1302(0 x80,(55/10)4|(55%10);/根據(jù)寫(xiě)秒寄存器命令字, 寫(xiě)入秒的初始值WriteSet1302(0 x82,(minute/10)4|(mi%10);/根據(jù)寫(xiě)分寄存器命令字,寫(xiě)入分的初始值WriteSet1302(0 x84,(h/10)4|(h%10); / 根據(jù)寫(xiě)小時(shí)寄存器命令字,寫(xiě)入小時(shí)的初始值WriteSet1302(0 x86,(d/10)4|(d%10); / 根據(jù)寫(xiě)日寄存器命令字,寫(xiě)入日的初始值 WriteSet13

56、02(0 x88,(mo/10)4|(mo%10); / 根據(jù)寫(xiě)月寄存器命令字,寫(xiě)入月的初始值 WriteSet1302(0 x8c,(y/10)4|(y%10);/根據(jù)寫(xiě)年寄存器命令字,寫(xiě)入年的初始值4.3 顯示程序設(shè)計(jì)/*這段是 1602 的庫(kù)函數(shù)程序 */#define LCD_DATA P0 /控制口定義sbit LCD_RS = P2A2;/LCD sbit LCD_RW = P2A1;/LCD sbit LCD_EN = P2A0;/LCD sbit LCD_BF = P0A7;/LCD code uchar num =0,1,2,3,4,5,6,7,8,9; code uchar my =DO IT YOURSELF;/延時(shí)void Delay(uchar m) uchar i; for(i=0; im; +i)_nop_();_nop_();_nop_();_nop_();/延時(shí)void Delaynms(uchar n)uchar i;uchar j;uchar k;for(i=0; in; i+)for(j=0; j10; j+) for(k=0; k33; k+);/LCD 檢查忙狀態(tài) void CheckBusy(void)while(1)LCD_EN = 0;LCD_RS = 0;/ 指令LCD_R

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論