2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  摘要</b></p><p>  本設(shè)計是應(yīng)用MCS-51單片機的原理和控制理論設(shè)計一個多功能系統(tǒng),功能包括矩陣鍵盤輸入,鍵盤內(nèi)容顯示,溫度傳感器操縱,溫度顯示,并實現(xiàn)雙機通信以顯示同樣的內(nèi)容。硬件系統(tǒng)包括單片機最小系統(tǒng),ISP下載模塊,矩陣鍵盤,獨立鍵盤,溫度傳感器模塊,數(shù)碼管,流水燈等。除了課設(shè)規(guī)定的要求外,還加入一些有趣的擴展功能,如:利用led燈指示單片

2、機工作狀態(tài),從機普通模式、空閑模式可選,用于節(jié)電。通過設(shè)計,加深對51單片機的理解,掌握實際的應(yīng)用,增強動手能力。</p><p>  設(shè)計包括硬件設(shè)計、軟件編程,仿真,制作實物,撰寫報告等步驟。</p><p>  關(guān)鍵詞: 51單片機 多功能系統(tǒng)設(shè)計 單片機編程</p><p><b>  Abstract</b></p>

3、<p>  This design is the application of the principle of the MCS-51 microcontroller and control theory to design a multi-functional system features include the matrix keyboard input, keyboard content display and man

4、ipulation of temperature sensor, temperature display, and dual-machine communication in order to display the same content. The hardware system including the minimum microcontroller system,ISP download module, matrix keyb

5、oard, separate keyboard, the temperature sensor module, digital tube, L</p><p>  The design includes hardware design, software programming, simulation, making hardware, writing reports and other steps.</p

6、><p>  Keywords: 51 microcontroller, multi-functional system design,microcontroller programming目錄</p><p><b>  摘要I</b></p><p>  AbstractII</p><p><b>  目

7、錄3</b></p><p>  一 項目要求與說明4</p><p><b>  二 方案論證5</b></p><p>  三 硬件電路設(shè)計5</p><p>  1 MCU控制器簡介5</p><p>  2 單片機最小系統(tǒng)6</p><p>

8、<b>  3 矩陣鍵盤6</b></p><p>  4 DS18B20溫度檢測電路7</p><p>  4.1 DS18B20溫度傳感器特性7</p><p>  4.2 DS18B20操作時序8</p><p>  5 數(shù)碼管顯示電路10</p><p><b>  6

9、 流水燈10</b></p><p>  7 串行口電路11</p><p><b>  四 軟件設(shè)計12</b></p><p>  1 系統(tǒng)軟件開發(fā)工具12</p><p>  2 系統(tǒng)流程圖12</p><p>  2.1 主機程序流程圖12</p>&

10、lt;p>  2.2 從機程序流程圖13</p><p><b>  3 軟件編程13</b></p><p>  4 軟件實現(xiàn)功能說明14</p><p>  4.1 主機矩陣鍵盤功能14</p><p>  4.2 從機獨立鍵盤功能14</p><p><b>  五

11、 仿真分析15</b></p><p>  1 數(shù)據(jù)輸入與顯示功能仿真15</p><p>  2 溫度檢測與顯示功能仿真16</p><p>  3 數(shù)據(jù)通信功能16</p><p><b>  六 心得體會17</b></p><p><b>  參考文獻(xiàn)18

12、</b></p><p>  附件A 單片機系統(tǒng)原理圖19</p><p>  附件B 單片機系統(tǒng)實物20</p><p>  附件C 主機程序21</p><p>  附件D 從機程序32</p><p><b>  一 項目要求與說明</b></p><

13、p>  1)完成包含如下系統(tǒng)功能組件的單片機最小系統(tǒng)的設(shè)計、焊接、調(diào)試</p><p><b> ?。?)鍵盤</b></p><p>  一個4X4的矩陣鍵盤,其中,10個按鍵是0~9數(shù)字鍵;另外6個是功能鍵,用于功能選擇和控制。</p><p><b> ?。?)顯示電路</b></p><p

14、>  由6個7段LED數(shù)碼管組成的顯示電路。</p><p><b> ?。?)溫度檢測</b></p><p>  利用DS18B20可編程1-Wire數(shù)字溫度傳感器芯片,或利用AD590溫度傳感器芯片和A/D轉(zhuǎn)換器芯片采集溫度溫度信號。</p><p>  (4)串口串行通信</p><p>  利用51的串

15、口實現(xiàn)串行通信接口電路。</p><p>  2)完成ISP下載電路的設(shè)計、焊接</p><p>  3)完成系統(tǒng)軟件的設(shè)計,包括程序結(jié)構(gòu)設(shè)計、流程圖繪制、程序設(shè)計,實現(xiàn)如下功能</p><p><b> ?。?)功能選擇</b></p><p>  通過功能選擇鍵,使得單片機處于不同工作狀態(tài)并通過LED顯示相應(yīng)內(nèi)容。&

