版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
基于單片機的波形發(fā)生器的課程設(shè)計報告(完整資料)(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)
重慶科技學(xué)院基于單片機的波形發(fā)生器的課程設(shè)計報告(完整資料)(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)學(xué)生實習(xí)(實訓(xùn))總結(jié)報告學(xué)院:電氣與信息工程學(xué)院專業(yè)班級:測控學(xué)生姓名:學(xué)號:設(shè)計地點(單位)I506設(shè)計題目:基于單片機的波形發(fā)生器的設(shè)計完成日期:2014年03月17日指導(dǎo)教師評語:________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________成績(五級記分制):___________________________指導(dǎo)教師(簽字):____________________________目錄TOC\o"1—3"\h\z\uHYPERLINK\l_Toc29821一、實習(xí)的任務(wù)要求與意義PAGEREF_Toc298211HYPERLINK\l_Toc16271。1設(shè)計要求PAGEREF_Toc16271HYPERLINK\l_Toc236471。2設(shè)計任務(wù)PAGEREF_Toc236471HYPERLINK\l_Toc128411.3基本功能與性能指標PAGEREF_Toc128411HYPERLINK\l_Toc310401.4實習(xí)的意義PAGEREF_Toc310401HYPERLINK\l_Toc6854二、設(shè)計方案PAGEREF_Toc68542HYPERLINK\l_Toc85092.1硬件選擇PAGEREF_Toc85092HYPERLINK\l_Toc77912.2系統(tǒng)總體設(shè)計PAGEREF_Toc77913HYPERLINK\l_Toc16392三、系統(tǒng)硬件設(shè)計PAGEREF_Toc1639243.1單片機的最小系統(tǒng)PAGEREF_Toc2838543.2按鍵電路設(shè)計PAGEREF_Toc1890153.3LCD顯示的設(shè)計PAGEREF_Toc233445HYPERLINK\l_Toc30320四、系統(tǒng)軟件設(shè)計PAGEREF_Toc303207HYPERLINK\l_Toc217384。1主程序設(shè)計PAGEREF_Toc217387HYPERLINK\l_Toc36444。2LCD顯示子程序設(shè)計PAGEREF_Toc364484.3D/A轉(zhuǎn)換子程序設(shè)計PAGEREF_Toc296218HYPERLINK\l_Toc8172五、調(diào)試及性能分析PAGEREF_Toc81729HYPERLINK\l_Toc47545.1調(diào)試步驟PAGEREF_Toc475410HYPERLINK\l_Toc279515.2性能分析PAGEREF_Toc2795112HYPERLINK\l_Toc15454參考文獻PAGEREF_Toc1545413HYPERLINK\l_Toc3503附錄1系統(tǒng)硬件電路圖PAGEREF_Toc350314附錄2程序代碼PAGEREF_Toc238715一、實習(xí)的任務(wù)要求與意義1。1設(shè)計要求1.掌握電子系統(tǒng)的一般設(shè)計方法2。掌握仿真軟件的應(yīng)用3。培養(yǎng)綜合應(yīng)用所學(xué)知識來指導(dǎo)實踐的能力4.根據(jù)技術(shù)指標要求及實驗室條件自選方案設(shè)計出原理電路圖,分析工作原理并計算元件參數(shù)。1。2設(shè)計任務(wù)按要求設(shè)計波形發(fā)生器并完成相關(guān)功能:(1)運用單片機控制產(chǎn)生多種波形,這些波形包括三角波、方波、鋸齒波等。(2)信號的發(fā)生器所產(chǎn)生波形的頻率、幅值均為連續(xù)可調(diào)。擴展功能在上位機將波形實時顯示出來,用紅外線遙控器實現(xiàn)上述功能,其它功能。1.3基本功能與性能指標基本功能:(1)可以產(chǎn)生正弦波、方波、三角波,頻率和幅值可調(diào).(2)按KEY1鍵選擇輸出波形。(3)按KEY2,KEY5鍵調(diào)節(jié)輸出信號頻率和電壓幅值的增進和減少。(4)按KEY6鍵是轉(zhuǎn)換調(diào)節(jié)頻率或電壓幅值。性能指標:(1)幅值0~5V可調(diào)(2)頻率0~100Hz可調(diào)1.4實習(xí)的意義本次實訓(xùn)的目的是讓我們更加熟練的掌握單片機的原理與應(yīng)用,通過學(xué)習(xí)的單片機基礎(chǔ)知識來更加熟悉的操作將軟件和硬件相結(jié)合,通過控制單片機控制的程序代碼與能實現(xiàn)系統(tǒng)控制功能的電子元件來實現(xiàn)所需要的數(shù)據(jù)。通過對軟件和硬件的了解與應(yīng)用再結(jié)合基礎(chǔ)知識對單片機更深層次的了解,達到以后能更加熟練的通過單片機去完成更復(fù)雜的任務(wù).二、設(shè)計方案采用AT89C51單片機和數(shù)模轉(zhuǎn)換器PCF8591實現(xiàn)波形的產(chǎn)生。波形的產(chǎn)生方法是用AT89C51單片機執(zhí)行波形程序,向PCF8591轉(zhuǎn)換器的輸入端輸入相應(yīng)的數(shù)據(jù),從而在DA轉(zhuǎn)換電路輸出端再通過運放電路轉(zhuǎn)換得到相應(yīng)的電壓波形.在AT89C51的P1口接按鍵控制波形的各類和波形的頻率,每種波形對應(yīng)一種按鍵方式。此方案原理簡單,同時適合操作,實現(xiàn)起來也相對較容易.產(chǎn)生的三種波形的頻率可由按鍵控制,并通過按鍵改變來轉(zhuǎn)換不同的波形,也能夠在示波器上顯示出所要求的波形。波形的頻率步進也可以實現(xiàn)調(diào)節(jié),具有線路簡單、可行性高、符合設(shè)計要求等優(yōu)點。加上LCD數(shù)碼顯示管,從而能夠在LCD上顯示出頻率值、幅度值信息。輸出的波形也較穩(wěn)定,精度較高,通過濾波電路使得系統(tǒng)的抗干擾性增強,電路簡單,性價比高。圖2.1系統(tǒng)組成結(jié)構(gòu)框圖2。1硬件選擇(1)單片機:STC89C52是高速/低功耗/超強抗干擾的新一代8051單片機,指令代碼完全兼容傳統(tǒng)8051,但速度快8—12倍.內(nèi)部集成MAX810專用復(fù)位電路,2路PWM,8路高速10位A/D轉(zhuǎn)換(250K/S),針對電機控制,強干擾場合。(2)PCF8591:PCF8591是一個單片集成、單獨供電、低功耗、8-bitCMOS數(shù)據(jù)獲取器件。PCF8591具有4個模擬輸入、1個模擬輸出和1個串行I2C總線接口。PCF8591的3個地址引腳A0,A1和A2可用于硬件地址編程,允許在同個I2C總線上接入8個PCF8591器件,而無需額外的硬件.在PCF8591器件上輸入輸出的地址、控制和數(shù)據(jù)信號都是通過雙線雙向I2C總線以串行的方式進行傳輸。2.2系統(tǒng)總體設(shè)計本系統(tǒng)是用單片機來控制波形的轉(zhuǎn)換以及幅值和頻率的改變的,所以該系統(tǒng)可以分為4個電路模塊,下面是總體設(shè)計框圖。STC89C52PCF8591STC89C52PCF8591按鍵控制示波器顯示LCD圖2.2系統(tǒng)總體設(shè)計框圖三、系統(tǒng)硬件設(shè)計3。1單片機的最小系統(tǒng)由于單片機最小系統(tǒng)只需要外圍有時鐘電路和復(fù)位電路即可,則單片機最小系統(tǒng)有著兩個外圍電路即可正常工作,下面是單片機的最小系統(tǒng)原理圖。圖3.1STC89C52單片機最小系統(tǒng)3。2按鍵電路設(shè)計本實現(xiàn)采用4個按鍵來進行波形的轉(zhuǎn)換、幅值和頻率的改變、幅值和頻率的選擇,P32鍵用來改變波P33、P16用來改變幅值或頻率的大小,P17用來選擇頻率和幅值,下面是按鍵電路圖。圖3。2按鍵電路圖3.3LCD顯示的設(shè)計本硬件采用的是12864的液晶顯示屏,顯示屏將波形的轉(zhuǎn)化顯示在顯示屏上,下面是液晶顯示的電路。圖3.312864液晶顯示電路四、系統(tǒng)軟件設(shè)計4。1主程序設(shè)計主程序內(nèi)進行的是波形的切換及幅值、頻率的改變,用示波器和LCD顯示,將主要的寫進即可,其他的就寫在外面,下面是主程序流程圖。開始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è)計液晶顯示的程序在本程序中比較的簡單,就是為了實時的顯示出當(dāng)前的波形是什么,用按鍵切換之后液晶顯示也跟著變。液晶顯示程序需首先初始化,再進行數(shù)據(jù)的傳輸,并進行字符的顯示,所以寫出相應(yīng)的幾個程序即可進行LCD的顯示。開始開始初始化12864LCD寫控制指令寫顯示數(shù)據(jù)串行傳輸數(shù)據(jù)寫漢字到LCD屏指定位置結(jié)束圖4.2LCD顯示流程圖D/A轉(zhuǎn)換子程序設(shè)計本程序采用PCD8592來作D/A轉(zhuǎn)換器,需要將A1、A1、A2接地,單片機上的P37和P36接PCF8591上的SCL和SDA端口,AOUT接示波器,供顯示D/A轉(zhuǎn)換要滿足I2C協(xié)議才能進行數(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)試:檢查線路連接有無錯誤,SDA和SCL接單片機的P36和P37口,VCC接電源,CND接地,AOUT接示波器,在下載數(shù)據(jù)到單片機之后數(shù)據(jù)在傳輸?shù)臅r候PCF8591上的一個藍色的燈會不停的閃,說明有數(shù)據(jù)在傳輸,否則無數(shù)據(jù)傳輸。軟件調(diào)試:首先看I2C協(xié)議是否正確,否則不能傳輸數(shù)據(jù),再看按鍵的邏輯關(guān)系是否正確,還有就是LCD的顯示是否正確。調(diào)節(jié)電源,使其輸出5V電壓,調(diào)整好示波器。給電路供電,觀察示波器,記錄各頻段對應(yīng)波形的情況,峰峰值。調(diào)試結(jié)果表明,該電路在要求頻率范圍內(nèi)的大部分頻率范圍基本上不失真,除了在最高頻率的最低頻率有少許失真,其中,當(dāng)頻率接近10KHz時,方波高低電壓躍變時出現(xiàn)毛刺,審過零比較器的頻率特性所致,另外,在最高頻和最低頻段,三角波出現(xiàn)少許彎斜,可選用頻率特性更為寬的電容進行校正。示波器顯示之后的幅值頻率的調(diào)試結(jié)果如下圖所示:調(diào)試之后的正弦波調(diào)試之后的方波調(diào)試之后的三角波5.2性能分析經(jīng)過一段時間運行后,可以對系統(tǒng)的性能進行測試.對于本波形發(fā)生器來說,用示波器可以測試其性能指標,按前面所述設(shè)計的波形發(fā)生器,能產(chǎn)生正弦波、三角波及方波信號,其幅值可以0—5V內(nèi)變化,頻率也可以調(diào)整。六、心得體會經(jīng)過兩周的實訓(xùn),很快就結(jié)束了。雖然時間短暫,但是其中我們在完成任務(wù)的時候還是面臨了很多的問題,正是因為遇到了難題,我們小組在一起探討,經(jīng)過多次改正最后還是圓滿的完成了任務(wù).雖然平時上課我們做過實驗,但是現(xiàn)在給我們一個任務(wù)讓我們?nèi)ネ瓿傻臅r候才發(fā)現(xiàn)并不是那么容易就能做出來的,不僅需要扎實的基礎(chǔ)知識還要去查詢相關(guān)的書籍了解一些我們不懂的。經(jīng)過本次實訓(xùn),我們不僅增強了知識,也學(xué)到了很多技巧,對單片機的理解與運用更加熟練了。此次單片機的設(shè)計硬件電路較為簡單,而程序的設(shè)計在當(dāng)中占據(jù)很重要的部分.這次課程設(shè)計是用STC12C5AI6S2單片機與PCF8592D/A轉(zhuǎn)換器來實現(xiàn)的波形產(chǎn)生與顯示,所以要對這兩個模塊非常的熟悉.對于PCF8591需要深入的認識I2C協(xié)議的內(nèi)容才能正確的傳輸數(shù)據(jù)。而對于單片機而需要對各個接口非常熟悉,才能保證數(shù)據(jù)的正常傳輸。此外還要熟練的使用示波器,對產(chǎn)生的波形進行調(diào)整,來得到更好的效果。它考驗我們靈活的運用所學(xué)知識,培養(yǎng)了我們在遇到問題善于觸屏的良好學(xué)習(xí)態(tài)度.以書本知識為基礎(chǔ)靈活的擴展,學(xué)習(xí)前人的驗,向高層次邁進.當(dāng)然還是存在不足的地方,例如當(dāng)頻率過小的時候矩形波會有些失真,轉(zhuǎn)換器轉(zhuǎn)換可以加一個鎖存器,放大電路設(shè)計上還有待進一步改進,使其具有更強的輸出能力等。參考文獻胡文金.單片機系統(tǒng)實訓(xùn)教程.重慶:重慶大學(xué)出版社,2005梁森.自動檢測技術(shù)及應(yīng)用.北京:機械工業(yè)出版社,2012程德福。智能儀器.機械工業(yè)出版社。2009。9朱定華,戴汝平等。單片危機原理與應(yīng)用。清華大學(xué)出版社。彭楚武。微機原理與接口技術(shù).湖南大圩出版社.李朝清.單片機原理與接口技術(shù).北京航空航天大學(xué)出版社.張李勇,陳郎,張飛舟.基于8051的雙通道波形發(fā)生器的設(shè)計與現(xiàn)實.計算機工程與應(yīng)用許慶山等編.電路、信號與系統(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,0xBC,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,”信號發(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//定時器中斷{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;}}//********************************************定時器中斷按鍵中斷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);}}單片機課程設(shè)計單片機課程設(shè)計課題:基于51單片機的交通燈設(shè)計專業(yè):?機械設(shè)計制造及其自動化學(xué)號:?指導(dǎo)教師:??邵添設(shè)計日期: ? 2017/12/18成績:重慶大學(xué)城市科技學(xué)院電氣學(xué)院基于51單片機數(shù)字溫度計設(shè)計報告一、設(shè)計目的作用本設(shè)計是一款簡單實用的小型數(shù)字溫度計,所采用的主要元件有傳感器DS18B20,單片機AT89C52,,四位共陰極數(shù)碼管一個,電容電阻若干。DS18B20支持“一線總線”接口,測量溫度范圍—55°C~+125°C。在—10~+85°C范圍內(nèi),精度為±0。5°C。18B20的精度較差,為±本次數(shù)字溫度計的設(shè)計共分為五部分,主控制器,LED顯示部分,傳感器部分,復(fù)位部分,按鍵設(shè)置部分,時鐘電路.主控制器即單片機部分,用于存儲程序和控制電路;LED顯示部分是指四位共陰極數(shù)碼管,用來顯示溫度;傳感器部分,即溫度傳感器,用來采集溫度,進行溫度轉(zhuǎn)換;復(fù)位部分,即復(fù)位電路,按鍵部分用來設(shè)置上下限報警溫度。測量的總過程是,傳感器采集到外部環(huán)境的溫度,并進行轉(zhuǎn)換后傳到單片機,經(jīng)過單片機處理判斷后將溫度傳遞到數(shù)碼管顯示。二、設(shè)計要求(1).利用DS18B20傳感器實時檢測溫度并顯示。(2).利用數(shù)碼管實時顯示溫度.(3)。當(dāng)溫度超過或者低于設(shè)定值時蜂鳴器報警,LED閃爍指示。(4).能夠手動設(shè)置上限和下限報警溫度。三、設(shè)計的具體實現(xiàn)1、系統(tǒng)概述方案一:由于本設(shè)計是測溫電路,可以使用熱敏電阻之類的器件利用其感溫效應(yīng),在將隨被測溫度變化的電壓或電流采集過來,進行A/D轉(zhuǎn)換后,就可以用單片機進行數(shù)據(jù)的處理,在顯示電路上,就可以將被測溫度顯示出來,這種設(shè)計需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。方案設(shè)計框圖如下:數(shù)碼管顯示電路熱敏電阻組成的感溫電路數(shù)碼管顯示電路熱敏電阻組成的感溫電路AD轉(zhuǎn)換方案二:考慮到用溫度傳感器,在單片機電路設(shè)計中,大多都是使用傳感器,所以這是非常容易想到的,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測溫度值,進行轉(zhuǎn)換,就可以滿足設(shè)計要求。從以上兩種方案,很容易看出,采用方案二,電路比較簡單,軟件設(shè)計也比較簡單,故采用了方案二。2、
單元電路設(shè)計與分析1、硬件設(shè)計按照系統(tǒng)設(shè)計功能的要求,確定系統(tǒng)由3個模塊組成:主控制器、測溫電路和顯示電路。數(shù)字溫度計總體電路結(jié)構(gòu)框圖所示:蜂鳴器報警模塊AT89C51單片機DB18B20溫度傳感器按鍵設(shè)置模塊電源數(shù)碼管顯示LED閃爍報警模塊蜂鳴器報警模塊AT89C51單片機DB18B20溫度傳感器按鍵設(shè)置模塊電源數(shù)碼管顯示LED閃爍報警模塊單片機的選擇單片機AT89S52具有低電壓供電和體積小等特點,四個端口只需要兩個口就能滿足電路系統(tǒng)的設(shè)計需要,很適合便攜手持式產(chǎn)品的設(shè)計使用系統(tǒng)可用二節(jié)電池供電。由于器件問題,我們使用了通用的手機5V充電器接口。復(fù)位電路模塊單片機系統(tǒng)的復(fù)位電路在這里使用的是上電+按鈕的復(fù)位電路模式,其中電阻R采用的是10KΩ的阻值,電容采用電容值為10uF的電解電容,電路圖如下:溫度顯示模塊四位共陰極數(shù)碼管,能夠顯示小數(shù)。列掃描用P2.4~P2。7口來實現(xiàn),列驅(qū)動直接51接單片機驅(qū)動.電路圖如下: ??? ? ?? ? ??? 溫度傳感器模塊DS18B20溫度傳感器是美國DALLAS半導(dǎo)體公司最新推出的一種改進型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據(jù)實際要求通過簡單的編程實現(xiàn)9~12位的數(shù)字值讀數(shù)方式。電路圖如下:? ?? ? ? ?? ??? ? ?按鍵模塊按鍵是用來設(shè)置報警的上下限溫.K1是用來進入上下限調(diào)節(jié)模式的,當(dāng)按一下K1進入上限調(diào)節(jié)模式,再按一下進入下限調(diào)節(jié)模式。在正常模式下,按一下K2進入查看上限溫度模式,顯示1s左右自動退出;按一下K3進入查看下限溫度模式,顯示1s左右自動退出;按一下K4消除按鍵音,再按一下啟動按鍵音.在調(diào)節(jié)上下限溫度模式下,K2是實現(xiàn)加1功能,K1是實現(xiàn)減1功能,K3是用來設(shè)定上下限溫度正負的。? 2、軟件設(shè)計主要包括主程序、讀出溫度子程序、溫度轉(zhuǎn)換命令子程序、計算溫度子程序和現(xiàn)實數(shù)據(jù)刷新子程序等。主程序主程序的主要功能是負責(zé)溫度的實時顯示、讀出并處理DS18B20的測量溫度值。溫度測量每1S進行一次.主流程圖如下:讀出溫度子程序讀出溫度子程序的主要功能是讀出RAM中的9字節(jié)。在讀出時須進行CRC校驗,校驗有錯時不進行溫度數(shù)據(jù)的改寫。流程圖如下:溫度轉(zhuǎn)換命令子程序溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開始命令.當(dāng)采用12位分辨率時,轉(zhuǎn)換時間約為750ms.在本程序設(shè)計中,采用1s顯示程序延時法等待轉(zhuǎn)換的完成。流程圖如下:顯示數(shù)據(jù)刷新子程序顯示數(shù)據(jù)刷新子程序主要是對顯示緩沖器中的顯示數(shù)據(jù)進行刷新操作,當(dāng)最高數(shù)據(jù)顯示位為0時,將符號顯示位移入下一位.系統(tǒng)的調(diào)試及性能分析:硬件調(diào)試,首先檢查電感的焊接是否正確,然后可用萬用表測試或通電檢測。軟件調(diào)試可以先編寫顯示程序并進行硬件的正確性檢驗,然后分別進行主程序、讀出溫度子程序、溫度轉(zhuǎn)換命令子程序、計算溫度子程序和現(xiàn)實數(shù)據(jù)刷新子程序等的編程及調(diào)試由于DS18B20與單片機采用串行數(shù)據(jù)傳送,因此,對DS18B20進行讀/寫編程時必須嚴格地保證讀/寫時序;否則將無法讀取測量結(jié)果。本程序采用單片機匯編或C語言編寫用KeilC51編譯器編程調(diào)試。軟件調(diào)試到能顯示溫度值,并且在有溫度變化時顯示溫度能改變,就基本完成.性能測試可用制作的溫度計和已有的成品溫度計同時進行測量比較。由于DS18B20的精度很高,所以誤差指標可以限制在0.5℃以內(nèi)。另外,—55~+125 ? ? ?? ??? 四、總結(jié)本次的課程設(shè)計使我們進一步鞏固了書本上的知識,做到了學(xué)以致用.這是我們第二次自己動手設(shè)計的電路,通過系統(tǒng)仿真軟件Proteus和編譯軟件Keil,使我們進一步了解了單片機的設(shè)計制作過程,其中最為困難的是軟件部分,即編程部分,我們上網(wǎng)找了好多資料,雖然經(jīng)過自己的修改,但還是有很多功能不能實現(xiàn),如溫度上下限設(shè)置。由于Proteus并不是很熟練,在使用的過程中有很多原件的名稱不知道,從而花費了大量的時間在網(wǎng)上查找,今后應(yīng)該在這方面多多努力。最后一步的焊接硬件也遇到了不少麻煩??偨Y(jié)經(jīng)驗的時候我們得出這樣的結(jié)論,學(xué)習(xí)應(yīng)該學(xué)以致用,有目的的去學(xué)習(xí),如果學(xué)了不用等于沒學(xué)。其次,要學(xué)以致用,理論聯(lián)系實際,這樣才會取得事半功倍的效果.五、附錄附錄一:元件清單元件名稱數(shù)量AT89C51單片機112MHZ晶振133pF電容222uF電解電容1按鍵開關(guān)5IC插座40Pin1DS18B20溫度傳感器1蜂鳴器1LED?5紅1四位一體共陰數(shù)碼管1470,1K,4.7K電阻8,2,1三極管85501導(dǎo)線若干排針若干附錄二:完整電路原理圖附錄三:焊接實物圖附錄四:源程序/*********************************************************************程序名;基于51單片機的溫度計*功能:實時測量溫度,超過上下限報警,報警溫度可手動調(diào)整.K1是用來*進入上下限調(diào)節(jié)模式的,當(dāng)按一下K1進入上限調(diào)節(jié)模式,再按一下進入下限*調(diào)節(jié)模式。在正常模式下,按一下K2進入查看上限溫度模式,顯示1s左右自動*退出;按一下K3進入查看下限溫度模式,顯示1s左右自動退出;按一下K4消除*按鍵音,再按一下啟動按鍵音。在調(diào)節(jié)上下限溫度模式下,K2是實現(xiàn)加1功能,*K1是實現(xiàn)減1功能,K3是用來設(shè)定上下限溫度正負的。*編程者:彭明闖*編程時間:2014/05/30 *********************************************************************/#include〈reg52。h>?? #include<intrins.h〉?? ?//將intrins。h頭文件包含到主程序(調(diào)用其中的_nop_()空操作函數(shù)延時)#defineuintunsignedint? #defineucharunsignedchar ucharmax=0x00,min=0x00; ?//max是上限報警溫度,min是下限報警溫度bits=0;? ???? ? //s是調(diào)整上下限溫度時溫度閃爍的標志位,s=0不顯示200ms,s=1顯示1s左右bits1=0;? ???????//s1標志位用于上下限查看時的顯示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); ??//初始化定時器1(未啟動定時器1) get_temperature(1);??//首次啟動DS18B20獲取溫度(DS18B20上電后自動將EEPROM中的上下限溫度復(fù)制到TH和TL寄存器) while(1)? ?? ?{ ??keyscan();? ?? get_temperature(0);???display(temp,temp_d*0.625);??alarm();? ????}}/*********************************************************************程序名;DS18B20頭文件*編程者:彭明闖*編程時間:2014/5/30*說明:用到的全局變量是:無符號字符型變量temp(測得的溫度整數(shù)部分),temp_d*(測得的溫度小數(shù)部分),標志位f(測量溫度的標志位‘0’表示“正溫度"‘1’表*示“負溫度”),標志位f_max(上限溫度的標志位‘0’表示“正溫度”、‘1’表*示“負溫度”),標志位f_min(下限溫度的標志位‘0’表示“正溫度"、‘1'表*示“負溫度"),標志位w(報警標志位‘1’啟動報警‘0’關(guān)閉報警).??*********************************************************************/#ifndef__ds18b20_h__ ? ?//定義頭文件#define__ds18b20_h__#defineuintunsignedint?? #defineucharunsignedchar???sbitDQ=P2^3;?? ? ?//DS18B20接口sbitbeer=P1^0;?? ?//用beer表示P1。0sbitled=P1^1; ? ?//用led表示P1.1uchartemp=0;? ?//測量溫度的整數(shù)部分uchartemp_d=0; //測量溫度的小數(shù)部分bitf=0; ? ?//測量溫度的標志位,0’表示“正溫度”‘1’表示“負溫度”)bitf_max=0;? ? //上限溫度的標志位‘0’表示“正溫度"‘1'表示“負溫度")bitf_min=0; ? //下限溫度的標志位‘0’表示“正溫度”、‘1'表示“負溫度”)bitw=0; ? ?? //報警標志位‘1’啟動報警‘0’關(guān)閉報警/******************************************************//* ??? ?? 延時子函數(shù)?? ? ?? ? ?//*****************************************************/voidds18b20_delayus(uintt)//延時幾μs{while(t——);}voidds18b20_delayms(uintt)? //延時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); ?//延時15-80μs?DQ=1;?? ?? ? ? //控制器拉高總線,?while(DQ);? ?? //等待DS18B20拉低總線,在60—240μs之間?ds18b20_delayus(150); ?//延時,等待上拉電阻拉高總線 DQ=1; ? ?? ?? //拉高數(shù)據(jù)線,準備數(shù)據(jù)傳輸;}/******************************************************//* ?? ?DS18B20字節(jié)讀函數(shù) ? ??? ?//*****************************************************/uchards18b20_read() ? ?{ uchari;?uchard=0;?DQ=1; ??? ?//準備讀; for(i=8;i>0;i—-)?{ ?d>>=1;???//低位先發(fā); ?DQ=0; ?? ?? ? _nop_(); _nop_(); ? ?? DQ=1; ? ???//必須寫1,否則讀出來的將是不預(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ā)跳過讀ROM命令?ds18b20_write(0x44); ??//寫啟動DS18B20進行溫度轉(zhuǎn)換命令,轉(zhuǎn)換結(jié)果存入內(nèi)部RAM if(flag==1)?{ ??? ??? ?//首次啟動DS18B20進行溫度轉(zhuǎn)換需要500ms,若轉(zhuǎn)換時間不夠就出錯,讀出的是85度的錯誤值。 display1(1);? //用開機動畫耗時 }?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時讀上下線報警溫度?{ max=ds18b20_read(); //讀內(nèi)部RAM(TH)?min=ds18b20_read(); //讀內(nèi)部RAM(Tl)? ?}?if((max&0x80)==0x80)? //若讀取的上限溫度的最高位(符號位)為‘1’表明是負溫度?{f_max=1;max=(max—0x80);}//將上限溫度符號標志位置‘1’表示負溫度,將上限溫度裝換成無符號數(shù)。 if((min&0x80)==0x80)? //若讀取的下限溫度的最高位(符號位)為‘1’表明是負溫度 {f_min=1;min=(min—0x80);}//將下限溫度符號標志位置‘1’表示負溫度,將下限溫度裝換成無符號數(shù)。?? i=b;?i>>=4;?if(i==0)??{f=0; ? ?//i為0,正溫度,設(shè)立正溫度標記temp=((a〉>4)|(b<<4)); ?//整數(shù)部分?a=(a&0x0f); temp_d=a;? ?//小數(shù)部分? }?else? {?f=1; ?? //i為1,負溫度,設(shè)立負溫度標記 a=~a+1; b=~b; temp=((a>〉4)|(b〈<4)); ? ??//整數(shù)部分 a=(a&0x0f); ???//小數(shù)部分?temp_d=a; }}/******************************************************//* ???? ???存儲極限溫度函數(shù)? ? ?//*****************************************************/voidstore_t(){ if(f_max==1)??? ?//若上限溫度為負,將上限溫度轉(zhuǎn)換成有符號數(shù)(最高位為1是負,為0是正)?max=max+0x80;?if(f_min==1) ??//若下限溫度為負,將上限溫度轉(zhuǎn)換成有符號數(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);?? //向配置寄存器寫命令,進行溫度值分辨率設(shè)置 ds18b20_init(); ?? ds18b20_write(0xcc);? ??ds18b20_write(0x48); //向DS18B20發(fā)將RAM中2、3字節(jié)的內(nèi)容寫入EEPROM}? ??? ??? ? //DS18B20上電后會自動將EEPROM中的上下限溫度拷貝到TH、TL暫存器/******************************************************//*?????? ?溫度超限報警函數(shù) ? ???//*****************************************************/voidalarm(){ ?? ? ? //若上限值是正值 if(f_max==0)?{ if(f_min==0) ? //若下限值是正值? {?? if(f==0)? ?//若測量值是正值 ?{? ?if(temp<=min||temp〉=max) ???{w=1;TR1=1;}? //當(dāng)測量值小于最小值或大于最大值時報警 ???if((temp<max)&&(temp>min))? {w=0;}? ?//當(dāng)測量值大于最小值且小于最大值時不報警???}? ?if(f==1){w=1;TR1=1;} //若測量值是負值時報警 ?}?if(f_min==1) ?? //若下限值是負值 { ? if(f==0) ?? //若測量值是正值 ?{ ??if(temp〉=max)//當(dāng)測量值大于最大值時報警 ? {w=1;TR1=1;} ? if(temp<max)//當(dāng)測量值小于最大值時不報警 ?? {w=0;}? }???if(f==1)??? //若測量值是負值 ?{? ??if(temp>=min)//當(dāng)測量值大于最小值時報警 {w=1;TR1=1;}? ? if(temp〈min)//當(dāng)測量值小于最小值時不報警?? {w=0;} } } }?if(f_max==1) ?? //若下限值是負值 {?if(f_min==1)? ?//若下限值是負值??{ ?if(f==1) ?? //若測量值是負值???{ ?if((temp<=max)||(temp〉=min)) ??{w=1;TR1=1;}??//當(dāng)測量值小于最大值或大于最小值時報警?? ?if((temp〈min)&&(temp>max))??? {w=0;} ?? //當(dāng)測量值小于最小值且大于最大值時不報警? }? ?if(f==0){w=1;TR1=1;} //若測量值是正值時報警??}?}?}#endif/***********************************************************************程序名;ds18b20keyscan函數(shù)*功能:通過鍵盤設(shè)定設(shè)定上下限報警溫度*編程者:彭明闖*編程時間:2014/5/30**********************************************************************/#ifndef__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時K4按鍵選擇消按鍵音的功能,k4=1時K4按鍵選擇正負溫度設(shè)定功能bitv=0; ? ? ??//K2、K3按鍵雙功能選擇位,v=0時選擇上下限查看功能,v=1時選擇上下限溫度加減功能bitv1=0; ?? ??//v1=1時定時1250ms時間到自動關(guān)閉報警上下限查看功能bitv2=0; ? //消按鍵音功能調(diào)整位,為‘0’時開按鍵音,為‘1'時關(guān)按鍵音/******************************************************//*? ?? ? ?讀鍵盤延時子函數(shù) ? ?? ?//*****************************************************/voidkeyscan_delay(uintz)?? //延時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)beer=0;? ?//v2=0開按鍵音,否則消按鍵音??keyscan_delay(10); ??//延時10ms ?if(key2==0) ? ?//再次判斷K2是否按下(實現(xiàn)按按鍵時消抖)??{ ? beer=1;? ? ?//K2按下關(guān)按鍵音? if(f==0) ?//若溫度為正 { ?count++; ?//每按一下K2溫度上調(diào)1? if(a==1){if(count〉125)count=125;}//當(dāng)溫度值大于125時不上調(diào) ? if(a==2){if(count>125)count=125;}??}??if(f?。?) ?? ?//若溫度為負??{? ?? count++;?? ?//每按一下K2溫度下調(diào)1 ?if(a==1){if(count>55)count=55;}//當(dāng)溫度值小于-55時不再下調(diào) ??if(a==2){if(count〉55)count=55;} ?} } while(key2==0);? ? //K2松開按鍵時消抖 ?keyscan_delay(10); }?if(key3==0) {?if(v2==0)beer=0;? keyscan_delay(10);??if(key3==0) ? ?//K3按按鍵時消抖 { ?beer=1; count——;? ??//每按一下K3溫度為正時下調(diào)1,為負時上調(diào)1? if(a==1){if(count〈0)count=0;}//當(dāng)溫度值達到0時不再調(diào) ??if(a==2){if(count〈0)count=0;} ?} ?while(key3==0); keyscan_delay(10); ??//K3松開按鍵時消抖 ?} returncount;}/******************************************************//*?? ? ? 讀鍵盤函數(shù) ? ?? ?//*****************************************************/voidkeyscan(){ ?if(key1==0)?{?if(v2==0)beer=0; ?keyscan_delay(10); ?if(key1==0)? ???//K1按按鍵時消抖 {??beer=1;??TR1=1; ??//開定時器1,通過s標志位的變化,實現(xiàn)在上下限溫度調(diào)整時溫度顯示時閃爍的功能 ?? k4=1; ?? //在上下溫度調(diào)節(jié)功能模式下選擇K4的調(diào)整上下限溫度正負的功能??v=1;? ? //在上下溫度調(diào)節(jié)功能模式下選擇K2、K3的溫度加減功能 i++; ?? ??//K1按一下i加1,i=‘0'進入正常模式,i=‘1’進入調(diào)上限模式,i=‘2’進入調(diào)下限模式? if(i>2)? ?? //K1按下三次后退出調(diào)節(jié)模式 ?{??i=0;? ???//進入正常模式 ??TR1=0; ?? //關(guān)定時器1???k4=0;? ? //在正常模式下選擇K4的消按鍵音功能???v=0;?? ??//在正常模式下選擇K2、K3的查看上下限報警溫度功能 ?store_t();? ?//存儲調(diào)整后的上下限報警溫度??}? switch(i)?? ?//顯示選擇 ?{ ?case0:a=0;break; //a=0選擇顯示測得的溫度 ?case1:a=1;break;//a=1選擇顯示上限溫度? case2:a=2;break;//a=2選擇顯示下限溫度 ???? default:break; ?}?? }? while(key1==0);? ?//K1松按鍵時消抖? keyscan_delay(10); ?} if(a==1&&v==1) ??? //a=1選擇顯示上限溫度且v=1時選擇上下限溫度加功能?{led=0;max=temp_change(max,f_max);}//顯示上限溫度 elseif(a==2&&v==1)?? //a=2選擇顯示下限溫度且v=1時選擇上下限溫度減功能?{led=1;min=temp_change(min,f_min);} else;?if(k4==1)?? ? ?//k4=1時K4按鍵選擇正負溫度設(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è)定為正溫度? ?if(a==2)?? {if(min〉55)f_max=0;elsef_min=~f_min;}//當(dāng)溫度大于55度時,只能設(shè)定為正溫度 ?? ?}? ?while(key4==0); keyscan_delay(10);??} } if(v==0)?? ???//v=0時選擇上下限查看功能 {??if(key2==0) {??if(v2==0)beer=0;? keyscan_delay(10); ? if(key2==0)? { ??beer=1; ? a=1;? ???//選擇上限顯示 ??TR1=1; ? //開定時器1開始定時一分鐘左右? s1=1;? ? //上限顯示不閃爍,顯示一分鐘左右自動退出 ?} ? 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; ?? //開定時器1開始定時1s?? s1=1;??? //下限顯示不閃爍,顯示1s自動退出? ? ? }?? while(key3==0);? keyscan_delay(10); ? ?} ?if(v1==1) ? ?//v1=1時定時1s時間到自動關(guān)閉報警上下限查看功能??{a=0;v1=0;TR1=0;}??//a=0顯示實測溫度,v1清零,關(guān)定時器1??if(k4==0) ? //k4=0時K4按鍵選擇消按鍵音的功能? { ? ? if(key4==0) ??{ if(v2==0)beer=0; ???keyscan_delay(10);? ??if(key4==0) ? ?{??? beer=1; ? ?v2=~v2;? //為‘0’時開按鍵音,為‘1'時關(guān)按鍵音? ? ? }? ? while(key4==0);??? keyscan_delay(10);? } ? ?}?}}#endif/***********************************************************************程序名;ds18b20數(shù)碼管動態(tài)顯示頭文件*功能:通過定時器0延時是數(shù)碼管動態(tài)顯示*編程者:彭明闖*編程時間:2014/5/30**********************************************************************/#ifndef__ds18b20_display_H__ #define__ds18b20_display_H__#defineuintunsignedint ?//變量類型宏定義,用uint表示無符號整形(16位)#defineucharunsignedchar ? //變量類型宏定義,用uchar表示無符號字符型(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為全局無符號字符型變量,賦初值為‘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ù)點的0~9.ucharcodetemperature3[]={0x00,0x80,0x40,0x7
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit 9 What's your hobby 說課稿(說課稿)-2024-2025學(xué)年湘少版(三起)英語五年級上冊
- Unit 3 What Would you like(說課稿)-2024-2025學(xué)年人教PEP版英語五年級上冊
- 2023九年級數(shù)學(xué)上冊 第六章 反比例函數(shù)1 反比例函數(shù)說課稿 (新版)北師大版
- 10《爬山虎的腳》說課稿-2024-2025學(xué)年語文四年級上冊統(tǒng)編版
- 2023三年級英語下冊 Unit 2 Animals at the Zoo Lesson 8 Tigers and Bears說課稿 冀教版(三起)
- 2025民間個人借款合同書范文
- 2024-2025學(xué)年高一歷史第13周 6.2卓爾不群的雅典說課稿
- 2025常年法律顧問合同
- 19《一只窩囊的大老虎》第二課時(說課稿)-2024-2025學(xué)年統(tǒng)編版語文四年級上冊001
- 2025獨家經(jīng)銷合同范本
- 2024年全國職業(yè)院校技能大賽(礦井災(zāi)害應(yīng)急救援賽項)考試題庫(含答案)
- 2025江蘇南京市金陵飯店股份限公司招聘高頻重點提升(共500題)附帶答案詳解
- 公共政策分析 課件匯 陳振明 第0-9章 導(dǎo)論、緒論:政策科學(xué)的“研究綱領(lǐng)”- 政策監(jiān)控
- 2025年牛津譯林版英語七年級下冊全冊單元重點知識點與語法匯編
- 《小學(xué)作文指導(dǎo)》課件
- 小學(xué)六年級數(shù)學(xué)方程應(yīng)用題100道及答案解析
- 2025新譯林版英語七年級下單詞表
- 海洋工程設(shè)備保溫保冷方案
- 文藝演出排練指導(dǎo)服務(wù)合同
- 人教版(2024新版)一年級上冊數(shù)學(xué)第一單元《數(shù)學(xué)游戲》單元整體教學(xué)設(shè)計
- 魏寧海超買超賣指標公式
評論
0/150
提交評論