基于單片機(jī)的波形發(fā)生器的課程設(shè)計(jì)報(bào)告(完整資料)_第1頁(yè)
基于單片機(jī)的波形發(fā)生器的課程設(shè)計(jì)報(bào)告(完整資料)_第2頁(yè)
基于單片機(jī)的波形發(fā)生器的課程設(shè)計(jì)報(bào)告(完整資料)_第3頁(yè)
基于單片機(jī)的波形發(fā)生器的課程設(shè)計(jì)報(bào)告(完整資料)_第4頁(yè)
基于單片機(jī)的波形發(fā)生器的課程設(shè)計(jì)報(bào)告(完整資料)_第5頁(yè)
已閱讀5頁(yè),還剩98頁(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)介

基于單片機(jī)的波形發(fā)生器的課程設(shè)計(jì)報(bào)告(完整資料)(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)

重慶科技學(xué)院基于單片機(jī)的波形發(fā)生器的課程設(shè)計(jì)報(bào)告(完整資料)(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)學(xué)生實(shí)習(xí)(實(shí)訓(xùn))總結(jié)報(bào)告學(xué)院:電氣與信息工程學(xué)院專業(yè)班級(jí):測(cè)控學(xué)生姓名:學(xué)號(hào):設(shè)計(jì)地點(diǎn)(單位)I506設(shè)計(jì)題目:基于單片機(jī)的波形發(fā)生器的設(shè)計(jì)完成日期:2014年03月17日指導(dǎo)教師評(píng)語(yǔ):___(dá)__(dá)___(dá)_____(dá)______(dá)__(dá)_________(dá)___(dá)___(dá)____(dá)__________(dá)_______(dá)__________(dá)____(dá)___________(dá)_____(dá)__(dá)__(dá)_____(dá)____(dá)____(dá)________(dá)_____________(dá)___(dá)__(dá)____(dá)_____(dá)_____(dá)___(dá)____(dá)______(dá)__(dá)_____(dá)____(dá)__(dá)_____(dá)_________(dá)___________________(dá)_____(dá)_____(dá)______(dá)__(dá)________(dá)___(dá)____(dá)__(dá)__成績(jī)(五級(jí)記分制):_____(dá)___(dá)_______(dá)_______(dá)___(dá)__指導(dǎo)教師(簽字):_______(dá)__________(dá)______(dá)___(dá)__(dá)目錄TOC\o"1—3"\h\z\uHYPERLINK\l_Toc29821一、實(shí)習(xí)的任務(wù)要求與意義PAGEREF_Toc298211HYPERLINK\l_Toc16271。1設(shè)計(jì)要求PAGEREF_Toc16271HYPERLINK\l_Toc236471。2設(shè)計(jì)任務(wù)PAGEREF_Toc236471HYPERLINK\l_Toc128411.3基本功能與性能指標(biāo)PAGEREF_Toc128411HYPERLINK\l_Toc310401.4實(shí)習(xí)的意義PAGEREF_Toc310401HYPERLINK\l_Toc6854二、設(shè)計(jì)方案PAGEREF_Toc68542HYPERLINK\l_Toc85092.1硬件選擇PAGEREF_Toc85092HYPERLINK\l_Toc77912.2系統(tǒng)總體設(shè)計(jì)PAGEREF_Toc77913HYPERLINK\l_Toc16392三、系統(tǒng)硬件設(shè)計(jì)PAGEREF_Toc1639243.1單片機(jī)的最小系統(tǒng)PAGEREF_Toc2838543.2按鍵電路設(shè)計(jì)PAGEREF_Toc1890153.3LCD顯示的設(shè)計(jì)PAGEREF_Toc233445HYPERLINK\l_Toc30320四、系統(tǒng)軟件設(shè)計(jì)PAGEREF_Toc303207HYPERLINK\l_Toc217384。1主程序設(shè)計(jì)PAGEREF_Toc217387HYPERLINK\l_Toc36444。2LCD顯示子程序設(shè)計(jì)PAGEREF_Toc364484.3D/A轉(zhuǎn)換子程序設(shè)計(jì)PAGEREF_Toc296218HYPERLINK\l_Toc8172五、調(diào)試及性能分析PAGEREF_Toc81729HYPERLINK\l_Toc47545.1調(diào)試步驟PAGEREF_Toc475410HYPERLINK\l_Toc279515.2性能分析PAGEREF_Toc2795112HYPERLINK\l_Toc15454參考文獻(xiàn)PAGEREF_Toc1545413HYPERLINK\l_Toc3503附錄1系統(tǒng)硬件電路圖PAGEREF_Toc350314附錄2程序代碼PAGEREF_Toc238715一、實(shí)習(xí)的任務(wù)要求與意義1。1設(shè)計(jì)要求1.掌握電子系統(tǒng)的一般設(shè)計(jì)方法2。掌握仿真軟件的應(yīng)用3。培養(yǎng)綜合應(yīng)用所學(xué)知識(shí)來(lái)指導(dǎo)實(shí)踐的能力4.根據(jù)技術(shù)指標(biāo)要求及實(shí)驗(yàn)室條件自選方案設(shè)計(jì)出原理電路圖,分析工作原理并計(jì)算元件參數(shù)。1。2設(shè)計(jì)任務(wù)按要求設(shè)計(jì)波形發(fā)生器并完成相關(guān)功能:(1)運(yùn)用單片機(jī)控制產(chǎn)生多種波形,這些波形包括三角波、方波、鋸齒波等。(2)信號(hào)的發(fā)生器所產(chǎn)生波形的頻率、幅值均為連續(xù)可調(diào)。擴(kuò)展功能在上位機(jī)將波形實(shí)時(shí)顯示出來(lái),用紅外線遙控器實(shí)現(xiàn)上述功能,其它功能。1.3基本功能與性能指標(biāo)基本功能:(1)可以產(chǎn)生正弦波、方波、三角波,頻率和幅值可調(diào).(2)按KEY1鍵選擇輸出波形。(3)按KEY2,KEY5鍵調(diào)節(jié)輸出信號(hào)頻率和電壓幅值的增進(jìn)和減少。(4)按KEY6鍵是轉(zhuǎn)換調(diào)節(jié)頻率或電壓幅值。性能指標(biāo):(1)幅值0~5V可調(diào)(2)頻率0~100Hz可調(diào)1.4實(shí)習(xí)的意義本次實(shí)訓(xùn)的目的是讓我們更加熟練的掌握單片機(jī)的原理與應(yīng)用,通過(guò)學(xué)習(xí)的單片機(jī)基礎(chǔ)知識(shí)來(lái)更加熟悉的操作將軟件和硬件相結(jié)合,通過(guò)控制單片機(jī)控制的程序代碼與能實(shí)現(xiàn)系統(tǒng)控制功能的電子元件來(lái)實(shí)現(xiàn)所需要的數(shù)據(jù)。通過(guò)對(duì)軟件和硬件的了解與應(yīng)用再結(jié)合基礎(chǔ)知識(shí)對(duì)單片機(jī)更深層次的了解,達(dá)到以后能更加熟練的通過(guò)單片機(jī)去完成更復(fù)雜的任務(wù).二、設(shè)計(jì)方案采用AT89C51單片機(jī)和數(shù)模轉(zhuǎn)換器PCF8591實(shí)現(xiàn)波形的產(chǎn)生。波形的產(chǎn)生方法是用AT89C51單片機(jī)執(zhí)行波形程序,向PCF8591轉(zhuǎn)換器的輸入端輸入相應(yīng)的數(shù)據(jù),從而在DA轉(zhuǎn)換電路輸出端再通過(guò)運(yùn)放電路轉(zhuǎn)換得到相應(yīng)的電壓波形.在AT89C51的P1口接按鍵控制波形的各類和波形的頻率,每種波形對(duì)應(yīng)一種按鍵方式。此方案原理簡(jiǎn)單,同時(shí)適合操作,實(shí)現(xiàn)起來(lái)也相對(duì)較容易.產(chǎn)生的三種波形的頻率可由按鍵控制,并通過(guò)按鍵改變來(lái)轉(zhuǎn)換不同的波形,也能夠在示波器上顯示出所要求的波形。波形的頻率步進(jìn)也可以實(shí)現(xiàn)調(diào)節(jié),具有線路簡(jiǎn)單、可行性高、符合設(shè)計(jì)要求等優(yōu)點(diǎn)。加上LCD數(shù)碼顯示管,從而能夠在LCD上顯示出頻率值、幅度值信息。輸出的波形也較穩(wěn)定,精度較高,通過(guò)濾波電路使得系統(tǒng)的抗干擾性增強(qiáng),電路簡(jiǎn)單,性價(jià)比高。圖2.1系統(tǒng)組成結(jié)構(gòu)框圖2。1硬件選擇(1)單片機(jī):STC89C52是高速/低功耗/超強(qiáng)抗干擾的新一代8051單片機(jī),指令代碼完全兼容傳統(tǒng)8051,但速度快8—12倍.內(nèi)部集成MAX810專用復(fù)位電路,2路PWM,8路高速10位A/D轉(zhuǎn)換(250K/S),針對(duì)電機(jī)控制,強(qiáng)干擾場(chǎng)合。(2)PCF8591:PCF8591是一個(gè)單片集成、單獨(dú)供電、低功耗、8-bitCMOS數(shù)據(jù)獲取器件。PCF8591具有4個(gè)模擬輸入、1個(gè)模擬輸出和1個(gè)串行I2C總線接口。PCF8591的3個(gè)地址引腳A0,A1和A2可用于硬件地址編程,允許在同個(gè)I2C總線上接入8個(gè)PCF8591器件,而無(wú)需額外的硬件.在PCF8591器件上輸入輸出的地址、控制和數(shù)據(jù)信號(hào)都是通過(guò)雙線雙向I2C總線以串行的方式進(jìn)行傳輸。2.2系統(tǒng)總體設(shè)計(jì)本系統(tǒng)是用單片機(jī)來(lái)控制波形的轉(zhuǎn)換以及幅值和頻率的改變的,所以該系統(tǒng)可以分為4個(gè)電路模塊,下面是總體設(shè)計(jì)框圖。STC89C52PCF8591STC89C52PCF8591按鍵控制示波器顯示LCD圖2.2系統(tǒng)總體設(shè)計(jì)框圖三、系統(tǒng)硬件設(shè)計(jì)3。1單片機(jī)的最小系統(tǒng)由于單片機(jī)最小系統(tǒng)只需要外圍有時(shí)鐘電路和復(fù)位電路即可,則單片機(jī)最小系統(tǒng)有著兩個(gè)外圍電路即可正常工作,下面是單片機(jī)的最小系統(tǒng)原理圖。圖3.1STC89C52單片機(jī)最小系統(tǒng)3。2按鍵電路設(shè)計(jì)本實(shí)現(xiàn)采用4個(gè)按鍵來(lái)進(jìn)行波形的轉(zhuǎn)換、幅值和頻率的改變、幅值和頻率的選擇,P32鍵用來(lái)改變波P33、P16用來(lái)改變幅值或頻率的大小,P17用來(lái)選擇頻率和幅值,下面是按鍵電路圖。圖3。2按鍵電路圖3.3LCD顯示的設(shè)計(jì)本硬件采用的是12864的液晶顯示屏,顯示屏將波形的轉(zhuǎn)化顯示在顯示屏上,下面是液晶顯示的電路。圖3.312864液晶顯示電路四、系統(tǒng)軟件設(shè)計(jì)4。1主程序設(shè)計(jì)主程序內(nèi)進(jìn)行的是波形的切換及幅值、頻率的改變,用示波器和LCD顯示,將主要的寫進(jìn)即可,其他的就寫在外面,下面是主程序流程圖。開(kāi)始DA轉(zhuǎn)換器DA轉(zhuǎn)換器初始化LCD初始化LCD初始化CChang++Chang=1輸出方波Chang=2輸出三角波Chang=0輸出正弦波Chang=1輸出方波Chang=2輸出三角波Chang=0輸出正弦波圖4.1主程序流程圖LCD顯示子程序設(shè)計(jì)液晶顯示的程序在本程序中比較的簡(jiǎn)單,就是為了實(shí)時(shí)的顯示出當(dāng)前的波形是什么,用按鍵切換之后液晶顯示也跟著變。液晶顯示程序需首先初始化,再進(jìn)行數(shù)據(jù)的傳輸,并進(jìn)行字符的顯示,所以寫出相應(yīng)的幾個(gè)程序即可進(jìn)行LCD的顯示。開(kāi)始開(kāi)始初始化12864LCD寫控制指令寫顯示數(shù)據(jù)串行傳輸數(shù)據(jù)寫漢字到LCD屏指定位置結(jié)束圖4.2LCD顯示流程圖D/A轉(zhuǎn)換子程序設(shè)計(jì)本程序采用PCD8592來(lái)作D/A轉(zhuǎn)換器,需要將A1、A1、A2接地,單片機(jī)上的P37和P36接PCF8591上的SCL和SDA端口,AOUT接示波器,供顯示D/A轉(zhuǎn)換要滿足I2C協(xié)議才能進(jìn)行數(shù)據(jù)的傳輸。voidwrite_add(uchardate){start();write_byte(0x90);respons();write_byte(0x40);respons();write_byte(date);respons();stop();}圖4.3PCF8591電路圖五、調(diào)試及性能分析5.1調(diào)試步驟硬件調(diào)試:檢查線路連接有無(wú)錯(cuò)誤,SDA和SCL接單片機(jī)的P36和P37口,VCC接電源,CND接地,AOUT接示波器,在下載數(shù)據(jù)到單片機(jī)之后數(shù)據(jù)在傳輸?shù)臅r(shí)候PCF8591上的一個(gè)藍(lán)色的燈會(huì)不停的閃,說(shuō)明有數(shù)據(jù)在傳輸,否則無(wú)數(shù)據(jù)傳輸。軟件調(diào)試:首先看I2C協(xié)議是否正確,否則不能傳輸數(shù)據(jù),再看按鍵的邏輯關(guān)系是否正確,還有就是LCD的顯示是否正確。調(diào)節(jié)電源,使其輸出5V電壓,調(diào)整好示波器。給電路供電,觀察示波器,記錄各頻段對(duì)應(yīng)波形的情況,峰峰值。調(diào)試結(jié)果表明,該電路在要求頻率范圍內(nèi)的大部分頻率范圍基本上不失真,除了在最高頻率的最低頻率有少許失真,其中,當(dāng)頻率接近10KHz時(shí),方波高低電壓躍變時(shí)出現(xiàn)毛刺,審過(guò)零比較器的頻率特性所致,另外,在最高頻和最低頻段,三角波出現(xiàn)少許彎斜,可選用頻率特性更為寬的電容進(jìn)行校正。示波器顯示之后的幅值頻率的調(diào)試結(jié)果如下圖所示:調(diào)試之后的正弦波調(diào)試之后的方波調(diào)試之后的三角波5.2性能分析經(jīng)過(guò)一段時(shí)間運(yùn)行后,可以對(duì)系統(tǒng)的性能進(jìn)行測(cè)試.對(duì)于本波形發(fā)生器來(lái)說(shuō),用示波器可以測(cè)試其性能指標(biāo),按前面所述設(shè)計(jì)的波形發(fā)生器,能產(chǎn)生正弦波、三角波及方波信號(hào),其幅值可以0—5V內(nèi)變化,頻率也可以調(diào)整。六、心得體會(huì)經(jīng)過(guò)兩周的實(shí)訓(xùn),很快就結(jié)束了。雖然時(shí)間短暫,但是其中我們?cè)谕瓿扇蝿?wù)的時(shí)候還是面臨了很多的問(wèn)題,正是因?yàn)橛龅搅穗y題,我們小組在一起探討,經(jīng)過(guò)多次改正最后還是圓滿的完成了任務(wù).雖然平時(shí)上課我們做過(guò)實(shí)驗(yàn),但是現(xiàn)在給我們一個(gè)任務(wù)讓我們?nèi)ネ瓿傻臅r(shí)候才發(fā)現(xiàn)并不是那么容易就能做出來(lái)的,不僅需要扎實(shí)的基礎(chǔ)知識(shí)還要去查詢相關(guān)的書籍了解一些我們不懂的。經(jīng)過(guò)本次實(shí)訓(xùn),我們不僅增強(qiáng)了知識(shí),也學(xué)到了很多技巧,對(duì)單片機(jī)的理解與運(yùn)用更加熟練了。此次單片機(jī)的設(shè)計(jì)硬件電路較為簡(jiǎn)單,而程序的設(shè)計(jì)在當(dāng)中占據(jù)很重要的部分.這次課程設(shè)計(jì)是用STC12C5AI6S2單片機(jī)與PCF8592D/A轉(zhuǎn)換器來(lái)實(shí)現(xiàn)的波形產(chǎn)生與顯示,所以要對(duì)這兩個(gè)模塊非常的熟悉.對(duì)于PCF8591需要深入的認(rèn)識(shí)I2C協(xié)議的內(nèi)容才能正確的傳輸數(shù)據(jù)。而對(duì)于單片機(jī)而需要對(duì)各個(gè)接口非常熟悉,才能保證數(shù)據(jù)的正常傳輸。此外還要熟練的使用示波器,對(duì)產(chǎn)生的波形進(jìn)行調(diào)整,來(lái)得到更好的效果。它考驗(yàn)我們靈活的運(yùn)用所學(xué)知識(shí),培養(yǎng)了我們?cè)谟龅絾?wèn)題善于觸屏的良好學(xué)習(xí)態(tài)度.以書本知識(shí)為基礎(chǔ)靈活的擴(kuò)展,學(xué)習(xí)前人的驗(yàn),向高層次邁進(jìn).當(dāng)然還是存在不足的地方,例如當(dāng)頻率過(guò)小的時(shí)候矩形波會(huì)有些失真,轉(zhuǎn)換器轉(zhuǎn)換可以加一個(gè)鎖存器,放大電路設(shè)計(jì)上還有待進(jìn)一步改進(jìn),使其具有更強(qiáng)的輸出能力等。參考文獻(xiàn)胡文金.單片機(jī)系統(tǒng)實(shí)訓(xùn)教程.重慶:重慶大學(xué)出版社,2005梁森.自動(dòng)檢測(cè)技術(shù)及應(yīng)用.北京:機(jī)械工業(yè)出版社,2012程德福。智能儀器.機(jī)械工業(yè)出版社。2009。9朱定華,戴汝平等。單片危機(jī)原理與應(yīng)用。清華大學(xué)出版社。彭楚武。微機(jī)原理與接口技術(shù).湖南大圩出版社.李朝清.單片機(jī)原理與接口技術(shù).北京航空航天大學(xué)出版社.張李勇,陳郎,張飛舟.基于8051的雙通道波形發(fā)生器的設(shè)計(jì)與現(xiàn)實(shí).計(jì)算機(jī)工程與應(yīng)用許慶山等編.電路、信號(hào)與系統(tǒng)。北京:航空工業(yè)出版社.附錄1系統(tǒng)硬件電路圖附錄2程序代碼#include<reg52。h〉#include<intrins。h>#include<math.h〉#defineucharunsignedchar#defineuintunsignedintsbitSDA=P3^6;sbitSCL=P3^7;unsignedinta=0;unsignedintb=0;unsignedintc=0;unsignedintbx_chang=0;unsignedintn=40;unsignedcharTH;unsignedcharTL;unsignedintmode=0;unsignedintfd=6;unsignedintx;unsignedintu;//*************sbitRS=P2^4;sbitRW=P2^5;sbitE=P2^6;sbitPSB=P1^4;//*************sbitp20=P3^2;sbitp21=P3^3;sbitp22=P1^6;sbitp32=P1^7;//sin波形數(shù)組ucharcodetosin[256]={0x80,0x83,0x86,0x89,0x8D,0x90,0x93,0x96,0x99,0x9C,0x9F,0xA2,0xA5,0xA8,0xAB,0xAE,0xB1,0xB4,0xB7,0xBA,0xB(niǎo)C,0xBF,0xC2,0xC5,0xC7,0xCA,0xCC,0xCF,0xD1,0xD4,0xD6,0xD8,0xDA,0xDD,0xDF,0xE1,0xE3,0xE5,0xE7,0xE9,0xEA,0xEC,0xEE,0xEF,0xF1,0xF2,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFD,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFD,0xFD,0xFC,0xFB,0xFA,0xF9,0xF8,0xF7,0xF6,0xF5,0xF4,0xF2,0xF1,0xEF,0xEE,0xEC,0xEA,0xE9,0xE7,0xE5,0xE3,0xE1,0xDF,0xDD,0xDA,0xD8,0xD6,0xD4,0xD1,0xCF,0xCC,0xCA,0xC7,0xC5,0xC2,0xBF,0xBC,0xBA,0xB7,0xB4,0xB1,0xAE,0xAB,0xA8,0xA5,0xA2,0x9F,0x9C,0x99,0x96,0x93,0x90,0x8D,0x89,0x86,0x83,0x80,0x80,0x7C,0x79,0x76,0x72,0x6F,0x6C,0x69,0x66,0x63,0x60,0x5D,0x5A,0x57,0x55,0x51,0x4E,0x4C,0x48,0x45,0x43,0x40,0x3D,0x3A,0x38,0x35,0x33,0x30,0x2E,0x2B,0x29,0x27,0x25,0x22,0x20,0x1E,0x1C,0x1A,0x18,0x16,0x15,0x13,0x11,0x10,0x0E,0x0D,0x0B,0x0A,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0D,0x0E,0x10,0x11,0x13,0x15,0x16,0x18,0x1A,0x1C,0x1E,0x20,0x22,0x25,0x27,0x29,0x2B,0x2E,0x30,0x33,0x35,0x38,0x3A,0x3D,0x40,0x43,0x45,0x48,0x4C,0x4E,0x51,0x55,0x57,0x5A(chǔ),0x5D,0x60,0x63,0x66,0x69,0x6C,0x6F,0x72,0x76,0x79,0x7C,0x80};//***********************************************voiddelay(unsignedintz){unsignedintx,y;for(x=z;x〉0;x--)for(y=125;y>0;y--);}//***************************************************voidSendByte(unsignedcharDbyte){unsignedchari;RS=1;for(i=0;i<8;i++){E=0;if((Dbyte〈<i)&0x80)RW=1;elseRW=0;E=1;E=0;}RS=0;}voidLcd_WriteCmd(unsignedcharCbyte){delay(10);SendByte(0xf8);SendByte(0xf0&Cbyte);SendByte(0xf0&(Cbyte〈<4));}voidLcd_WriteData(unsignedcharDbyte){delay(10);SendByte(0xfa);SendByte(0xf0&Dbyte);SendByte(0xf0&(Dbyte<〈4));}voidInitLCD(){Lcd_WriteCmd(0x30);Lcd_WriteCmd(0x06);Lcd_WriteCmd(0x0c);Lcd_WriteCmd(0x04);Lcd_WriteCmd(0x01);Lcd_WriteCmd(0x02);Lcd_WriteCmd(0x80);}voidxianshi(unsignedcharx,unsignedchary,unsignedchar*stri)//LCD數(shù)據(jù)傳送地址{if(x==1)Lcd_WriteCmd(0x80+y-1);elseif(x==2)Lcd_WriteCmd(0x90+y-1);elseif(x==3)Lcd_WriteCmd(0x88+y-1);elseif(x==4)Lcd_WriteCmd(0x98+y-1);while(*stri>0){Lcd_WriteData(*stri);stri++;}}//****************************************************voiddelayp()//延遲函數(shù){;;}voiddelay_1ms(uintz){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y—-);}//*****************************************I2C協(xié)議voidstart(){SDA=1;delayp();SCL=1;delayp();SDA=0;delayp();}voidstop(){SDA=0;delayp();SCL=1;delayp();SDA=1;delayp();}voidrespons(){uchari;SCL=1;delayp();while((SDA==1)&&(i<250))i++;SCL=0;delayp();}voidinit(){SDA=1;delayp();SCL=1;delayp();}voidwrite_byte(uchardate){uchari,temp;temp=dat(yī)e;for(i=0;i<8;i++){temp=temp〈〈1;SCL=0;delayp();SDA=CY;delayp();SCL=1;delayp();}SCL=0;delayp();SDA=1;delayp();}voidwrite_add(uchardate){start();write_byte(0x90);respons();write_byte(0x40);respons();write_byte(date);respons();stop();}//****************************************************intmain()//************************************************主函數(shù){TMOD=0x01;TH0=(65536—99000/n)/256;TL0=(65536-99000/n)%256;TH1=(65536-5000)/256;TL1=(65536-5000)%256;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;init();while(1){PSB=0;InitLCD();//*******************************************顯示模塊for(u=0;u<9;u++){xianshi(1,1,”信號(hào)發(fā)生器”);xianshi(2,1,”波形:");if(bx_chang==0)xianshi(2,4,"sin");if(bx_chang==1)xianshi(2,4,"Square");if(bx_chang==2)xianshi(2,4,”Triangle");xianshi(3,1,”幅度:");Lcd_WriteDat(yī)a(0x30+(fd*5/10));xianshi(3,5,"?!?;Lcd_WriteData(0x30+(fd*5%10));xianshi(3,6,”V”);xianshi(4,1,”頻率:");Lcd_WriteData(0x30+(n/2/100));Lcd_WriteData(0x30+(n/2/10));Lcd_WriteData(0x30+(n/2%10));xianshi(4,6,"Hz");}}}//**************************************************************8voidrefresh_f(void)interrupt1//定時(shí)器中斷{if(n>=0&&n〈40){x=14;TH0=(65536-92900/n)/256;TL0=(65536-92900/n)%256;}elseif(n>=40&&n<80){x=15;TH0=(65536-97920/n)/256;TL0=(65536-97920/n)%256;}//*************************************正弦波形a=a+x;if(a<256&&bx_chang==0){write_add(tosin[a]*0.1*fd);}if(a〉=256){a=0;}//************************************方波波形b=b+x;if(b〈128&&bx_chang==1){write_add(0x00*0。1*fd);}if(b>=128&&b〈256&&bx_chang==1)write_add(0xff*0.1*fd);if(b>=256){b=0;}//*************************************三角波波形c=c+x;if(c<128&&bx_chang==2){write_add(c*0.2*fd);}if(c>=128&&c〈256&&bx_chang==2)write_add((-c+256)*0。2*fd);if(c>=256){c=0;}}//********************************************定時(shí)器中斷按鍵中斷voidrefresh_zd(void)interrupt3{TH1=(65536—5000)/256;TL1=(65536—5000)%256;//*******************************************8if(p32==0){delay_1ms(100);if(p32==0)mode=mode+1;if(mode〉=2)mode=0;while(?。?2);}if(p20==0){delay_1ms(100);bx_chang=bx_chang+1;if(bx_chang>=3)bx_chang=0;while(!p20);}//*******************************************頻率調(diào)節(jié)if(p21==0&&mode==1){delay_1ms(100);n=n+2;if(n〉=100)n=1;while(!p21);}if(p22==0&&mode==1){delay_1ms(100);n=n—2;if(n〈=0)n=100;while(!p22);}//*******************************************幅度調(diào)節(jié)if(p21==0&&mode==0){delay_1ms(100);fd=fd+1;if(fd>=10)fd=1;while(!p21);}if(p22==0&&mode==0){delay_1ms(100);fd=fd-1;if(fd<=1)fd=10;while(!p22);}}單片機(jī)課程設(shè)計(jì)單片機(jī)課程設(shè)計(jì)課題:基于51單片機(jī)的交通燈設(shè)計(jì)專業(yè):?機(jī)械設(shè)計(jì)制造及其自動(dòng)化學(xué)號(hào):?指導(dǎo)教師:??邵添設(shè)計(jì)日期: ? 2017/12/18成績(jī):重慶大學(xué)城市科技學(xué)院電氣學(xué)院基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)報(bào)告一、設(shè)計(jì)目的作用本設(shè)計(jì)是一款簡(jiǎn)單實(shí)用的小型數(shù)字溫度計(jì),所采用的主要元件有傳感器DS18B20,單片機(jī)AT89C52,,四位共陰極數(shù)碼管一個(gè),電容電阻若干。DS18B20支持“一線總線”接口,測(cè)量溫度范圍—55°C~+125°C。在—10~+85°C范圍內(nèi),精度為±0。5°C。18B20的精度較差,為±本次數(shù)字溫度計(jì)的設(shè)計(jì)共分為五部分,主控制器,LED顯示部分,傳感器部分,復(fù)位部分,按鍵設(shè)置部分,時(shí)鐘電路.主控制器即單片機(jī)部分,用于存儲(chǔ)程序和控制電路;LED顯示部分是指四位共陰極數(shù)碼管,用來(lái)顯示溫度;傳感器部分,即溫度傳感器,用來(lái)采集溫度,進(jìn)行溫度轉(zhuǎn)換;復(fù)位部分,即復(fù)位電路,按鍵部分用來(lái)設(shè)置上下限報(bào)警溫度。測(cè)量的總過(guò)程是,傳感器采集到外部環(huán)境的溫度,并進(jìn)行轉(zhuǎn)換后傳到單片機(jī),經(jīng)過(guò)單片機(jī)處理判斷后將溫度傳遞到數(shù)碼管顯示。二、設(shè)計(jì)要求(1).利用DS18B20傳感器實(shí)時(shí)檢測(cè)溫度并顯示。(2).利用數(shù)碼管實(shí)時(shí)顯示溫度.(3)。當(dāng)溫度超過(guò)或者低于設(shè)定值時(shí)蜂鳴器報(bào)警,LED閃爍指示。(4).能夠手動(dòng)設(shè)置上限和下限報(bào)警溫度。三、設(shè)計(jì)的具體實(shí)現(xiàn)1、系統(tǒng)概述方案一:由于本設(shè)計(jì)是測(cè)溫電路,可以使用熱敏電阻之類的器件利用其感溫效應(yīng),在將隨被測(cè)溫度變化的電壓或電流采集過(guò)來(lái),進(jìn)行A/D轉(zhuǎn)換后,就可以用單片機(jī)進(jìn)行數(shù)據(jù)的處理,在顯示電路上,就可以將被測(cè)溫度顯示出來(lái),這種設(shè)計(jì)需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。方案設(shè)計(jì)框圖如下:數(shù)碼管顯示電路熱敏電阻組成的感溫電路數(shù)碼管顯示電路熱敏電阻組成的感溫電路AD轉(zhuǎn)換方案二:考慮到用溫度傳感器,在單片機(jī)電路設(shè)計(jì)中,大多都是使用傳感器,所以這是非常容易想到的,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測(cè)溫度值,進(jìn)行轉(zhuǎn)換,就可以滿足設(shè)計(jì)要求。從以上兩種方案,很容易看出,采用方案二,電路比較簡(jiǎn)單,軟件設(shè)計(jì)也比較簡(jiǎn)單,故采用了方案二。2、