16、lt;/p><p><b> ?。?)溫度顯示</b></p><p>  通過功能選擇鍵選擇溫度檢測、顯示后,LED顯示溫度值。</p><p><b> ?。?)數(shù)據(jù)輸入</b></p><p>  通過功能選擇鍵選擇數(shù)據(jù)輸入后,將通過鍵盤鍵入的0~9按鍵值顯示在LED上,其中,最后輸入的顯示在最左

17、邊,之前鍵入向右移動一位。</p><p><b>  (4)數(shù)據(jù)通信</b></p><p>  將兩個單片機最小系統(tǒng)通過串口連接起來,其中一個作為主系統(tǒng),另一個作為輔系統(tǒng)。當(dāng)通過功能選擇鍵選擇數(shù)據(jù)通信后,當(dāng)在主系統(tǒng)上進行功能(2)、功能(3)的操作時,輔系統(tǒng)的LED上顯示與主系統(tǒng)同樣的內(nèi)容。</p><p>  4)利用仿真軟件完成系統(tǒng)仿真

18、工作</p><p>  5)在單片機最小系統(tǒng)硬件上實現(xiàn)任務(wù)3中規(guī)定的功能</p><p><b>  二 方案論證</b></p><p>  溫度檢測模塊方案選擇:</p><p>  方案一、采用AD590設(shè)計溫度檢測模塊,由于需要添加AD轉(zhuǎn)換電路、放大電路,電路設(shè)計比較繁瑣,成本較高。</p>&l

19、t;p>  方案二、采用Dallas公司生產(chǎn)的DS18B20作為測溫模塊,DS18B20芯片內(nèi)部自帶AD轉(zhuǎn)換電路,使用方便。它采用單總線協(xié)議傳輸技術(shù),只需占用單片機一個IO口,電路容易設(shè)計,編程比較簡單。溫度的分辨率可以選擇9到12位的分辨率。</p><p>  綜上所述,溫度檢測模塊選擇方案二。</p><p><b>  三 硬件電路設(shè)計</b></

20、p><p>  1 MCU控制器簡介</p><p>  STC89C52是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash 存儲器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。 具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash,512字節(jié)RAM, 32 位I/O 口線,看門狗

21、定時器,內(nèi)置4KB EEPROM,MAX810復(fù)位電路,2個16 位 定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口。另外 STC89X52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU 停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機一切工作停止,直到下一個中斷或硬件復(fù)位為止。最高運作頻率35MHz,6T/12T可選。<

22、/p><p>  2 單片機最小系統(tǒng)</p><p>  單片機最小系統(tǒng)包括振蕩器電路,復(fù)位電路,單片機EA端接高電平(Vcc),P0口需要接上拉電阻(10K)。振蕩器電路選用12MHz晶振,兩個30pf電容,振蕩器電路接單片機XTAL1和XTAL2引腳。</p><p>  單片機最小系統(tǒng)原理圖如下。</p><p>  圖1 單片機最小系統(tǒng)

23、</p><p><b>  3 矩陣鍵盤</b></p><p>  矩陣鍵盤檢測的原理和方法:矩陣鍵盤每個按鍵兩端都與單片機I/O口相連,因此在檢測時需人為通過單片機I/O口送出低電平。檢測時,先送一列為低電平,其余幾列全為高電平(此時確定了列數(shù)),然后立即輪流檢測一次各行是否有低電平,若檢測到某一行為低電平(這是有確定了行數(shù)),則便可以確認(rèn)當(dāng)前被按下的鍵是哪一列

24、哪一行,用同樣方法輪流送各列一次低電平,再輪流檢測一次各行是否變?yōu)榈碗娖剑@樣既可檢測完所有的按鍵,當(dāng)有鍵按下時便可判斷出按下的是哪一個鍵。</p><p>  此外還需要消除按鍵在閉合或斷開時的抖動。消抖的方法可采用消抖電路(RS觸發(fā)器時鎖電路硬件消除抖動),也可采用延時方式軟件消除抖動(延時后再重讀,以跳過抖動期),本設(shè)計采用軟件消抖方式。</p><p>  矩陣鍵盤原理圖如下。&l

25、t;/p><p><b>  圖2 矩陣鍵盤</b></p><p>  4 DS18B20溫度檢測電路</p><p>  4.1 DS18B20溫度傳感器特性</p><p>  適應(yīng)電壓范圍寬,電壓范圍在3.0~5.5V,在寄生電源方式下可有數(shù)據(jù)線供電。</p><p>  獨特的單線接口方式,

