河南理工大學(xué)單片機(jī)課程設(shè)計(jì)_第1頁(yè)
河南理工大學(xué)單片機(jī)課程設(shè)計(jì)_第2頁(yè)
河南理工大學(xué)單片機(jī)課程設(shè)計(jì)_第3頁(yè)
河南理工大學(xué)單片機(jī)課程設(shè)計(jì)_第4頁(yè)
河南理工大學(xué)單片機(jī)課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩56頁(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)介

年4月19日河南理工大學(xué)單片機(jī)課程設(shè)計(jì)文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。河南理工大學(xué)《單片機(jī)應(yīng)用與仿真訓(xùn)練》設(shè)計(jì)報(bào)告多機(jī)溫度檢測(cè)系統(tǒng)設(shè)計(jì)姓名:學(xué)號(hào):專業(yè)班級(jí):電氣09-6班指導(dǎo)老師:王莉所在學(xué)院:電氣工程與自動(dòng)化學(xué)院5月20日目錄目錄 I摘要 II1概述 11.1下位機(jī)溫度采集發(fā)送系統(tǒng) 11.2上位機(jī)顯示及報(bào)警系統(tǒng) 12系統(tǒng)總體方案及硬件設(shè)計(jì) 32.1主要硬件簡(jiǎn)介 32.2各部分電路設(shè)計(jì) 53軟件設(shè)計(jì) 93.1功能需求分析 94實(shí)驗(yàn)仿真 115課程設(shè)計(jì)體會(huì) 12參考文獻(xiàn) 13附錄一源程序 14附錄二系統(tǒng)原理圖 31 32附錄三實(shí)物圖片 32摘要本設(shè)計(jì)是采用AT89S528位單片機(jī)作為控制核心設(shè)計(jì)了溫度測(cè)量系統(tǒng),該系統(tǒng)由溫度檢測(cè)模塊、微控制器模塊、串口通信模塊、數(shù)碼管顯示和報(bào)警模塊等四部分組成,能對(duì)0℃~99℃范圍的溫度進(jìn)行測(cè)量,同時(shí)利用4位八段數(shù)碼管能夠?qū)崟r(shí)顯示環(huán)境溫度。該系統(tǒng)結(jié)構(gòu)簡(jiǎn)單,成本低,具有較好的應(yīng)用價(jià)值。本系統(tǒng)首先由下位AT89S52單片機(jī)經(jīng)過(guò)p2.3口不斷循環(huán)采集數(shù)字化溫度傳感器DS18B20的溫度數(shù)據(jù),然后轉(zhuǎn)換成十進(jìn)制溫度值,經(jīng)過(guò)串行口發(fā)送至上位AT89S52單片機(jī),由上位機(jī)經(jīng)過(guò)串行口接收數(shù)據(jù),再與報(bào)警溫度進(jìn)行比較,判斷是否進(jìn)行報(bào)警,上位機(jī)同時(shí)驅(qū)動(dòng)四位八段數(shù)碼管將溫度顯示出來(lái)。實(shí)現(xiàn)本系統(tǒng)的主要難點(diǎn)在于溫度的采集和傳送。DS18B20只需要接到單片機(jī)的一個(gè)I/O口上,由于單總線為開(kāi)漏因此需要外接一個(gè)4.7K的上拉電阻。其功能強(qiáng)大,但需要不斷地發(fā)送采集命令以及循環(huán)讀取它傳出的數(shù)值,然后進(jìn)行換算成十進(jìn)制溫度。單片機(jī)串口通信是單片機(jī)一個(gè)非常有用的功能,能夠構(gòu)建多機(jī)系統(tǒng)來(lái)實(shí)現(xiàn)更為強(qiáng)大的功能,而且經(jīng)過(guò)MAX232能夠進(jìn)行遠(yuǎn)距離的通信,實(shí)現(xiàn)遠(yuǎn)程控制,可是對(duì)于單片機(jī)初學(xué)者來(lái)說(shuō)不太容易掌握其發(fā)送接收的時(shí)序和數(shù)據(jù)格式,因此我們采用了簡(jiǎn)單的直接通信而未進(jìn)行數(shù)據(jù)發(fā)送前的請(qǐng)求應(yīng)答和數(shù)據(jù)發(fā)送完得數(shù)據(jù)檢查校錯(cuò)。當(dāng)然,由于我們是首次設(shè)計(jì)這樣完整的應(yīng)用系統(tǒng),可能實(shí)現(xiàn)的功能不太完善。關(guān)鍵詞:?jiǎn)纹瑱C(jī);溫度檢測(cè);串口通信第一章概述1.1下位機(jī)溫度采集發(fā)送系統(tǒng)下位機(jī)溫度采集發(fā)送系統(tǒng)是本系統(tǒng)的主要核心之一,它的主要功能是采集DS18B20的溫度數(shù)據(jù),進(jìn)行轉(zhuǎn)換,并經(jīng)過(guò)串口發(fā)送出去。該溫度測(cè)量系統(tǒng)采用8051內(nèi)核Atmel公司的AT89S52八位單片機(jī)。溫度采集發(fā)送系統(tǒng)由溫度檢測(cè)模塊、下位控制器模塊、發(fā)送放大模塊三部分組成,如圖1-1溫度測(cè)量系統(tǒng)的系統(tǒng)框圖:溫度溫度采集下位機(jī)控制模塊發(fā)送放大模塊圖1-1溫度測(cè)量系統(tǒng)的系統(tǒng)框圖溫度檢測(cè)模塊中溫度傳感器DS18B20采集溫度數(shù)據(jù),經(jīng)過(guò)P2.3口傳給下位單片機(jī),微控制模塊進(jìn)行數(shù)據(jù)轉(zhuǎn)換,得出十進(jìn)制溫度值,然后經(jīng)過(guò)串行口經(jīng)MAX232將數(shù)據(jù)發(fā)送出去。1.2上位機(jī)顯示及報(bào)警系統(tǒng)上位機(jī)系統(tǒng)的主要功能是接收下位機(jī)發(fā)送過(guò)來(lái)的溫度數(shù)據(jù),與報(bào)警溫度進(jìn)行比較,判斷是否發(fā)送報(bào)警信號(hào),并同時(shí)直接驅(qū)動(dòng)四位八段數(shù)碼管進(jìn)行顯示。上位機(jī)系統(tǒng)由串口接收模塊、處理控制模塊、數(shù)碼管顯示模塊和報(bào)警模塊四部分組成,如圖1-2上位機(jī)系統(tǒng)框圖:數(shù)碼管顯示串口接收處理控制數(shù)碼管顯示串口接收處理控制報(bào)警報(bào)警控制模塊圖1-2上位機(jī)系統(tǒng)框圖串行口接收數(shù)據(jù)后進(jìn)行判斷是否報(bào)警,并由P0口和P2.0~P2.3直接驅(qū)動(dòng)數(shù)碼管顯示溫度數(shù)據(jù)。報(bào)警控制模塊經(jīng)過(guò)按鈕電路能夠改變報(bào)警溫度的上下限實(shí)現(xiàn)系統(tǒng)的靈活功能。第二章系統(tǒng)總體方案及硬件設(shè)計(jì)2.1主要硬件簡(jiǎn)介=1\*GB2⑴單片機(jī)簡(jiǎn)介所謂單片機(jī),全稱是單片微型計(jì)算機(jī),又控制器。它是在一塊半導(dǎo)體芯片上,集成了CPU,ROM,RAM,I/O口、定時(shí)器/計(jì)數(shù)器、中斷系統(tǒng)、AD模數(shù)轉(zhuǎn)換器等功能部件,構(gòu)成了一臺(tái)完整的數(shù)字電子機(jī)。當(dāng)前單片機(jī)己成功地運(yùn)用在智能儀表、機(jī)電設(shè)備、過(guò)程控制、數(shù)據(jù)處自動(dòng)檢測(cè)和家用電器等各個(gè)方面。單片機(jī)在控制領(lǐng)域中,有如下幾個(gè)特點(diǎn):1)小巧靈活、成本低、易于產(chǎn)品化,能方便地組裝成各種智能式控備及各種智能儀器儀表。2)面向控制,能針對(duì)性地解決從簡(jiǎn)單到復(fù)雜的各類控制任務(wù),因而得最佳的性能價(jià)格比。3)抗干擾能力強(qiáng),適應(yīng)溫度范圍寬,在各種惡劣的環(huán)境下都能可靠作,這是其它機(jī)種無(wú)法比擬的。4)能夠很方便地實(shí)現(xiàn)多機(jī)和分布式控制,使整個(gè)控制系統(tǒng)的效率和性大為提高AT89S52單片機(jī)是Atmel公司推出的和工業(yè)80C51產(chǎn)品為完全兼容的8位機(jī),其特有的布爾處理機(jī),在邏輯處理與控制方面具有突出優(yōu)點(diǎn)。特點(diǎn)如下:*與MCS-51單片機(jī)產(chǎn)品兼容*8K字節(jié)在系統(tǒng)可編程Flash存儲(chǔ)器*1000次擦寫(xiě)周期*全靜態(tài)操作:0Hz~33Hz*三級(jí)加密程序存儲(chǔ)器R*32個(gè)可編程I/O口線*三個(gè)16位定時(shí)器/計(jì)數(shù)器*八個(gè)中斷源*全雙工UART串行通道*8位微控制器*低功耗空閑和掉電模式*掉電后中斷可喚醒*8K字節(jié)在系統(tǒng)可編程*看門(mén)狗定時(shí)器*雙數(shù)據(jù)指針*掉電標(biāo)識(shí)符圖2-1為AT89S52的引腳圖:圖2-1AT89S52引腳圖=2\*GB2⑵DS18B20簡(jiǎn)介數(shù)字化溫度傳感器是DALLAS最新單線數(shù)字溫度傳感器,支持“一線總線”接口,測(cè)量溫度范圍為-55°C~+125°C,在-10~+85°C范圍內(nèi),精度為±0.5°C。DS1822的精度較差為±2°C?,F(xiàn)場(chǎng)溫度直接以“一線總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。其適合于現(xiàn)場(chǎng)溫度測(cè)量,能夠程序設(shè)定9~12位的分辨率,精度為±0.5°C??蛇x更小的封裝方式,更寬的電壓適用范圍。分辨率設(shè)定,及用戶設(shè)定的報(bào)警溫度存儲(chǔ)在EEPROM中,掉電后依然保存。DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL、配置寄存器。DS18B20的管腳排列如下圖2-2DS18B20管腳圖DS18B20溫度傳感器的內(nèi)部存儲(chǔ)器包括一個(gè)高速暫存RAM和一個(gè)非易失性的可電擦除的E2RAM,后者存放高溫度和低溫度觸發(fā)器TH、TL和結(jié)構(gòu)寄存器。暫存存儲(chǔ)器包含了8個(gè)連續(xù)字節(jié),前兩個(gè)字節(jié)是測(cè)得的溫度信息,第一個(gè)字節(jié)的內(nèi)容是溫度的低八位,第二個(gè)字節(jié)是溫度的高八位。第三個(gè)和第四個(gè)字節(jié)是TH、TL的易失性拷貝,第五個(gè)字節(jié)是結(jié)構(gòu)寄存器的易失性拷貝,這三個(gè)字節(jié)的內(nèi)容在每一次上電復(fù)位時(shí)被刷新。第六、七、八個(gè)字節(jié)用于內(nèi)部計(jì)算。第九個(gè)字節(jié)是冗余檢驗(yàn)字節(jié)。根據(jù)DS18B20的通訊協(xié)議,主機(jī)控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過(guò)三個(gè)步驟:每一次讀寫(xiě)之前都要對(duì)DS18B20進(jìn)行復(fù)位,復(fù)位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對(duì)DS18B20進(jìn)行預(yù)定的操作。復(fù)位要求主CPU將數(shù)據(jù)線下拉500微秒,然后釋放,DS18B20收到信號(hào)后等待16~60微秒左右,后發(fā)出60~240微秒的存在低脈沖,主CPU收到此信號(hào)表示復(fù)位成功。DS18B20產(chǎn)品的特點(diǎn)(1)只要求一個(gè)端口即可實(shí)現(xiàn)通信。(2)在DS18B20中的每個(gè)器件上都有獨(dú)一無(wú)二的序列號(hào)。(3)實(shí)際應(yīng)用中不需要外部任何元器件即可實(shí)現(xiàn)測(cè)溫。(4)測(cè)量溫度范圍在-55°C-+125°C之間。(5)數(shù)字溫度計(jì)的分辨率用戶能夠從9位到12位選擇。(6)內(nèi)部有溫度報(bào)警上、下限設(shè)置。2.2各部分電路設(shè)計(jì)=1\*GB2⑴、單片機(jī)最小系統(tǒng)設(shè)計(jì)最小應(yīng)用系統(tǒng)設(shè)計(jì)是單片機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì)基礎(chǔ)。它包括單片機(jī)的選擇、時(shí)鐘系統(tǒng)設(shè)計(jì)、復(fù)位電路設(shè)計(jì)、簡(jiǎn)單的I/O口擴(kuò)展、掉電保護(hù)等。本次設(shè)計(jì)采用的是AT89C52,其特點(diǎn)是8字節(jié)FLASH閃速存儲(chǔ)器,256字節(jié),32個(gè)I/O口線,3個(gè)16位定時(shí)/計(jì)數(shù)器,掉電方式保存RAM中的內(nèi)容,但振蕩器停止工作并禁止其它所有部件工作直到下一個(gè)硬件復(fù)位.主演的是它與C51系列產(chǎn)品指令和引腳完全兼容.最小系統(tǒng)的時(shí)鐘電路采用12MHZ晶振,機(jī)器周期為1us,連接兩個(gè)30pF的電容,連接到AT89S52的XATL1,XATL2上面,如3.2圖所示。復(fù)位電路采用的是上電+按鈕電平復(fù)位,是利用電容充電來(lái)實(shí)現(xiàn)上電復(fù)位。當(dāng)按鈕按下后,電源施加在單片機(jī)復(fù)位端RST上,實(shí)現(xiàn)單片機(jī)復(fù)位功能.。最小系統(tǒng)設(shè)計(jì)如圖2-3所示圖2-3單片機(jī)最小系統(tǒng)設(shè)計(jì)圖=2\*GB2⑵DS18B20與AT89S52單片機(jī)接口電路的設(shè)計(jì)DSl8B20數(shù)字溫度計(jì)提供9位(二進(jìn)制)溫度讀數(shù),指示器件的溫度信息經(jīng)過(guò)單線接口送入DSl8B20或從DSl8B20送出,因此從主機(jī)CPU到DSl8B20僅需一條線,DS18B20與AT89C52單片機(jī)的接口電路如圖2-4所示,其中DS18B20與單片機(jī)的接口為P2.3。圖2-4DS18B20模塊設(shè)計(jì)=3\*GB2⑶下位機(jī)與上位機(jī)串行通信電路設(shè)計(jì)本系統(tǒng)采用的是下位機(jī)采集溫度信息并換算,經(jīng)過(guò)串行口發(fā)送至上位機(jī),因此需用到單片機(jī)的串行口。單片機(jī)的串行口是一個(gè)可編程的全雙工串行通信接口。它可用作異步通信方式,與串行傳送信息的外部設(shè)備相連接,或用于經(jīng)過(guò)標(biāo)準(zhǔn)異步通信協(xié)議進(jìn)行全雙工的AT89S52多機(jī)系統(tǒng)也能經(jīng)過(guò)同步方式,使用TTL或CMOS移位寄存器來(lái)擴(kuò)充I/O口。AT89S52單片機(jī)經(jīng)過(guò)管腳RXD(P3.0,串行數(shù)據(jù)接收端)和管腳TXD(P3.1,串行數(shù)據(jù)發(fā)送端)與外界通信。SBUF是串行口緩沖寄存器,包括發(fā)送寄存器和接收寄存器。它們有相同名字和地址空間,但不會(huì)出現(xiàn)沖突,因?yàn)樗鼈儍蓚€(gè)一個(gè)只能被CPU讀出數(shù)據(jù),一個(gè)只能被CPU寫(xiě)入數(shù)據(jù)。本系統(tǒng)串行通信具體設(shè)計(jì)如圖2-5,圖中標(biāo)號(hào)IRXD和ITXD分別代表下位機(jī)得RXD口和TXD口。圖2-5串行通信設(shè)計(jì)串行口的控制與狀態(tài)寄存器簡(jiǎn)介=1\*GB3①串行口控制寄存器SCON它用于定義串行口的工作方式及實(shí)施接收和發(fā)送控制。字節(jié)地址為98H,其各位定義如下表:D7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRISM0、SM1:串行口工作方式選擇位,其定義如下:SM0、SM1工作方式功能描述波特率00方式08位移位寄存器Fosc/1201方式110位UART可變10方式211位UARTFosc/64或fosc/3211方式311位UART可變其中fosc為晶體震蕩器頻率SM2:多機(jī)通信控制位。在方式0時(shí),SM2一定要等于0。在方式1中,當(dāng)(SM2)=1則只有接收到有效停止位時(shí),RI才置1。在方式2或方式3當(dāng)(SM2)=1且接收到的第九位數(shù)據(jù)RB8=0時(shí),RI才置1。REN:接收允許控制位。由軟件置位以允許接收,又由軟件清0來(lái)禁止接收。TB8:是要發(fā)送數(shù)據(jù)的第9位。在方式2或方式3中,要發(fā)送的第9位數(shù)據(jù),根據(jù)需要由軟件置1或清0。例如,可約定作為奇偶校驗(yàn)位,或在多機(jī)通信中作為區(qū)別地址幀或數(shù)據(jù)幀的標(biāo)志位。RB8:接收到的數(shù)據(jù)的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8為接收到的停止位。在方式2或方式3中,RB8為接收到的第9位數(shù)據(jù)。TI:發(fā)送中斷標(biāo)志。在方式0中,第8位發(fā)送結(jié)束時(shí),由硬件置位。在其它方式的發(fā)送停止位前,由硬件置位。TI置位既表示一幀信息發(fā)送結(jié)束,同時(shí)也是申請(qǐng)中斷,可根據(jù)需要,用軟件查詢的辦法獲得數(shù)據(jù)已發(fā)送完畢的信息,或用中斷的方式來(lái)發(fā)送下一個(gè)數(shù)據(jù)。TI必須用軟件清0。RI:接收中斷標(biāo)志位。在方式0,當(dāng)接收完第8位數(shù)據(jù)后,由硬件置位。在其它方式中,在接收到停止位的中間時(shí)刻由硬件置位(例外情況見(jiàn)于SM2的說(shuō)明)。RI置位表示一幀數(shù)據(jù)接收完畢,可用查詢的辦法獲知或者用中斷的辦法獲知。RI也必須用軟件清0。=2\*GB3②特殊功能寄存器PCONPCON是為了在CHMOS的AT89S52單片機(jī)上實(shí)現(xiàn)電源控制而附加的。其中最高位是SMOD。它是一個(gè)特殊功能寄存器,沒(méi)有位尋址功能,字節(jié)地址為87H。PCON電源管理寄存器結(jié)構(gòu)D7D6D5D4D3D2D1D0SMODGF1GF0PDIDL其中D7位(SMOD)為波特率選擇位。=4\*GB2⑷LED顯示電路設(shè)計(jì)上位機(jī)接收到溫度數(shù)據(jù)后需要直接驅(qū)動(dòng)四位八段數(shù)碼管將溫度值顯示出來(lái),本系統(tǒng)采用的是共陰四位八段數(shù)碼管,其具體設(shè)計(jì)如圖2-6。圖2-6數(shù)碼管顯示電路設(shè)計(jì)=5\*GB2⑸鍵盤(pán)電路設(shè)計(jì)本系統(tǒng)只需用鍵盤(pán)實(shí)現(xiàn)簡(jiǎn)單的改變報(bào)警上下限,因此只需要簡(jiǎn)單的四個(gè)按鈕即可,鍵盤(pán)電路具體設(shè)計(jì)如圖2-7。圖2-7鍵盤(pán)電路設(shè)計(jì)第三章軟件設(shè)計(jì)3.1功能需求分析本系統(tǒng)需要具體實(shí)現(xiàn)的功能可劃分為以下幾個(gè)部分:溫度數(shù)據(jù)采集溫度數(shù)據(jù)換算溫度數(shù)據(jù)傳送與接收溫度顯示報(bào)警上下限調(diào)整溫度數(shù)據(jù)與報(bào)警上下限比較及報(bào)警系統(tǒng)又分為上位機(jī)和下位機(jī)兩部分,易知前三個(gè)要求屬于下位機(jī)的功能范疇,要求三至要求六屬于上位機(jī)的功能范疇。根據(jù)下位機(jī)的功能范疇,可設(shè)計(jì)出其工作流程圖如下:開(kāi)始開(kāi)始串口初始化并發(fā)送溫度DS18B20初始化系統(tǒng)初始化采集DS18B20溫度并換算圖3-1下位機(jī)工作流程圖由流程圖可知,可將下位機(jī)的程序劃分為若干個(gè)實(shí)現(xiàn)單一功能的子程序,如DS18B20初始化程序、溫度采集程序、溫度換算程序、串口初始化程序和串口發(fā)送程序等。根據(jù)上位機(jī)的功能范疇,可將上位機(jī)得工作流程設(shè)計(jì)如下:開(kāi)始開(kāi)始系統(tǒng)初始化串口初始化串口中斷開(kāi)中斷顯示溫度值關(guān)中斷接收數(shù)據(jù)掃描鍵盤(pán)改變報(bào)警上下限圖3-2上位機(jī)工作流程圖第四章仿真實(shí)驗(yàn)第五章總結(jié)體會(huì)經(jīng)過(guò)這次單片機(jī)課程設(shè)計(jì),我們不但加深了對(duì)單片機(jī)理論的理解,將很多課本理論很好地應(yīng)用到實(shí)際當(dāng)中,而且我們還學(xué)會(huì)了如何去培養(yǎng)我們的學(xué)習(xí)精神和團(tuán)隊(duì)協(xié)作能力,從而不斷地戰(zhàn)勝自己,超越自己。經(jīng)過(guò)這次完成這次的設(shè)計(jì),我們發(fā)現(xiàn)了我們?cè)谡n堂上學(xué)習(xí)的知識(shí)是十分寶貴且有用的,也發(fā)現(xiàn)了我們?cè)谡n堂學(xué)習(xí)過(guò)程中的不足和大意,有很多東西都在課堂上被我們忽略來(lái)了,為了完成本次的設(shè)計(jì),我們不斷地翻閱書(shū)籍、請(qǐng)教同學(xué),重新學(xué)習(xí)了課堂上的知識(shí),雖然還沒(méi)能做到融會(huì)貫通、厚積薄發(fā),但畢竟窺一管而知全豹,走進(jìn)了單片機(jī)應(yīng)用的遼闊世界,了解到了單片機(jī)系統(tǒng)的強(qiáng)大功能,開(kāi)闊了視野,提高了設(shè)計(jì)能力,使更多的知識(shí)成為了自己的東西,相信這些在我們今后的學(xué)習(xí)和工作生涯中將會(huì)是一筆寶貴的財(cái)富。在這次設(shè)計(jì)中,串口通信是我們的一大難點(diǎn),不斷的仿真和不斷的錯(cuò)誤和失敗告訴我們基礎(chǔ)知識(shí)的不踏實(shí),正如老師所言“基礎(chǔ)不牢,地動(dòng)山搖”,于是我們重新認(rèn)真的看課本重新的學(xué)習(xí),終于實(shí)現(xiàn)了串口發(fā)送和接受功能。本次設(shè)計(jì)我們使用的是C51語(yǔ)言,雖然c語(yǔ)言結(jié)構(gòu)明確,可讀性強(qiáng),但由于單片機(jī)的硬件資源有限,在數(shù)據(jù)定義和特殊寄存器的選用及修改上比較固定,對(duì)于新手來(lái)說(shuō)有些理解和實(shí)現(xiàn),因此C語(yǔ)言編程時(shí)很多地方程序結(jié)構(gòu)固定,而我們又沒(méi)有系統(tǒng)深入的學(xué)習(xí)過(guò)C51語(yǔ)言,因此在這次設(shè)計(jì)中我們部分的借鑒了別人的程序,雖然這一部分不是我們寫(xiě)的,可是我們認(rèn)真讀懂了它而且學(xué)到了很多東西,包括編程思想和設(shè)計(jì)技巧,這些都提高了我們的學(xué)習(xí)能力和模仿能力??傊?,經(jīng)過(guò)這次的課程設(shè)計(jì),使我們認(rèn)識(shí)到了不足,看清了學(xué)習(xí)的方向,找到了學(xué)習(xí)的動(dòng)力,提高了動(dòng)手能力和學(xué)習(xí)能力,收獲很大。參考文獻(xiàn)[1]賈振國(guó).DS1820及高精度溫度測(cè)量的實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,(1):58-59.[2]郭愛(ài)芳主編.傳感器原理及應(yīng)用.西安電子科技大學(xué)出版社..5[3]姜志海,趙艷雷,單片機(jī)的C語(yǔ)言程序設(shè)計(jì)與應(yīng)用北京;電子工業(yè)出版社[4]張齊朱西寧,單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)技術(shù)北京電子工業(yè)出版社[5]余發(fā)山王福忠,單片機(jī)原理及應(yīng)用技術(shù)徐州中國(guó)礦業(yè)大學(xué)出版社附錄一源程序//上位機(jī)程序/*名稱:DS18b20多級(jí)測(cè)溫上位機(jī)程序內(nèi)容:接收下位機(jī)溫度數(shù)據(jù)數(shù)碼管顯示能夠顯示負(fù)溫度超過(guò)設(shè)定溫度報(bào)警*/#include<reg52.h>//包含頭文件,一般情況不需要改動(dòng),頭文件包含特殊功能寄存器的定義#include"delay.h"#defineDataPortP0//定義數(shù)據(jù)端口程序中遇到DataPort則用P0替換/* 按鍵位定義*/sbitKEY_ADD=P1^3;//定義按鍵輸入端口sbitKEY_DEC=P1^2;sbitKEY_MAX=P1^1;sbitKEY_MIN=P1^0;unsignedcharcodeDuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//顯示段碼值0~9unsignedcharcodeWeiMa[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//分別對(duì)應(yīng)相應(yīng)的數(shù)碼管點(diǎn)亮,即位碼unsignedcharNegTemp;//負(fù)溫度標(biāo)志unsignedcharTempflag;//溫度顯示標(biāo)志unsignedintTempH,TempL;//溫度數(shù)據(jù)unsignedintTempMax=60,TempMin=10;//溫度上下限unsignedcharTempData[4];//存儲(chǔ)顯示值的全局變量unsignedcharRecieveData[3];//存儲(chǔ)串口數(shù)據(jù)的全局變量staticunsignedintp;//下位機(jī)數(shù)據(jù)的位變量voidcsh(void);//串口初始化程序voidInit_Timer0(void);//定時(shí)器初始化程序unsignedintLimit_Adjust(unsignedintTemp);//鍵盤(pán)溫度上下限調(diào)整程序voidDisplay(unsignedcharNegTemp,unsignedintTempH,TempL);//數(shù)碼管顯示程序/*串口通訊初始化*/voidcsh() { SCON=0x50; //SCON:模式1,8-bitUART,使能接收 PCON=0; TH1=0xF3; TL1=0XF3; TMOD=0X20; //TMOD:timer1,mode2,8-bit重裝 EA=1; ET1=0; ES=1; TR1=1; }/*主函數(shù)*/voidmain(void){ Init_Timer0();//定時(shí)器初始化 csh();//串口通訊初始化 while(1)//主循環(huán){/* 串口接收數(shù)據(jù)*/ ES=0; TI=0; SBUF=p; while(!TI); TI=0; ES=1; DelayUs2x(100); p++; if(p>3) p=0;NegTemp=RecieveData[0];TempH=RecieveData[1];TempL=RecieveData[2];/* 掃描鍵盤(pán),調(diào)整溫度上下限長(zhǎng)按按KEY_ADD鍵或KEY_DEC鍵可連續(xù)調(diào)整*/ while(!KEY_MAX)//檢測(cè)到最大值調(diào)整鍵按下 { Display(0,TempMax,0);//顯示溫度上限 TempMax=Limit_Adjust(TempMax); //調(diào)整溫度上限 } while(!KEY_MIN) //檢測(cè)到最小值調(diào)整鍵按下 { Display(0,TempMin,0);//顯示溫度下限 TempMin=Limit_Adjust(TempMin); //調(diào)整溫度下限 } Display(NegTemp,TempH,TempL);//調(diào)用數(shù)碼管顯示 } //主循環(huán)結(jié)束}/* 串口中斷*/voidintrr()interrupt4 { RecieveData[p]=SBUF; RI=0; }/*定時(shí)器初始化子程序*/voidInit_Timer0(void){TMOD|=0x01; //使用模式1,16位定時(shí)器,使用"|"符號(hào)能夠在使用多個(gè)定時(shí)器時(shí)不受影響 //TH0=0x00; //給定初值//TL0=0x00;EA=1;//總中斷打開(kāi)ET0=1;//定時(shí)器中斷打開(kāi)TR0=1;//定時(shí)器開(kāi)關(guān)打開(kāi)}/*定時(shí)器中斷子程序*/voidTimer0_isr(void)interrupt1{TH0=(65536-)/256; //重新賦值2msTL0=(65536-)%256;}/* 數(shù)碼管顯示程序*/voidDisplay(unsignedcharNegTemp,unsignedintTempH,TempL){unsignedinti,j;/*溫度顯示標(biāo)志處理,超溫報(bào)警*/ if(TempH>TempMax)Tempflag=0x76; //顯示"H" elseif(TempH<TempMin) Tempflag=0x38; //顯示"L" else Tempflag=0x39;//顯示C符號(hào)/*溫度數(shù)據(jù)處理*/ NegTemp=0;//本實(shí)例對(duì)負(fù)溫度暫不作處理,如果進(jìn)行測(cè)溫范圍擴(kuò)展至負(fù)溫度,應(yīng)屏蔽本句 if(!NegTemp==0) //負(fù)溫度(18B20所測(cè)負(fù)溫度整數(shù)位只有兩位){ TempData[0]=NegTemp;if((TempH%100)/10==0)//消隱 TempData[1]=0; else TempData[1]=DuanMa[(TempH%100)/10];//十位溫度 TempData[2]=DuanMa[(TempH%100)%10]|0x80;//個(gè)位溫度,帶小數(shù)點(diǎn) TempData[3]=DuanMa[TempL]; }elseif(TempH/100==0) //正溫度整數(shù)位只有兩位( { TempData[0]=DuanMa[(TempH%100)/10];//十位溫度 TempData[1]=DuanMa[(TempH%100)%10]|0x80;//個(gè)位溫度,帶小數(shù)點(diǎn) TempData[2]=DuanMa[TempL]; TempData[3]=Tempflag; } else//溫度整數(shù)位為三位 { TempData[0]=DuanMa[TempH/100];//百位溫度TempData[1]=DuanMa[(TempH%100)/10];//十位溫度TempData[2]=DuanMa[(TempH%100)%10]|0x80;//個(gè)位溫度,帶小數(shù)點(diǎn)TempData[3]=DuanMa[TempL]; }/*溫度數(shù)據(jù)顯示*/ for(j=0;j<100;j++) { for(i=0;i<4;i++) { //DataPort=0;//清空數(shù)據(jù),防止有交替重影P2=WeiMa[i];//取位碼DataPort=TempData[i];//取顯示數(shù)據(jù),段碼 DelayUs2x(200);//掃描間隙延時(shí),時(shí)間太長(zhǎng)會(huì)閃爍,太短會(huì)造成重影 } } }/*鍵盤(pán)溫度上下限調(diào)整程序,含參數(shù)unsignedintTemp,返回值為本參數(shù)調(diào)整后的值長(zhǎng)按按KEY_ADD鍵或KEY_DEC鍵可連續(xù)調(diào)整Temp數(shù)值*/unsignedintLimit_Adjust(unsignedintTemp)//鍵盤(pán)溫度上下限調(diào)整程序{unsignedcharkey_press_num=0;if(!KEY_ADD)//如果檢測(cè)到低電平,說(shuō)明按鍵按下{ DelayMs(10);//延時(shí)去抖,一般10-20msif(!KEY_ADD)//再次確認(rèn)按鍵是否按下,沒(méi)有按下則退出 { while(!KEY_ADD) { key_press_num++;DelayMs(10);//10x200=ms=2s if(key_press_num==200)//大約2s { key_press_num=0;//如果達(dá)到長(zhǎng)按鍵標(biāo)準(zhǔn)//則進(jìn)入長(zhǎng)按鍵動(dòng)作while(!KEY_ADD)//這里用于識(shí)別是否按鍵還在按下 //如果按下執(zhí)行相關(guān)動(dòng)作,否則退出 { if((Temp<99)&&(TempMin<TempMax))//加操作 Temp++; Display(0,Temp,0);DelayMs(50);//用于調(diào)節(jié)長(zhǎng)按循環(huán)操作的速度,能夠自行調(diào)整此值以便達(dá)到最佳效果 } } }key_press_num=0;//防止累加造成錯(cuò)誤識(shí)別 if((Temp<99)&&(TempMin<TempMax))//加操作 Temp++; Display(0,Temp,0); } }if(!KEY_DEC)//如果檢測(cè)到低電平,說(shuō)明按鍵按下{ DelayMs(10);//延時(shí)去抖,一般10-20msif(!KEY_DEC)//再次確認(rèn)按鍵是否按下,沒(méi)有//按下則退出 { while(!KEY_DEC) { key_press_num++;DelayMs(10); if(key_press_num==200)//大約2s { key_press_num=0;while(!KEY_DEC) { if((Temp>0)&&(TempMax>TempMin))//減操作 Temp--; Display(0,Temp,0);DelayMs(50);//用于調(diào)節(jié)長(zhǎng)按循環(huán)操作的速度 } } }key_press_num=0;//防止累加造成錯(cuò)誤識(shí)別 if((Temp>0)&&(TempMax>TempMin))//減操作 Temp--; Display(0,Temp,0); } }returnTemp;}//延時(shí)#include"delay.h"/*uS延時(shí)函數(shù),含有輸入?yún)?shù)unsignedchart,無(wú)返回值unsignedchar是定義無(wú)符號(hào)字符變量,其值的范圍是0~255這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編,大致延時(shí)長(zhǎng)度如下T=tx2+5uS*/voidDelayUs2x(unsignedchart){while(--t);}/*mS延時(shí)函數(shù),含有輸入?yún)?shù)unsignedchart,無(wú)返回值unsignedchar是定義無(wú)符號(hào)字符變量,其值的范圍是0~255這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編*/voidDelayMs(unsignedchart){while(t--){//大致延時(shí)1mSDelayUs2x(245); DelayUs2x(245);}}//顯示#include"display.h"/*數(shù)碼管顯示函數(shù),含有輸入?yún)?shù)unsignedcharNegTemp,unsignedintTempH,TempL無(wú)符號(hào)字符變量NegTemp為負(fù)溫度標(biāo)志,無(wú)符號(hào)整型變量TempH、TempL分別為溫度數(shù)據(jù)整數(shù)位和小數(shù)位用于完成溫度顯示標(biāo)志處理,溫度數(shù)據(jù)處理和溫度數(shù)據(jù)顯示*/voidDisplay(unsignedcharNegTemp,unsignedintTempH,TempL)//數(shù)碼管顯示程序{unsignedinti,j;/*溫度顯示標(biāo)志處理*/ if(TempH>TEMPMAX)//如果超溫則提示Tempflag=0x76; //顯示"H" elseif(TemL<TEMPMIN) Tempflag=0x38; //顯示"L" else Tempflag=0x39;//顯示C符號(hào)/*溫度數(shù)據(jù)處理*/ if(!NegTemp==0) //負(fù)溫度(負(fù)溫度整數(shù)位只有兩位){ TempData[0]=NegTemp;if((TempH%100)/10==0)//消隱 TempData[1]=0; else TempData[1]=DuanMa[(TempH%100)/10];//十位溫度 TempData[2]=DuanMa[(TempH%100)%10]|0x80;//個(gè)位溫度,帶小數(shù)點(diǎn) TempData[3]=DuanMa[TempL]; }elseif(TempH/100==0) //正溫度整數(shù)位只有兩位( { TempData[0]=DuanMa[(TempH%100)/10];//十位溫度 TempData[1]=DuanMa[(TempH%100)%10]|0x80;//個(gè)位溫度,帶小數(shù)點(diǎn) TempData[2]=DuanMa[TempL]; TempData[3]=Tempflag; } else//溫度整數(shù)位為三位 { TempData[0]=DuanMa[TempH/100];//百位溫度TempData[1]=DuanMa[(TempH%100)/10];//十位溫度TempData[2]=DuanMa[(TempH%100)%10]|0x80;//個(gè)位溫度,帶小數(shù)點(diǎn)TempData[3]=DuanMa[TempL]; }/*溫度數(shù)據(jù)顯示*/ for(j=0,j<100,j++) { for(i=0,i<4,i++) { DataPort=0;//清空數(shù)據(jù),防止有交替重影P2=WeiMa[i];//取位碼DataPort=TempData[i];//取顯示數(shù)據(jù),段碼 DelayUs2x(200);//掃描間隙延時(shí),時(shí)間太長(zhǎng)會(huì)閃爍,太短會(huì)造成重影 } } }//按鍵控制#include"key.h"/*鍵盤(pán)溫度上下限調(diào)整程序,含參數(shù)unsignedintTemp,返回值為本參數(shù)調(diào)整后的值長(zhǎng)按按KEY_ADD鍵或KEY_DEC鍵可連續(xù)調(diào)整Temp數(shù)值*/unsignedintLimit_Adjust(unsignedintTemp)//鍵盤(pán)溫度上下限調(diào)整程序{unsignedcharkey_press_num=0;if(!KEY_ADD)//如果檢測(cè)到低電平,說(shuō)明按鍵按下{ DelayMs(10);//延時(shí)去抖,一般10-20msif(!KEY_ADD)//再次確認(rèn)按鍵是否按下,沒(méi)有按下則退出 { while(!KEY_ADD) { key_press_num++;DelayMs(10);//10x200=ms=2s if(key_press_num==200)//大約2s { key_press_num=0;//如果達(dá)到長(zhǎng)按鍵標(biāo)準(zhǔn)//則進(jìn)入長(zhǎng)按鍵動(dòng)作while(!KEY_ADD)//這里用于識(shí)別是否按鍵還在按下 //如果按下執(zhí)行相關(guān)動(dòng)作,否則退出 { if((Temp<99)&&(Temp<=TempMax))//加操作 Temp++; Display(0,Temp,0);DelayMs(50);//用于調(diào)節(jié)長(zhǎng)按循環(huán)操作的速度,能夠自行調(diào)整此值以便達(dá)到最佳效果 } } }key_press_num=0;//防止累加造成錯(cuò)誤識(shí)別 if((Temp<99)&&(Temp<=TempMax))//加操作 Temp++; Display(0,Temp,0); } }if(!KEY_DEC)//如果檢測(cè)到低電平,說(shuō)明按鍵按下{ DelayMs(10);//延時(shí)去抖,一般10-20msif(!KEY_DEC)//再次確認(rèn)按鍵是否按下,沒(méi)有//按下則退出 { while(!KEY_DEC) { key_press_num++;DelayMs(10); if(key_press_num==200)//大約2s { key_press_num=0;while(!KEY_DEC) { if((Temp>0)&&(Temp>=TempMin))//減操作 Temp--; Display(0,Temp,0);DelayMs(50);//用于調(diào)節(jié)長(zhǎng)按循環(huán)操作的速度 } } }key_press_num=0;//防止累加造成錯(cuò)誤識(shí)別 if((Temp>0)&&(Temp>=TempMin))//減操作 Temp--; Display(0,Temp,0); } }returnTemp;}//下位機(jī)/*名稱:DS18b20多級(jí)測(cè)溫下位機(jī)程序內(nèi)容:讀取DS18B20溫度負(fù)溫度轉(zhuǎn)換溫度數(shù)據(jù)發(fā)送至上位機(jī)*/#include<reg52.h>//包含頭文件,一般情況不需要改動(dòng),頭文件包含特殊功能寄存器的定義#include"18b20.h"#include"delay.h"bitReadTempFlag;//定義讀時(shí)間標(biāo)志unsignedcharNegTemp;//負(fù)溫度標(biāo)志unsignedintTempH,TempL,temp;//溫度數(shù)據(jù)unsignedcharSendData[3];//存儲(chǔ)串口數(shù)據(jù)的全局變量voidInit_Timer0(void);//定時(shí)器初始化/*串口通訊初始化voidUART_Init(void){SCON=0x50; //SCON:模式1,8-bitUART,使能接收TMOD|=0x20;//TMOD:timer1,mode2,8-bit重裝TH1=0xFD;//TH1:重裝值9600波特率晶振11.0592MHzTR1=1;//TR1:timer1打開(kāi) EA=1;//打開(kāi)總中斷ES=1;//打開(kāi)串口中斷 TI=1;}*//*串口通訊初始化*///初始化串行口voidcsh() { SCON=0x50; //SCON:模式1,8-bitUART,使能接收 PCON=0; TH1=0xF3; TL1=0XF3; TMOD=0X20; //TMOD:timer1,mode2,8-bit重裝 EA=1; ET1=0; ES=1; TR1=1; }/*主函數(shù)*/voidmain(void){//unsignedinti;Init_Timer0();//定時(shí)器初始化//UART_Init();//串口通訊初始化csh();//串口通訊初始化while(1)//主循環(huán){/*溫度數(shù)據(jù)處理*/ if(ReadTempFlag==1) { ReadTempFlag=0; temp=ReadTemperature(); if(temp&0x8000) { NegTemp=0x40;//負(fù)號(hào)標(biāo)志 temp=~temp;//取反加1 temp+=1; } else NegTemp=0; TempH=temp>>4; TempL=temp&0x0F; TempL=TempL*6/10;//小數(shù)近似處理 }SendData[0]=NegTemp;SendData[1]=TempH;SendData[2]=TempL; }}voidintrr()interrupt4 { charp; p=SBUF; RI=0; p++; if(p>3) p=0; ES=0; TI=0; SBUF=SendData[p]; while(!TI); TI=0; ES=1; }/*定時(shí)器初始化子程序*/voidInit_Timer0(void){TMOD|=0x01; //使用模式1,16位定時(shí)器,使用"|"符號(hào)能夠在使用多個(gè)定時(shí)器時(shí)不受影響 //TH0=0x00; //給定初值//TL0=0x00;EA=1;

溫馨提示

  • 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)論