單元電路設(shè)計(jì)與分析1、硬件設(shè)計(jì)按照系統(tǒng)設(shè)計(jì)功能的要求,確定系統(tǒng)由3個(gè)模塊組成:主控制器、測(cè)溫電路和顯示電路。數(shù)字溫度計(jì)總體電路結(jié)構(gòu)框圖所示:蜂鳴器報(bào)警模塊AT89C51單片機(jī)DB18B20溫度傳感器按鍵設(shè)置模塊電源數(shù)碼管顯示LED閃爍報(bào)警模塊蜂鳴器報(bào)警模塊AT89C51單片機(jī)DB18B20溫度傳感器按鍵設(shè)置模塊電源數(shù)碼管顯示LED閃爍報(bào)警模塊單片機(jī)的選擇單片機(jī)AT89S52具有低電壓供電和體積小等特點(diǎn),四個(gè)端口只需要兩個(gè)口就能滿足電路系統(tǒng)的設(shè)計(jì)需要,很適合便攜手持式產(chǎn)品的設(shè)計(jì)使用系統(tǒng)可用二節(jié)電池供電。由于器件問(wèn)題,我們使用了通用的手機(jī)5V充電器接口。復(fù)位電路模塊單片機(jī)系統(tǒng)的復(fù)位電路在這里使用的是上電+按鈕的復(fù)位電路模式,其中電阻R采用的是10KΩ的阻值,電容采用電容值為10uF的電解電容,電路圖如下:溫度顯示模塊四位共陰極數(shù)碼管,能夠顯示小數(shù)。列掃描用P2.4~P2。7口來(lái)實(shí)現(xiàn),列驅(qū)動(dòng)直接51接單片機(jī)驅(qū)動(dòng).電路圖如下: ??? ? ?? ? ??? 溫度傳感器模塊DS18B20溫度傳感器是美國(guó)DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測(cè)溫元件相比,它能直接讀出被測(cè)溫度,并且可根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)9~12位的數(shù)字值讀數(shù)方式。電路圖如下:? ?? ? ? ?? ??? ? ?按鍵模塊按鍵是用來(lái)設(shè)置報(bào)警的上下限溫.K1是用來(lái)進(jìn)入上下限調(diào)節(jié)模式的,當(dāng)按一下K1進(jìn)入上限調(diào)節(jié)模式,再按一下進(jìn)入下限調(diào)節(jié)模式。在正常模式下,按一下K2進(jìn)入查看上限溫度模式,顯示1s左右自動(dòng)退出;按一下K3進(jìn)入查看下限溫度模式,顯示1s左右自動(dòng)退出;按一下K4消除按鍵音,再按一下啟動(dòng)按鍵音.在調(diào)節(jié)上下限溫度模式下,K2是實(shí)現(xiàn)加1功能,K1是實(shí)現(xiàn)減1功能,K3是用來(lái)設(shè)定上下限溫度正負(fù)的。? 2、軟件設(shè)計(jì)主要包括主程序、讀出溫度子程序、溫度轉(zhuǎn)換命令子程序、計(jì)算溫度子程序和現(xiàn)實(shí)數(shù)據(jù)刷新子程序等。主程序主程序的主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示、讀出并處理DS18B20的測(cè)量溫度值。溫度測(cè)量每1S進(jìn)行一次.主流程圖如下:讀出溫度子程序讀出溫度子程序的主要功能是讀出RAM中的9字節(jié)。在讀出時(shí)須進(jìn)行CRC校驗(yàn),校驗(yàn)有錯(cuò)時(shí)不進(jìn)行溫度數(shù)據(jù)的改寫。流程圖如下:溫度轉(zhuǎn)換命令子程序溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開(kāi)始命令.當(dāng)采用12位分辨率時(shí),轉(zhuǎn)換時(shí)間約為750ms.在本程序設(shè)計(jì)中,采用1s顯示程序延時(shí)法等待轉(zhuǎn)換的完成。流程圖如下:顯示數(shù)據(jù)刷新子程序顯示數(shù)據(jù)刷新子程序主要是對(duì)顯示緩沖器中的顯示數(shù)據(jù)進(jìn)行刷新操作,當(dāng)最高數(shù)據(jù)顯示位為0時(shí),將符號(hào)顯示位移入下一位.系統(tǒng)的調(diào)試及性能分析:硬件調(diào)試,首先檢查電感的焊接是否正確,然后可用萬(wàn)用表測(cè)試或通電檢測(cè)。軟件調(diào)試可以先編寫顯示程序并進(jìn)行硬件的正確性檢驗(yàn),然后分別進(jìn)行主程序、讀出溫度子程序、溫度轉(zhuǎn)換命令子程序、計(jì)算溫度子程序和現(xiàn)實(shí)數(shù)據(jù)刷新子程序等的編程及調(diào)試由于DS18B20與單片機(jī)采用串行數(shù)據(jù)傳送,因此,對(duì)DS18B20進(jìn)行讀/寫編程時(shí)必須嚴(yán)格地保證讀/寫時(shí)序;否則將無(wú)法讀取測(cè)量結(jié)果。本程序采用單片機(jī)匯編或C語(yǔ)言編寫用KeilC51編譯器編程調(diào)試。軟件調(diào)試到能顯示溫度值,并且在有溫度變化時(shí)顯示溫度能改變,就基本完成.性能測(cè)試可用制作的溫度計(jì)和已有的成品溫度計(jì)同時(shí)進(jìn)行測(cè)量比較。由于DS18B20的精度很高,所以誤差指標(biāo)可以限制在0.5℃以內(nèi)。另外,—55~+125 ? ? ?? ??? 四、總結(jié)本次的課程設(shè)計(jì)使我們進(jìn)一步鞏固了書本上的知識(shí),做到了學(xué)以致用.這是我們第二次自己動(dòng)手設(shè)計(jì)的電路,通過(guò)系統(tǒng)仿真軟件Proteus和編譯軟件Keil,使我們進(jìn)一步了解了單片機(jī)的設(shè)計(jì)制作過(guò)程,其中最為困難的是軟件部分,即編程部分,我們上網(wǎng)找了好多資料,雖然經(jīng)過(guò)自己的修改,但還是有很多功能不能實(shí)現(xiàn),如溫度上下限設(shè)置。由于Proteus并不是很熟練,在使用的過(guò)程中有很多原件的名稱不知道,從而花費(fèi)了大量的時(shí)間在網(wǎng)上查找,今后應(yīng)該在這方面多多努力。最后一步的焊接硬件也遇到了不少麻煩??偨Y(jié)經(jīng)驗(yàn)的時(shí)候我們得出這樣的結(jié)論,學(xué)習(xí)應(yīng)該學(xué)以致用,有目的的去學(xué)習(xí),如果學(xué)了不用等于沒(méi)學(xué)。其次,要學(xué)以致用,理論聯(lián)系實(shí)際,這樣才會(huì)取得事半功倍的效果.五、附錄附錄一:元件清單元件名稱數(shù)量AT89C51單片機(jī)112MHZ晶振133pF電容222uF電解電容1按鍵開(kāi)關(guān)5IC插座40Pin1DS18B20溫度傳感器1蜂鳴器1LED?5紅1四位一體共陰數(shù)碼管1470,1K,4.7K電阻8,2,1三極管85501導(dǎo)線若干排針若干附錄二:完整電路原理圖附錄三:焊接實(shí)物圖附錄四:源程序/*********************************************************************程序名;基于51單片機(jī)的溫度計(jì)*功能:實(shí)時(shí)測(cè)量溫度,超過(guò)上下限報(bào)警,報(bào)警溫度可手動(dòng)調(diào)整.K1是用來(lái)*進(jìn)入上下限調(diào)節(jié)模式的,當(dāng)按一下K1進(jìn)入上限調(diào)節(jié)模式,再按一下進(jìn)入下限*調(diào)節(jié)模式。在正常模式下,按一下K2進(jìn)入查看上限溫度模式,顯示1s左右自動(dòng)*退出;按一下K3進(jìn)入查看下限溫度模式,顯示1s左右自動(dòng)退出;按一下K4消除*按鍵音,再按一下啟動(dòng)按鍵音。在調(diào)節(jié)上下限溫度模式下,K2是實(shí)現(xiàn)加1功能,*K1是實(shí)現(xiàn)減1功能,K3是用來(lái)設(shè)定上下限溫度正負(fù)的。*編程者:彭明闖*編程時(shí)間:2014/05/30 *********************************************************************/#include〈reg52。h>?? #include<intrins.h〉?? ?//將intrins。h頭文件包含到主程序(調(diào)用其中的_nop_()空操作函數(shù)延時(shí))#defineuintunsignedint? #defineucharunsignedchar ucharmax=0x00,min=0x00; ?//max是上限報(bào)警溫度,min是下限報(bào)警溫度bits=0;? ???? ? //s是調(diào)整上下限溫度時(shí)溫度閃爍的標(biāo)志位,s=0不顯示200ms,s=1顯示1s左右bits1=0;? ???????//s1標(biāo)志位用于上下限查看時(shí)的顯示voiddisplay1(uintz);? ?//聲明display1()函數(shù)(display。h頭文件中的函數(shù),ds18b20。h要用應(yīng)先聲明)#include"ds18b20。h" ? ??#include"keyscan.h" #include"display.h” ?? /******************************************************//*??? 主函數(shù) ??? ? ???//*****************************************************/voidmain(){ beer=1;??? ?//關(guān)閉蜂鳴器 led=1; ? ?? //關(guān)閉LED燈?timer1_init(0); ??//初始化定時(shí)器1(未啟動(dòng)定時(shí)器1) get_temperature(1);??//首次啟動(dòng)DS18B20獲取溫度(DS18B20上電后自動(dòng)將EEPROM中的上下限溫度復(fù)制到TH和TL寄存器) while(1)? ?? ?{ ??keyscan();? ?? get_temperature(0);???display(temp,temp_d*0.625);??alarm();? ????}}/*********************************************************************程序名;DS18B20頭文件*編程者:彭明闖*編程時(shí)間:2014/5/30*說(shuō)明:用到的全局變量是:無(wú)符號(hào)字符型變量temp(測(cè)得的溫度整數(shù)部分),temp_d*(測(cè)得的溫度小數(shù)部分),標(biāo)志位f(測(cè)量溫度的標(biāo)志位‘0’表示“正溫度"‘1’表*示“負(fù)溫度”),標(biāo)志位f_max(上限溫度的標(biāo)志位‘0’表示“正溫度”、‘1’表*示“負(fù)溫度”),標(biāo)志位f_min(下限溫度的標(biāo)志位‘0’表示“正溫度"、‘1'表*示“負(fù)溫度"),標(biāo)志位w(報(bào)警標(biāo)志位‘1’啟動(dòng)報(bào)警‘0’關(guān)閉報(bào)警).??*********************************************************************/#ifndef__ds18b20_h(yuǎn)__(dá) ? ?//定義頭文件#define__(dá)ds18b20_h(yuǎn)__#defineuintunsignedint?? #defineucharunsignedchar???sbitDQ=P2^3;?? ? ?//DS18B20接口sbitbeer=P1^0;?? ?//用beer表示P1。0sbitled=P1^1; ? ?//用led表示P1.1uchartemp=0;? ?//測(cè)量溫度的整數(shù)部分uchartemp_d=0; //測(cè)量溫度的小數(shù)部分bitf=0; ? ?//測(cè)量溫度的標(biāo)志位,0’表示“正溫度”‘1’表示“負(fù)溫度”)bitf_max=0;? ? //上限溫度的標(biāo)志位‘0’表示“正溫度"‘1'表示“負(fù)溫度")bitf_min=0; ? //下限溫度的標(biāo)志位‘0’表示“正溫度”、‘1'表示“負(fù)溫度”)bitw=0; ? ?? //報(bào)警標(biāo)志位‘1’啟動(dòng)報(bào)警‘0’關(guān)閉報(bào)警/******************************************************//* ??? ?? 延時(shí)子函數(shù)?? ? ?? ? ?//*****************************************************/voidds18b20_delayus(uintt)//延時(shí)幾μs{while(t——);}voidds18b20_delayms(uintt)? //延時(shí)1ms左右{ uinti,j; for(i=t;i〉0;i-—)?for(j=120;j>0;j--);}/******************************************************//*? ? ??DS18B20初始化函數(shù)? ? ????//*****************************************************/voidds18b20_init()?? ??{ ucharc=0; DQ=1; DQ=0;? ??? ?//控制器向DS18B20發(fā)低電平脈沖?ds18b20_delayus(80); ?//延時(shí)15-80μs?DQ=1;?? ?? ? ? //控制器拉高總線,?while(DQ);? ?? //等待DS18B20拉低總線,在60—240μs之間?ds18b20_delayus(150); ?//延時(shí),等待上拉電阻拉高總線 DQ=1; ? ?? ?? //拉高數(shù)據(jù)線,準(zhǔn)備數(shù)據(jù)傳輸;}/******************************************************//* ?? ?DS18B20字節(jié)讀函數(shù) ? ??? ?//*****************************************************/uchards18b20_read() ? ?{ uchari;?uchard=0;?DQ=1; ??? ?//準(zhǔn)備讀; for(i=8;i>0;i—-)?{ ?d>>=1;???//低位先發(fā); ?DQ=0; ?? ?? ? _nop_(); _nop_(); ? ?? DQ=1; ? ???//必須寫1,否則讀出來(lái)的將是不預(yù)期的數(shù)據(jù); ?if(DQ) ? ??//在12us處讀取數(shù)據(jù);? d|=0x80; ds18b20_delayus(10); ? ?}?returnd;? ?? ?//返回讀取的值}/******************************************************//* ? ? ?DS18B20字節(jié)寫函數(shù) ????//*****************************************************/voidds18b20_write(uchard) ?{uchari;for(i=8;i>0;i-—){ DQ=0;??DQ=d&0x01;? ds18b20_delayus(5);? DQ=1; ?d>>=1;}}/******************************************************//*?? ?????獲取溫度函數(shù)? ???? ??//*****************************************************/voidget_temperat(yī)ure(bitflag) { uchara=0,b=0,c=0,d=0;uinti; ds18b20_init(); ?ds18b20_write(0xcc);? //向DS18B20發(fā)跳過(guò)讀ROM命令?ds18b20_write(0x44); ??//寫啟動(dòng)DS18B20進(jìn)行溫度轉(zhuǎn)換命令,轉(zhuǎn)換結(jié)果存入內(nèi)部RAM if(flag==1)?{ ??? ??? ?//首次啟動(dòng)DS18B20進(jìn)行溫度轉(zhuǎn)換需要500ms,若轉(zhuǎn)換時(shí)間不夠就出錯(cuò),讀出的是85度的錯(cuò)誤值。 display1(1);? //用開(kāi)機(jī)動(dòng)畫耗時(shí) }?else ds18b20_delayms(1); ???ds18b20_init(); ? ?ds18b20_write(0xcc); ? ds18b20_write(0xbe);??? a=ds18b20_read(); ??? //讀內(nèi)部RAM(LSB) b=ds18b20_read();???? //讀內(nèi)部RAM(MSB)?if(flag==1)? ??? //局部位變量f=1時(shí)讀上下線報(bào)警溫度?{ max=ds18b20_read(); //讀內(nèi)部RAM(TH)?min=ds18b20_read(); //讀內(nèi)部RAM(Tl)? ?}?if((max&0x80)==0x80)? //若讀取的上限溫度的最高位(符號(hào)位)為‘1’表明是負(fù)溫度?{f_max=1;max=(max—0x80);}//將上限溫度符號(hào)標(biāo)志位置‘1’表示負(fù)溫度,將上限溫度裝換成無(wú)符號(hào)數(shù)。 if((min&0x80)==0x80)? //若讀取的下限溫度的最高位(符號(hào)位)為‘1’表明是負(fù)溫度 {f_min=1;min=(min—0x80);}//將下限溫度符號(hào)標(biāo)志位置‘1’表示負(fù)溫度,將下限溫度裝換成無(wú)符號(hào)數(shù)。?? i=b;?i>>=4;?if(i==0)??{f=0; ? ?//i為0,正溫度,設(shè)立正溫度標(biāo)記temp=((a〉>4)|(b<<4)); ?//整數(shù)部分?a=(a&0x0f); temp_d=a;? ?//小數(shù)部分? }?else? {?f=1; ?? //i為1,負(fù)溫度,設(shè)立負(fù)溫度標(biāo)記 a=~a+1; b=~b; temp=((a>〉4)|(b〈<4)); ? ??//整數(shù)部分 a=(a&0x0f); ???//小數(shù)部分?temp_d=a; }}/******************************************************//* ???? ???存儲(chǔ)極限溫度函數(shù)? ? ?//*****************************************************/voidstore_t(){ if(f_max==1)??? ?//若上限溫度為負(fù),將上限溫度轉(zhuǎn)換成有符號(hào)數(shù)(最高位為1是負(fù),為0是正)?max=max+0x80;?if(f_min==1) ??//若下限溫度為負(fù),將上限溫度轉(zhuǎn)換成有符號(hào)數(shù) min=min+0x80; ds18b20_init();??? ds18b20_write(0xcc);????ds18b20_write(0x4e); //向DS18B20發(fā)寫字節(jié)至?xí)捍嫫鳎埠停?TH和TL)命令 ds18b20_write(max);???//向暫存器TH(上限溫度暫存器)寫溫度 ds18b20_write(min); ? //向暫存器TL(下限溫度暫存器)寫溫度 ds18b20_write(0xff);?? //向配置寄存器寫命令,進(jìn)行溫度值分辨率設(shè)置 ds18b20_init(); ?? ds18b20_write(0xcc);? ??ds18b20_write(0x48); //向DS18B20發(fā)將RAM中2、3字節(jié)的內(nèi)容寫入EEPROM}? ??? ??? ? //DS18B20上電后會(huì)自動(dòng)將EEPROM中的上下限溫度拷貝到TH、TL暫存器/******************************************************//*?????? ?溫度超限報(bào)警函數(shù) ? ???//*****************************************************/voidalarm(){ ?? ? ? //若上限值是正值 if(f_max==0)?{ if(f_min==0) ? //若下限值是正值? {?? if(f==0)? ?//若測(cè)量值是正值 ?{? ?if(temp<=min||temp〉=max) ???{w=1;TR1=1;}? //當(dāng)測(cè)量值小于最小值或大于最大值時(shí)報(bào)警 ???if((temp<max)&&(temp>min))? {w=0;}? ?//當(dāng)測(cè)量值大于最小值且小于最大值時(shí)不報(bào)警???}? ?if(f==1){w=1;TR1=1;} //若測(cè)量值是負(fù)值時(shí)報(bào)警 ?}?if(f_min==1) ?? //若下限值是負(fù)值 { ? if(f==0) ?? //若測(cè)量值是正值 ?{ ??if(temp〉=max)//當(dāng)測(cè)量值大于最大值時(shí)報(bào)警 ? {w=1;TR1=1;} ? if(temp<max)//當(dāng)測(cè)量值小于最大值時(shí)不報(bào)警 ?? {w=0;}? }???if(f==1)??? //若測(cè)量值是負(fù)值 ?{? ??if(temp>=min)//當(dāng)測(cè)量值大于最小值時(shí)報(bào)警 {w=1;TR1=1;}? ? if(temp〈min)//當(dāng)測(cè)量值小于最小值時(shí)不報(bào)警?? {w=0;} } } }?if(f_max==1) ?? //若下限值是負(fù)值 {?if(f_min==1)? ?//若下限值是負(fù)值??{ ?if(f==1) ?? //若測(cè)量值是負(fù)值???{ ?if((temp<=max)||(temp〉=min)) ??{w=1;TR1=1;}??//當(dāng)測(cè)量值小于最大值或大于最小值時(shí)報(bào)警?? ?if((temp〈min)&&(temp>max))??? {w=0;} ?? //當(dāng)測(cè)量值小于最小值且大于最大值時(shí)不報(bào)警? }? ?if(f==0){w=1;TR1=1;} //若測(cè)量值是正值時(shí)報(bào)警??}?}?}#endif/***********************************************************************程序名;ds18b20keyscan函數(shù)*功能:通過(guò)鍵盤設(shè)定設(shè)定上下限報(bào)警溫度*編程者:彭明闖*編程時(shí)間:2014/5/30**********************************************************************/#ifndef__(dá)keyscan_H__ ??//定義頭文件#define__keyscan_H__??sbitkey1=P2^2;???? sbitkey2=P2^1;?? sbitkey3=P2^0;? sbitkey4=P3^3;? ? ?uchari=0;? ? ? //定義全局變量i用于不同功能模式的選擇,‘0’正常模式,‘1’上限調(diào)節(jié)模式,‘2’下限調(diào)節(jié)模式uchara=0;? ??? //定義全局變量a用于不同模式下數(shù)碼管顯示的選擇bit?k4=0;? ? ? //K4按鍵雙功能選擇位,k4=0時(shí)K4按鍵選擇消按鍵音的功能,k4=1時(shí)K4按鍵選擇正負(fù)溫度設(shè)定功能bitv=0; ? ? ??//K2、K3按鍵雙功能選擇位,v=0時(shí)選擇上下限查看功能,v=1時(shí)選擇上下限溫度加減功能bitv1=0; ?? ??//v1=1時(shí)定時(shí)1250ms時(shí)間到自動(dòng)關(guān)閉報(bào)警上下限查看功能bitv2=0; ? //消按鍵音功能調(diào)整位,為‘0’時(shí)開(kāi)按鍵音,為‘1'時(shí)關(guān)按鍵音/******************************************************//*? ?? ? ?讀鍵盤延時(shí)子函數(shù) ? ?? ?//*****************************************************/voidkeyscan_delay(uintz)?? //延時(shí)1ms左右{uinti,j;for(i=z;i>0;i--)?for(j=120;j>0;j——);}/******************************************************//*???? ? ?? 溫度調(diào)節(jié)函數(shù)?? ??? //*****************************************************/inttemp_change(intcount,bitf)?//上下限溫度調(diào)整{if(key2==0) ??? ?//判斷K2是否按下?{ ? if(v2==0)bee(cuò)r=0;? ?//v2=0開(kāi)按鍵音,否則消按鍵音??keyscan_delay(10); ??//延時(shí)10ms ?if(key2==0) ? ?//再次判斷K2是否按下(實(shí)現(xiàn)按按鍵時(shí)消抖)??{ ? beer=1;? ? ?//K2按下關(guān)按鍵音? if(f==0) ?//若溫度為正 { ?count++; ?//每按一下K2溫度上調(diào)1? if(a==1){if(count〉125)count=125;}//當(dāng)溫度值大于125時(shí)不上調(diào) ? if(a==2){if(count>125)count=125;}??}??if(f?。?) ?? ?//若溫度為負(fù)??{? ?? count++;?? ?//每按一下K2溫度下調(diào)1 ?if(a==1){if(count>55)count=55;}//當(dāng)溫度值小于-55時(shí)不再下調(diào) ??if(a==2){if(count〉55)count=55;} ?} } while(key2==0);? ? //K2松開(kāi)按鍵時(shí)消抖 ?keyscan_delay(10); }?if(key3==0) {?if(v2==0)beer=0;? keyscan_delay(10);??if(key3==0) ? ?//K3按按鍵時(shí)消抖 { ?bee(cuò)r=1; count——;? ??//每按一下K3溫度為正時(shí)下調(diào)1,為負(fù)時(shí)上調(diào)1? if(a==1){if(count〈0)count=0;}//當(dāng)溫度值達(dá)到0時(shí)不再調(diào) ??if(a==2){if(count〈0)count=0;} ?} ?while(key3==0); keyscan_delay(10); ??//K3松開(kāi)按鍵時(shí)消抖 ?} returncount;}/******************************************************//*?? ? ? 讀鍵盤函數(shù) ? ?? ?//*****************************************************/voidkeyscan(){ ?if(key1==0)?{?if(v2==0)bee(cuò)r=0; ?keyscan_delay(10); ?if(key1==0)? ???//K1按按鍵時(shí)消抖 {??beer=1;??TR1=1; ??//開(kāi)定時(shí)器1,通過(guò)s標(biāo)志位的變化,實(shí)現(xiàn)在上下限溫度調(diào)整時(shí)溫度顯示時(shí)閃爍的功能 ?? k4=1; ?? //在上下溫度調(diào)節(jié)功能模式下選擇K4的調(diào)整上下限溫度正負(fù)的功能??v=1;? ? //在上下溫度調(diào)節(jié)功能模式下選擇K2、K3的溫度加減功能 i++; ?? ??//K1按一下i加1,i=‘0'進(jìn)入正常模式,i=‘1’進(jìn)入調(diào)上限模式,i=‘2’進(jìn)入調(diào)下限模式? if(i>2)? ?? //K1按下三次后退出調(diào)節(jié)模式 ?{??i=0;? ???//進(jìn)入正常模式 ??TR1=0; ?? //關(guān)定時(shí)器1???k4=0;? ? //在正常模式下選擇K4的消按鍵音功能???v=0;?? ??//在正常模式下選擇K2、K3的查看上下限報(bào)警溫度功能 ?store_t();? ?//存儲(chǔ)調(diào)整后的上下限報(bào)警溫度??}? switch(i)?? ?//顯示選擇 ?{ ?case0:a=0;break; //a=0選擇顯示測(cè)得的溫度 ?case1:a=1;break;//a=1選擇顯示上限溫度? case2:a=2;break;//a=2選擇顯示下限溫度 ???? default:break; ?}?? }? while(key1==0);? ?//K1松按鍵時(shí)消抖? keyscan_delay(10); ?} if(a==1&&v==1) ??? //a=1選擇顯示上限溫度且v=1時(shí)選擇上下限溫度加功能?{led=0;max=temp_change(max,f_max);}//顯示上限溫度 elseif(a==2&&v==1)?? //a=2選擇顯示下限溫度且v=1時(shí)選擇上下限溫度減功能?{led=1;min=temp_change(min,f_min);} else;?if(k4==1)?? ? ?//k4=1時(shí)K4按鍵選擇正負(fù)溫度設(shè)定功能 { if(key4==0)??{??if(v2==0)beer=0;? keyscan_delay(5); ??if(key4==0)? ?{? ?beer=1; if(a==1)?? {if(max>55)f_max=0;elsef_max=~f_max;}//當(dāng)溫度大于55度時(shí),只能設(shè)定為正溫度? ?if(a==2)?? {if(min〉55)f_max=0;elsef_min=~f_min;}//當(dāng)溫度大于55度時(shí),只能設(shè)定為正溫度 ?? ?}? ?while(key4==0); keyscan_delay(10);??} } if(v==0)?? ???//v=0時(shí)選擇上下限查看功能 {??if(key2==0) {??if(v2==0)beer=0;? keyscan_delay(10); ? if(key2==0)? { ??bee(cuò)r=1; ? a=1;? ???//選擇上限顯示 ??TR1=1; ? //開(kāi)定時(shí)器1開(kāi)始定時(shí)一分鐘左右? s1=1;? ? //上限顯示不閃爍,顯示一分鐘左右自動(dòng)退出 ?} ? while(key2==0); ?keyscan_delay(10); ??? }? if(key3==0) {??if(v2==0)beer=0;? ?keyscan_delay(10); ? if(key3==0) ?{ ??beer=1;???a=2; ??//選擇下限顯示?? TR1=1; ?? //開(kāi)定時(shí)器1開(kāi)始定時(shí)1s?? s1=1;??? //下限顯示不閃爍,顯示1s自動(dòng)退出? ? ? }?? while(key3==0);? keyscan_delay(10); ? ?} ?if(v1==1) ? ?//v1=1時(shí)定時(shí)1s時(shí)間到自動(dòng)關(guān)閉報(bào)警上下限查看功能??{a=0;v1=0;TR1=0;}??//a=0顯示實(shí)測(cè)溫度,v1清零,關(guān)定時(shí)器1??if(k4==0) ? //k4=0時(shí)K4按鍵選擇消按鍵音的功能? { ? ? if(key4==0) ??{ if(v2==0)beer=0; ???keyscan_delay(10);? ??if(key4==0) ? ?{??? bee(cuò)r=1; ? ?v2=~v2;? //為‘0’時(shí)開(kāi)按鍵音,為‘1'時(shí)關(guān)按鍵音? ? ? }? ? while(key4==0);??? keyscan_delay(10);? } ? ?}?}}#endif/***********************************************************************程序名;ds18b20數(shù)碼管動(dòng)態(tài)顯示頭文件*功能:通過(guò)定時(shí)器0延時(shí)是數(shù)碼管動(dòng)態(tài)顯示*編程者:彭明闖*編程時(shí)間:2014/5/30**********************************************************************/#ifndef__ds18b20_display_H__ #define__ds18b20_display_H__#defineuintunsignedint ?//變量類型宏定義,用uint表示無(wú)符號(hào)整形(16位)#defineucharunsignedchar ? //變量類型宏定義,用uchar表示無(wú)符號(hào)字符型(8位)sbitwei1=P2^4;?? ? //可位尋址變量定義,用wei1表示P2。4口sbitwei2=P2^5; ????//用wei2表示P2.5口sbitwei3=P2^6;?? ? ?//用wei3表示P2。6口sbitwei4=P2^7;?? ? ?//用wei4表示P2.7口ucharnum=0; ??? //定義num為全局無(wú)符號(hào)字符型變量,賦初值為‘0’ucharcodetemperat(yī)ure1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //定義顯示碼表0~9ucharcodetemperature2[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //帶小數(shù)點(diǎn)的0~9.ucharcodetemperature3[]={0x00,0x80,0x40,0x7

溫馨提示

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