26、它與微處理器連接時僅需要一條口線即可實現(xiàn)微處理器與DS18B20的雙向通信。</p><p>  支持多點組網(wǎng)功能,多個DS18B20可以并聯(lián)在唯一的三線上,實現(xiàn)組網(wǎng)多點測溫。</p><p>  在使用中不需要任何外圍元件,全部傳感器及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)。</p><p>  測溫范圍-55℃~+125℃,在-10℃~+85℃時精度為

27、7;0.5℃。</p><p>  可編程分辨率為9~12位,對應(yīng)的可分辨率溫度分別為0.5℃,0.25℃,0.125℃和0.0625℃,可實現(xiàn)高精度測溫。</p><p>  4.2 DS18B20操作時序</p><p>  4.2.1 初始化操作時序</p><p>  圖3 ds18b20初始化時序</p><p&

28、gt;  4.2.2 讀取時序</p><p>  圖4 ds18b20讀數(shù)據(jù)時序</p><p>  4.2.3 寫入時序</p><p>  圖5 ds18b2寫數(shù)據(jù)時序</p><p>  4.2.4 DS18B20實物</p><p><b>  如圖所示。</b></p>

29、<p>  圖6 ds18b20實物</p><p>  4.2.5 DS18B20電路連接</p><p>  如下圖所示。其DQ端接單片機的P2.2端。</p><p>  圖7 ds18b20連接</p><p><b>  5 數(shù)碼管顯示電路</b></p><p>  數(shù)

30、碼管的顯示原理是靠點亮內(nèi)部的發(fā)光二極管來發(fā)光。本次設(shè)計中使用的是7端共陰極數(shù)碼管,數(shù)碼管的陽極,即標(biāo)有a,b,c,d,e,f,g,h的引腳全部連在一起,與下面的U2元件(74HC573)鎖存器的數(shù)據(jù)輸出端相連,U2的數(shù)據(jù)輸入端連單片機P0口。數(shù)碼管中WE1,WE2,WE3,WE4,WE5,WE6是他們的位選端,每個數(shù)碼管對應(yīng)一個位選端,與U3元件(74HC573)數(shù)據(jù)出端低6位相連,U3的數(shù)據(jù)輸入端連單片機P0口。兩個鎖存器的鎖存端分別

31、與單片機P2.6和P2.7相連。這樣用單片機可以控制鎖存器的鎖存端,進而控制鎖存器的數(shù)據(jù)輸出,這種分時控制的方法便可方便地控制任意數(shù)碼管顯示任意數(shù)字。</p><p>  數(shù)碼管顯示電路下圖所示。</p><p>  圖8 數(shù)碼管顯示模塊</p><p><b>  6 流水燈</b></p><p>  流水燈用于反映

32、系統(tǒng)當(dāng)前工作狀態(tài)。流水燈是一組發(fā)光二極管,如下圖所示。這組發(fā)光二極管的陰極端連接U5元件(74HC573)鎖存器的輸出端,陽極接一個排阻。U5的鎖存端接單片機的P2.5口,這樣就可以通過單片機對這組發(fā)光二極管的亮滅進行控制。</p><p><b>  圖9 流水燈模塊</b></p><p><b>  7 串行口電路</b></p>

33、;<p>  單片機使用的是TTL電平,而計算機使用的是RS-232電平,要實現(xiàn)把電腦中的程序能下載到單片機上,就需要實現(xiàn)RS-232電平與TTL電平之間的轉(zhuǎn)換。實現(xiàn)這一功能的芯片有很多,本次課設(shè)所使用的芯片為MAX232及電容元件構(gòu)成RS232電平與TTL電平轉(zhuǎn)換的串行口電路。</p><p>  本次課設(shè)要完成雙機通信功能,需要兩個單片機系統(tǒng),一個單片機作為主機,一個作為從機??梢允褂靡桓诰€

34、連接兩個單片機的串口即可完成課設(shè)要求的數(shù)據(jù)通信功能。串行口電路如下圖所示。</p><p><b>  圖10 串口模塊</b></p><p><b>  四 軟件設(shè)計</b></p><p>  1 系統(tǒng)軟件開發(fā)工具</p><p>  系統(tǒng)軟件開發(fā)工具采用C語言軟件開發(fā)系統(tǒng)Keil uVisi

35、on3。</p><p><b>  2 系統(tǒng)流程圖</b></p><p>  2.1 主機程序流程圖</p><p>  圖11 主機程序流程圖</p><p>  2.2 從機程序流程圖</p><p>  圖12 從機程序流程圖</p><p><b> 

