2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩35頁(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、<p><b>  摘要</b></p><p>  本設(shè)計(jì)是應(yīng)用MCS-51單片機(jī)的原理和控制理論設(shè)計(jì)一個(gè)多功能系統(tǒng),功能包括矩陣鍵盤(pán)輸入,鍵盤(pán)內(nèi)容顯示,溫度傳感器操縱,溫度顯示,并實(shí)現(xiàn)雙機(jī)通信以顯示同樣的內(nèi)容。硬件系統(tǒng)包括單片機(jī)最小系統(tǒng),ISP下載模塊,矩陣鍵盤(pán),獨(dú)立鍵盤(pán),溫度傳感器模塊,數(shù)碼管,流水燈等。除了課設(shè)規(guī)定的要求外,還加入一些有趣的擴(kuò)展功能,如:利用led燈指示單片

2、機(jī)工作狀態(tài),從機(jī)普通模式、空閑模式可選,用于節(jié)電。通過(guò)設(shè)計(jì),加深對(duì)51單片機(jī)的理解,掌握實(shí)際的應(yīng)用,增強(qiáng)動(dòng)手能力。</p><p>  設(shè)計(jì)包括硬件設(shè)計(jì)、軟件編程,仿真,制作實(shí)物,撰寫(xiě)報(bào)告等步驟。</p><p>  關(guān)鍵詞: 51單片機(jī) 多功能系統(tǒng)設(shè)計(jì) 單片機(jī)編程</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>  一 項(xiàng)目要求與說(shuō)明4</p><p><b>  二 方案論證5</b></p><p>  三 硬件電路設(shè)計(jì)5</p><p>  1 MCU控制器簡(jiǎn)介5</p><p>  2 單片機(jī)最小系統(tǒng)6</p><p>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

31、與單片機(jī)P2.6和P2.7相連。這樣用單片機(jī)可以控制鎖存器的鎖存端,進(jìn)而控制鎖存器的數(shù)據(jù)輸出,這種分時(shí)控制的方法便可方便地控制任意數(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)鎖存器的輸出端,陽(yáng)極接一個(gè)排阻。U5的鎖存端接單片機(jī)的P2.5口,這樣就可以通過(guò)單片機(jī)對(duì)這組發(fā)光二極管的亮滅進(jìn)行控制。</p><p><b>  圖9 流水燈模塊</b></p><p><b>  7 串行口電路</b></p>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

47、/p><p>  附件A 單片機(jī)系統(tǒng)原理圖</p><p>  圖19 單片機(jī)系統(tǒng)原理圖</p><p>  附件B 單片機(jī)系統(tǒng)實(shí)物</p><p><b>  附件C 主機(jī)程序</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;//鍵盤(pán)輸入功能指

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

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

51、盤(pán)顯示函數(shù)的依據(jù)</p><p>  bit temdisplay=0; //判別溫度顯示 作為調(diào)用溫度顯示函數(shù)的依據(jù)</p><p>  bit dualcomm=0; //判別是否進(jìn)行雙機(jī)通信</p><p>  uchar s[6]; //鍵盤(pán)控制的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}; //無(wú)小數(shù)點(diǎn)</p><p>  uchar code table1[]={0xbf,0x86,0xdb,0

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

54、*********************************************</p><p><b>  延時(shí)函數(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++延時(shí)</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) //寫(xiě)一個(gè)字節(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) //寫(xiě)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; //寫(xiě)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 啟動(dòng)轉(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é)組成一個(gè)整型變量</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];//顯示個(gè)位</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án)</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>  鍵盤(pán)掃描函數(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 從機(jī)程序</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;//顯示鍵盤(pán)輸入數(shù)值指示燈</p><p>  sbit led2=P1^2;//顯示溫度指示燈</p><p>  sbit led3=P1^7;//顯示是否工作在省電模式</p><p>  sbit key=P3^4; //獨(dú)立按鍵檢測(cè)</p>&

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

溫馨提示

  • 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ù)僅提供信息存儲(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)論