36、 3 軟件編程</b></p><p><b>  見附錄</b></p><p>  4 軟件實現(xiàn)功能說明</p><p>  4.1 主機矩陣鍵盤功能</p><p>  圖13 主機鍵盤功能</p><p><b>  0~9:數(shù)字輸入。</b></p

37、><p>  F1:矩陣鍵盤輸入功能選擇。</p><p>  F2:溫度顯示功能選擇。</p><p>  F3:雙機通信功能開關(guān)。</p><p>  按下F1,進行數(shù)字輸入(0~9),顯示在數(shù)碼管上。按下F2,可顯示溫度,按下F3可以開關(guān)雙機通信功能。</p><p>  4.2 從機獨立鍵盤功能</p>

38、<p>  圖14 從機獨立鍵盤功能</p><p>  Key:空閑模式/正常模式功能切換。</p><p>  選擇空閑模式時,LED燈會亮起,提示工作在空閑模式。當(dāng)從機CPU檢測到在一段時間內(nèi)主機沒有發(fā)送數(shù)據(jù)給從機時,從機CPU停止工作,此時可由中斷喚醒,當(dāng)主機再次給從機發(fā)送數(shù)據(jù)時,從機正常工作。</p><p><b>  五 仿真分

39、析</b></p><p>  Proteus是世界上著名的EDA工具(仿真軟件),它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機及外圍器件。從原理圖布圖、代碼調(diào)試到單片機與外圍電路協(xié)同仿真,一鍵切換到PCB設(shè)計,真正實現(xiàn)了從概念到產(chǎn)品的完整設(shè)計。是目前世界上唯一將電路仿真軟件、PCB設(shè)計軟件和虛擬模型仿真軟件三合一的設(shè)計平臺,其處理器模型支持8051。在編譯方面,它支持IAR、Keil和MP

40、LAB等多種編譯器。</p><p>  1 數(shù)據(jù)輸入與顯示功能仿真</p><p>  按下矩陣鍵盤第四排第一個鍵,再順序按下440099,得到結(jié)果如圖。</p><p>  圖15 鍵盤輸入顯示仿真</p><p>  2 溫度檢測與顯示功能仿真</p><p>  按下矩陣鍵盤第四排第二個鍵,則顯示溫度如圖為9攝

41、氏度。</p><p>  圖16 溫度顯示仿真</p><p><b>  3 數(shù)據(jù)通信功能</b></p><p>  在數(shù)據(jù)輸入模式下再按下矩陣鍵盤第四排第三個鍵,則左邊從機顯示與主機相同的內(nèi)容。</p><p>  圖17 雙機通信功能仿真</p><p>  在溫度顯示模式下再按下矩陣鍵

42、盤第四排第三個鍵,則左邊從機顯示與主機相同的內(nèi)容。</p><p>  圖18 雙機通信功能仿真1</p><p><b>  六 心得體會</b></p><p>  在為期十天的單片機實習(xí)中,除了對51單片機的基礎(chǔ)知識有了深刻的理解,還增強了動手的能力,硬件設(shè)計,軟件設(shè)計,包括報告的撰寫,每個步驟都讓我受益頗深,。</p>&

43、lt;p>  在此次設(shè)計中,我的系統(tǒng)采用了被廣泛使用的單片機STC89C52為主控芯片,配合DS18B20溫度傳感器,LED數(shù)碼管,鍵盤電路所設(shè)計的一個多功能系統(tǒng)。在報告中介紹了DS18B20的操作方法,介紹了鍵盤電路基本原理、特性及編程方法。對單片機軟硬件資源和接口擴展也有部分的介紹和應(yīng)用。在系統(tǒng)仿真中對各功能都實現(xiàn)了仿真。</p><p>  這次課程設(shè)計使我得到了很多收獲,我不僅學(xué)到了許多了關(guān)于單片機

44、方面的知識,熟悉了與單片機相關(guān)的兩款軟件Keil和Proteus,提高了實驗技能;而且也使我的動手能力和電路設(shè)計能力得到了極大的提高。在此次設(shè)計中,我認(rèn)為比較麻煩的是編程,本次設(shè)計使用的是C語言,七百行的程序?qū)懥私惶欤箨懤m(xù)地修修改改、添加新功能,過程很艱難,結(jié)果是令人欣慰的。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 李群芳. 單

45、片微型計算機與接口技術(shù)(第4版) 電子工業(yè)出版社</p><p>  [2] 郭天祥 新概念51單片機C語言教程 電子工業(yè)出版社</p><p>  [3] 謝自美.電子線路設(shè)計·實驗·測試(第三版) 華中科技大學(xué)出版社</p><p>  [4] Dallas 公司 DS18B20數(shù)據(jù)手冊

46、 Dallas公司</p><p>  [5] 劉教瑜. 單片機原理及應(yīng)用 武漢理工大學(xué)出版社</p><p>  [6]黃智偉. 全國大學(xué)生電子競賽常用電路模塊制作 北京航空航天大學(xué)出版社</p><p>  [7]王永生. 電子測量學(xué) 西北工業(yè)大學(xué)出版社<

47、/p><p>  附件A 單片機系統(tǒng)原理圖</p><p>  圖19 單片機系統(tǒng)原理圖</p><p>  附件B 單片機系統(tǒng)實物</p><p><b>  附件C 主機程序</b></p><p>  #include<reg51.h></p><p>  #

48、define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  sbit dula=P2^6;//段選</p><p>  sbit wela=P2^7;//位選</p><p>  sbit led1=P1^1;//鍵盤輸入功能指

49、示燈</p><p>  sbit led2=P1^2;//溫度顯示指示燈</p><p>  sbit led3=P1^3;//雙機通信指示燈</p><p>  sbit DS=P2^2;//DS18B20數(shù)據(jù)端</p><p>  uchar temp1;//用于鍵盤讀取</p>

50、<p>  uint key; //存儲按鍵值 </p><p>  uchar A1,A2,A2t,A3;//三位溫度值</p><p>  bit stateschange=0;//判別鍵盤輸入現(xiàn)實的值是否發(fā)生變化,控制發(fā)送程序</p><p>  bit keyinput=0; //判別鍵盤輸入 作為調(diào)用鍵

51、盤顯示函數(shù)的依據(jù)</p><p>  bit temdisplay=0; //判別溫度顯示 作為調(diào)用溫度顯示函數(shù)的依據(jù)</p><p>  bit dualcomm=0; //判別是否進行雙機通信</p><p>  uchar s[6]; //鍵盤控制的6位數(shù)碼管顯示內(nèi)容 </p><p>  ucha

52、r code table[]={0x3f,0x06,0x5b,0x4f,</p><p>  0x66,0x6d,0x7d,0x07,</p><p>  0x7f,0x6f,0x00,0x39}; //無小數(shù)點</p><p>  uchar code table1[]={0xbf,0x86,0xdb,0

53、xcf,</p><p>  0xe6,0xed,0xfd,0x87,</p><p>  0xff,0xef}; //帶小數(shù)點</p><p>  uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //位選</p><p>  /***********

54、*********************************************</p><p><b>  延時函數(shù)</b></p><p>  /********************************************************/</p><p>  void delay(uint count) &

55、lt;/p><p><b>  {</b></p><p><b>  uint i;</b></p><p>  while(count)</p><p><b>  {</b></p><p><b>  i=50;</b><

56、/p><p>  while(i>0)</p><p><b>  i--;</b></p><p><b>  count--;</b></p><p><b>  }</b></p><p><b>  }</b></p

57、><p>  /********************************************************</p><p><b>  初始化函數(shù)</b></p><p>  /********************************************************/</p><p&

58、gt;  void init()</p><p><b>  {</b></p><p><b>  dula=0;</b></p><p><b>  wela=0;</b></p><p>  TMOD=0x20;</p><p><b>

59、;  TH1=0xfd;</b></p><p><b>  TL1=0xfd;</b></p><p><b>  TR1=1;</b></p><p><b>  SM0=0;</b></p><p><b>  SM1=1;</b><

60、;/p><p><b>  }</b></p><p>  /********************************************************</p><p><b>  發(fā)送函數(shù)</b></p><p>  /******************************

61、**************************/</p><p>  void send()</p><p><b>  {</b></p><p>  stateschange=0;</p><p>  if(keyinput==1)</p><p><b>  {</b&

62、gt;</p><p><b>  uint i=0;</b></p><p>  SBUF=0xff;</p><p>  while(!TI);</p><p><b>  TI=0;</b></p><p>  for(i=0;i<6;i++)</p>

63、<p><b>  {</b></p><p>  SBUF=s[i];</p><p>  while(!TI);</p><p><b>  TI=0;</b></p><p><b>  }</b></p><p><b>

64、  }</b></p><p>  else if(temdisplay==1)</p><p><b>  {</b></p><p>  SBUF=0xaa;</p><p>  while(!TI);</p><p><b>  TI=0;</b></

65、p><p><b>  SBUF=A1;</b></p><p>  while(!TI);</p><p><b>  TI=0;</b></p><p><b>  SBUF=A2;</b></p><p>  while(!TI);</p>

66、<p><b>  TI=0;</b></p><p><b>  SBUF=A3;</b></p><p>  while(!TI);</p><p><b>  TI=0;</b></p><p><b>  }</b></p&g

67、t;<p><b>  }</b></p><p>  /********************************************************</p><p>  以下是溫度傳感器相關(guān)函數(shù)</p><p>  /**********************************************

68、**********/</p><p>  void dsreset(void) //發(fā)送復(fù)位和初始化指令</p><p><b>  {</b></p><p><b>  uint i;</b></p><p><b>  DS=0;</b></p>

69、<p><b>  i=103;</b></p><p>  while(i>0)i--;</p><p><b>  DS=1;</b></p><p><b>  i=4;</b></p><p>  while(i>0)i--;</p>

70、<p><b>  }</b></p><p>  bit tmpreadbit(void) //讀取一位</p><p><b>  {</b></p><p><b>  uint i;</b></p><p><b>  bit da

71、t;</b></p><p>  DS=0;i++; //i++延時</p><p>  DS=1;i++;i++;</p><p><b>  dat=DS;</b></p><p>  i=8;while(i>0)i--;</p><p>  return

72、 (dat);</p><p><b>  }</b></p><p>  uchar tmpread(void) //讀取一字節(jié)數(shù)據(jù)</p><p><b>  {</b></p><p>  uchar i,j,dat;</p><p><b>  da

73、t=0;</b></p><p>  for(i=1;i<=8;i++)</p><p><b>  {</b></p><p>  j=tmpreadbit();</p><p>  dat=(j<<7)|(dat>>1); //讀出的數(shù)據(jù)最低位在最前面</p>

74、<p><b>  }</b></p><p>  return(dat);</p><p><b>  }</b></p><p>  void tmpwritebyte(uchar dat) //寫一個字節(jié)到 ds18b20</p><p><b>  {</b

75、></p><p><b>  uint i;</b></p><p><b>  uchar j;</b></p><p>  bit testb;</p><p>  for(j=1;j<=8;j++)</p><p><b>  {</b&g

76、t;</p><p>  testb=dat&0x01;</p><p>  dat=dat>>1;</p><p>  if(testb) //寫1</p><p><b>  {</b></p><p><b>  DS=0;</b></

77、p><p><b>  i++;i++;</b></p><p><b>  DS=1;</b></p><p>  i=8;while(i>0)i--;</p><p><b>  }</b></p><p><b>  else</

78、b></p><p><b>  {</b></p><p>  DS=0; //寫0</p><p>  i=8;while(i>0)i--;</p><p><b>  DS=1;</b></p><p><b>  i++;i++;&l

79、t;/b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void tmpchange(void) //DS18B20 啟動轉(zhuǎn)換</p><p><

80、;b>  {</b></p><p>  dsreset();</p><p><b>  delay(1);</b></p><p>  tmpwritebyte(0xcc); </p><p>  tmpwritebyte(0x44); </p><p><b>

81、  }</b></p><p>  void gettmp() //獲取溫度</p><p><b>  { </b></p><p>  uint temp;</p><p><b>  float tt;</b></p><p> 

82、 uchar a,b;</p><p>  dsreset();</p><p><b>  delay(1);</b></p><p>  tmpwritebyte(0xcc);</p><p>  tmpwritebyte(0xbe);</p><p>  a=tmpread();</p

83、><p>  b=tmpread();</p><p><b>  temp=b;</b></p><p>  temp<<=8; //兩字節(jié)組成一個整型變量</p><p>  temp=temp|a;</p><p>  tt=temp*0.0625;</

84、p><p>  temp=tt*10+0.5;</p><p>  A1=temp/100;</p><p>  A2t=temp%100;</p><p>  A2=A2t/10;</p><p>  A3=A2t%10;</p><p><b>  }</b></p&

85、gt;<p>  /********************************************************</p><p>  顯示函數(shù)1 用于溫度顯示</p><p>  /********************************************************/</p><p>  void dis

86、play()</p><p><b>  {</b></p><p>  P0=table[A1];//顯示百位</p><p><b>  dula=1;</b></p><p><b>  dula=0;</b></p><p><

87、b>  P0=0x7e;</b></p><p><b>  wela=1;</b></p><p><b>  wela=0;</b></p><p><b>  delay(1);</b></p><p><b>  wela=1;</b&

88、gt;</p><p><b>  P0=0xff;</b></p><p><b>  wela=0;</b></p><p>  P0=table1[A2];//顯示十位</p><p><b>  dula=1;</b></p><p><

89、;b>  dula=0;</b></p><p><b>  P0=0x7d;</b></p><p><b>  wela=1;</b></p><p><b>  wela=0;</b></p><p><b>  delay(1);</b

90、></p><p><b>  wela=1;</b></p><p><b>  P0=0xff;</b></p><p><b>  wela=0;</b></p><p>  P0=table[A3];//顯示個位</p><p><

91、;b>  dula=1;</b></p><p><b>  dula=0;</b></p><p><b>  P0=0x7b;</b></p><p><b>  wela=1;</b></p><p><b>  wela=0;</b&g

92、t;</p><p><b>  delay(1);</b></p><p><b>  wela=1;</b></p><p><b>  P0=0xff;</b></p><p><b>  wela=0;</b></p><p&g

93、t;  P0=table[11];//顯示C</p><p><b>  dula=1;</b></p><p><b>  dula=0;</b></p><p><b>  P0=0xf7;</b></p><p><b>  wela=1;</b>

94、;</p><p><b>  wela=0;</b></p><p><b>  delay(1);</b></p><p><b>  wela=1;</b></p><p><b>  P0=0xff;</b></p><p>

95、;<b>  wela=0;</b></p><p><b>  }</b></p><p>  /********************************************************</p><p>  顯示函數(shù)2 用于鍵盤</p><p>  /***********

96、*********************************************/</p><p>  void display2()</p><p><b>  {</b></p><p><b>  uint u;</b></p><p>  for(u=0;u<6;u++)&

97、lt;/p><p><b>  {</b></p><p>  P0=table[s[u]];</p><p><b>  dula=1;</b></p><p><b>  dula=0;</b></p><p>  P0=wei[u];</p&g

98、t;<p><b>  wela=1;</b></p><p><b>  wela=0;</b></p><p><b>  delay(1);</b></p><p><b>  wela=1;</b></p><p><b>

99、  P0=0xff;</b></p><p><b>  wela=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /*****************************************

100、***************</p><p><b>  鍵盤掃描函數(shù)</b></p><p>  /********************************************************/</p><p>  void keyscan()</p><p><b>  {</b

101、></p><p><b>  P3=0xfe;</b></p><p><b>  temp1=P3;</b></p><p>  temp1=temp1&0xf0;</p><p>  if(temp1!=0xf0)</p><p><b>  {

102、</b></p><p>  delay(80);</p><p>  if(temp1!=0xf0)</p><p><b>  {</b></p><p><b>  temp1=P3;</b></p><p>  switch(temp1)</p>

103、;<p><b>  {</b></p><p>  case 0xee:</p><p>  key=0;stateschange=1;</p><p><b>  break;</b></p><p>  case 0xde:</p><p>  key=1

104、;stateschange=1;</p><p><b>  break;</b></p><p>  case 0xbe:</p><p>  key=2;stateschange=1;</p><p><b>  break;</b></p><p>  case 0x7

105、e:</p><p>  key=3;stateschange=1;</p><p><b>  break;</b></p><p><b>  }</b></p><p>  while(temp1!=0xf0)</p><p><b>  {</b>

106、;</p><p><b>  temp1=P3;</b></p><p>  temp1=temp1&0xf0;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</

107、b></p><p><b>  P3=0xfd;</b></p><p><b>  temp1=P3;</b></p><p>  temp1=temp1&0xf0;</p><p>  if(temp1!=0xf0)</p><p><b>  

108、{</b></p><p>  delay(40);</p><p>  if(temp1!=0xf0)</p><p><b>  {</b></p><p><b>  temp1=P3;</b></p><p>  switch(temp1)</p&g

109、t;<p><b>  {</b></p><p>  case 0xed:</p><p>  key=4;stateschange=1;</p><p><b>  break;</b></p><p>  case 0xdd:</p><p>  key=

110、5;stateschange=1;</p><p><b>  break;</b></p><p>  case 0xbd:</p><p>  key=6;stateschange=1;</p><p><b>  break;</b></p><p>  case 0x

111、7d:</p><p>  key=7;stateschange=1;</p><p><b>  break;</b></p><p><b>  }</b></p><p>  while(temp1!=0xf0)</p><p><b>  {</b&g

112、t;</p><p><b>  temp1=P3;</b></p><p>  temp1=temp1&0xf0;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }<

113、/b></p><p><b>  P3=0xfb;</b></p><p><b>  temp1=P3;</b></p><p>  temp1=temp1&0xf0;</p><p>  if(temp1!=0xf0)</p><p><b> 

114、 {</b></p><p>  delay(40);</p><p>  if(temp1!=0xf0)</p><p><b>  {</b></p><p><b>  temp1=P3;</b></p><p>  switch(temp1)</p&

115、gt;<p><b>  {</b></p><p>  case 0xeb:</p><p>  key=8;stateschange=1;</p><p><b>  break;</b></p><p>  case 0xdb:</p><p>  key

116、=9;stateschange=1;</p><p><b>  break;</b></p><p>  case 0xbb:</p><p>  key=10;stateschange=1;</p><p><b>  break;</b></p><p>  case

117、0x7b:</p><p>  key=11;stateschange=1;</p><p><b>  break;</b></p><p><b>  }</b></p><p>  while(temp1!=0xf0)</p><p><b>  {</

118、b></p><p><b>  temp1=P3;</b></p><p>  temp1=temp1&0xf0;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }&

119、lt;/b></p><p><b>  P3=0xf7;</b></p><p><b>  temp1=P3;</b></p><p>  temp1=temp1&0xf0;</p><p>  if(temp1!=0xf0)</p><p><b&g

120、t;  {</b></p><p>  delay(40 );</p><p>  if(temp1!=0xf0)</p><p><b>  {</b></p><p><b>  temp1=P3;</b></p><p>  switch(temp1)<

121、;/p><p><b>  {</b></p><p>  case 0xe7:</p><p>  key=12;stateschange=1;</p><p><b>  break;</b></p><p>  case 0xd7:</p><p>

122、  key=13;stateschange=1;</p><p><b>  break;</b></p><p>  case 0xb7:</p><p>  key=14;stateschange=1;</p><p><b>  break;</b></p><p> 

123、 case 0x77:</p><p>  key=15;stateschange=1;</p><p><b>  break;</b></p><p><b>  }</b></p><p>  while(temp1!=0xf0)</p><p><b>  

124、{</b></p><p><b>  temp1=P3;</b></p><p>  temp1=temp1&0xf0;</p><p><b>  }</b></p><p><b>  }</b></p><p><b&g

125、t;  }</b></p><p><b>  }</b></p><p>  /********************************************************</p><p>  按鍵判斷函數(shù) 控制功能選擇以及數(shù)據(jù)顯示內(nèi)容</p><p>  /**************

126、******************************************/</p><p>  void keydeal()</p><p><b>  {</b></p><p>  if(keyinput==1&&key>=0&&key<=9)</p><p>

127、<b>  {</b></p><p>  s[5]=s[4];</p><p>  s[4]=s[3];</p><p>  s[3]=s[2];</p><p>  s[2]=s[1];</p><p>  s[1]=s[0];</p><p><b>  s

128、[0]=key;</b></p><p><b>  }</b></p><p>  else if (key==12)</p><p><b>  {</b></p><p><b>  uint i;</b></p><p>  key

129、input=1;</p><p>  temdisplay=0;</p><p><b>  led1=0;</b></p><p><b>  led2=1;</b></p><p>  for(i=0;i<6;i++)</p><p><b>  s[i

130、]=10;</b></p><p><b>  }</b></p><p>  else if (key==13)</p><p><b>  {</b></p><p>  keyinput=0;</p><p>  temdisplay=1;</p&g

131、t;<p><b>  led1=1;</b></p><p><b>  led2=0;</b></p><p><b>  }</b></p><p>  else if (key==14)</p><p><b>  {</b><

132、/p><p>  dualcomm=~dualcomm;</p><p>  led3=~led3;</p><p><b>  }</b></p><p><b>  key=16;</b></p><p><b>  }</b></p>&

133、lt;p>  /********************************************************</p><p><b>  主函數(shù)</b></p><p>  /********************************************************/</p><p>  void

134、 main()</p><p><b>  {</b></p><p><b>  init();</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  keys

135、can();</p><p>  keydeal();</p><p>  if(keyinput==1)</p><p><b>  {</b></p><p>  display2();</p><p>  if(dualcomm==1)</p><p><b&g

136、t;  {</b></p><p>  if(stateschange==1)</p><p><b>  send();</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(te

137、mdisplay==1)</p><p><b>  {</b></p><p><b>  uchar a;</b></p><p>  tmpchange();</p><p><b>  gettmp();</b></p><p>  for(a=

138、5;a>0;a--)</p><p>  display();</p><p>  if(dualcomm==1)</p><p><b>  {</b></p><p><b>  send();</b></p><p><b>  }</b>&

139、lt;/p><p><b>  }</b></p><p>  } </p><p><b>  }</b></p><p><b>  附件D 從機程序</b></p><p>  #include<reg51.h>

140、</p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  sbit dula=P2^6;//段選</p><p>  sbit wela=P2^7;//位選</p><p> 

141、 sbit led1=P1^1;//顯示鍵盤輸入數(shù)值指示燈</p><p>  sbit led2=P1^2;//顯示溫度指示燈</p><p>  sbit led3=P1^7;//顯示是否工作在省電模式</p><p>  sbit key=P3^4; //獨立按鍵檢測</p>&

142、lt;p>  bit recevflag=0;//判斷是否受到數(shù)據(jù)</p><p>  uchar a; //存儲串口接收到的數(shù)據(jù)</p><p>  uchar testbyte;//檢測字節(jié) 幀頭 用于判斷顯示的內(nèi)容 調(diào)用不同的顯示函數(shù)</p><p>  uint m=0;//鍵盤

溫馨提示

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

評論

0/150

提交評論