下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、數(shù)字溫度計(jì)實(shí)驗(yàn)報(bào)告一, 實(shí)驗(yàn)?zāi)康?. 學(xué)習(xí)80C52單片機(jī)的內(nèi)部的定時(shí)器及各接口的功能及應(yīng)用。 2. 設(shè)計(jì)任務(wù)及要求利用實(shí)驗(yàn)平臺上LED數(shù)碼管和蜂鳴器設(shè)計(jì)具有最低、最高溫度查詢,實(shí)時(shí)顯示和報(bào)警功能的數(shù)字溫度器。二,實(shí)驗(yàn)要求 基本要求:1:能夠?qū)崟r(shí)顯示環(huán)境溫度。2:能夠保存使用時(shí)間內(nèi)的最大值和最小值,能夠查閱。3:有溫度報(bào)警功能,能夠設(shè)置報(bào)警溫度。用綠燈表示正常溫度,紅燈表示報(bào)警同時(shí)發(fā)聲。擴(kuò)展功能:查詢最低和最高溫度時(shí),指示燈藍(lán)燈和黃燈分別表示當(dāng)前先顯示的是高溫還是低溫。三,實(shí)驗(yàn)基本原理利用單片機(jī)定時(shí)器完成報(bào)警檢測功能。每隔一段時(shí)間定時(shí)器0對當(dāng)前溫度值進(jìn)行檢測,當(dāng)超過設(shè)定溫度30度時(shí)紅燈亮并發(fā)生
2、報(bào)警。為了將時(shí)間在LED數(shù)碼管上顯示當(dāng)前溫度,采用動態(tài)顯示法,由于靜態(tài)顯示法需要譯碼器,數(shù)據(jù)鎖存器等較多硬件,可采用動態(tài)顯示法實(shí)現(xiàn)LED顯示,通過對每位數(shù)碼管的依次掃描,使對應(yīng)數(shù)碼管亮,同時(shí)向該數(shù)碼管送對應(yīng)的字碼,使其顯示數(shù)字。由于數(shù)碼管掃描周期很短,由于人眼的視覺暫留效應(yīng),使數(shù)碼管看起來總是亮的,從而實(shí)現(xiàn)了各種顯示。該設(shè)計(jì)采用四按鍵輸入,當(dāng)按鍵1(2)按下,可分別查看當(dāng)前最低(最高)溫度。四,實(shí)驗(yàn)設(shè)計(jì)分析針對要實(shí)現(xiàn)的功能,采用AT89S52單片機(jī)和ds18b20溫度傳感器進(jìn)行設(shè)計(jì),AT89S52 單片機(jī)是一款低功耗,高性能CMOS8位單片機(jī),它有以下特點(diǎn):1、擁有靈巧的8位CPU和在系統(tǒng)可編
3、程Flash2、晶片內(nèi)部具時(shí)鐘振蕩器(傳統(tǒng)最高工作頻率可至 12MHz)3、內(nèi)部程序存儲器(ROM)為 8KB4、內(nèi)部數(shù)據(jù)存儲器(RAM)為 256字節(jié)5、32 個(gè)可編程I/O 口線6、8 個(gè)中斷向量源7、三個(gè) 16 位定時(shí)器/計(jì)數(shù)器8、三級加密程序存儲器9、全雙工UART串行通道Ds18b20管腳圖為:ds18b20管腳圖DS18B20的引腳功能:DQ為數(shù)字信號輸入/輸出端;GND為電源地;VDD為外接供電電源輸入端(在寄生電源接線方式時(shí)接地。它具有如下特點(diǎn):(1)獨(dú)特的單線接口方式:DS18B20與微處理器連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通訊。 (2)在使用中不需
4、要任何外圍元件。 (3)可用數(shù)據(jù)線供電,電壓范圍:+3.0 +5.5 V。 (4)測溫范圍:-55 +125 。固有測溫分辨率為0.5 。 (5)通過編程可實(shí)現(xiàn)912位的數(shù)字讀數(shù)方式。 (6)用戶可自設(shè)定非易失性的報(bào)警上下限值。 (7)支持多點(diǎn)組網(wǎng)功能,多個(gè)DS18B20可以并聯(lián)在惟一的三線上,實(shí)現(xiàn)多點(diǎn)測溫。(8)負(fù)壓特性,電源極性接反時(shí),溫度計(jì)不會因發(fā)熱而燒毀,但不能正常工作。在程序方面,采用分塊設(shè)計(jì)的方法,這樣既減小了編程難度、使程序易于理解,又能便于添加各項(xiàng)功能。程序可分為溫度獲取程序,中斷程序,顯示程序,延時(shí)程序等。運(yùn)用這種方法,關(guān)鍵在于各模塊的兼容和配合,若各模塊不匹配會出現(xiàn)意想不到
5、的錯(cuò)誤。首先,在編程之前必須了解硬件結(jié)構(gòu)尤其是各引腳的用法,以及內(nèi)部寄存器、存儲單元的用法,否則,編程無從下手,電路也無法設(shè)計(jì)。這是前期準(zhǔn)備工作。第二部分是硬件部分:依據(jù)想要的功能分塊設(shè)計(jì)設(shè)計(jì),比如輸入需要開關(guān)電路,輸出需要蜂鳴器,led燈和數(shù)碼管電路等。第三部分是軟件部分:先學(xué)習(xí)理解匯編語言的編程方法再根據(jù)設(shè)計(jì)的硬件電路進(jìn)行分塊的編程調(diào)試,最終完成程序設(shè)計(jì)。第四部分是軟件畫圖部分:設(shè)計(jì)好電路后進(jìn)行畫圖,包括電路圖和仿真圖的繪制。第五部分是軟件仿真部分:軟硬件設(shè)計(jì)好后將軟件載入芯片中進(jìn)行仿真,仿真無法完成時(shí)檢查軟件程序和硬件電路并進(jìn)行修改直到仿真成功。第六部分是硬件實(shí)現(xiàn)部分:連接電路并導(dǎo)入程序
6、檢查電路,若與設(shè)計(jì)的完全一樣一般能實(shí)現(xiàn)想要的功能。最后進(jìn)行功能擴(kuò)展,在已經(jīng)正確的設(shè)計(jì)基礎(chǔ)上,添加額外的功能!五,實(shí)驗(yàn)要求實(shí)現(xiàn)A.電路設(shè)計(jì)1. 整體設(shè)計(jì)此次設(shè)計(jì)主要是應(yīng)用單片機(jī)來設(shè)計(jì)數(shù)字溫度計(jì),硬件部分主要分以下電路模塊:輸出電路用8個(gè)共陰數(shù)碼管、四個(gè)led燈和蜂鳴器顯示,鍵盤進(jìn)行溫度設(shè)置報(bào)警溫度。電路的總體設(shè)計(jì)框架如下:單片機(jī)輸入部分晶振和復(fù)位輸出部分2. 分塊設(shè)計(jì)模塊電路主要分為:輸入部分、輸出部分、及溫度讀取電路。2.1 輸入部分輸入部分外電路輸入部分主要用于查詢當(dāng)前最低和最高溫度。KEY1KEY2分別控制最低和最高溫度的顯示。2.2 輸出部分輸出部分本電路的輸出信號為7段數(shù)碼管的位選和段
7、選信號,蜂鳴器信號,提示燈信號。本實(shí)驗(yàn)的數(shù)碼管是共陰的,為了防止段選信號不能驅(qū)動數(shù)碼管,故在P1口連接上拉電阻后,再送段選信號,以提高驅(qū)動,位選信號直接從P2口接入。程序?qū)@得的溫度實(shí)時(shí)地顯示在數(shù)碼管上;當(dāng)溫度超過設(shè)定的數(shù)值時(shí),紅燈亮,蜂鳴器響。當(dāng)查詢最低溫度時(shí),藍(lán)燈亮,最高溫度時(shí)綠燈亮。晶振與復(fù)位電路本實(shí)驗(yàn)單片機(jī)時(shí)鐘用內(nèi)部時(shí)鐘,模塊如下:溫度檢測模塊:DQ接P1.0,用于單總線傳送。溫度讀取模塊主程序如下:sendChangeCmd(); tempValue1 = getTmpValue(); temp = abs(tempValue1); tempL=(tempL temp ? temp
8、:tempL ); tempH=(tempH 3000)while(k-)beeping(); /beep=0; led=0;else led=1;beep=1;display();TH0=th0; TL0=tl0; 各模塊拼接組合,電路總體設(shè)計(jì)圖如下:B.程序設(shè)計(jì)B.1 程序主要模塊中斷服務(wù)程序void timer0() interrupt 1 /中斷,溫度高于3000,就報(bào)警int k=30;if(temp3000)while(k-)beeping(); /beep=0; led=0;else led=1;beep=1;display();TH0=th0; TL0=tl0; B.2主程序定
9、時(shí)器初始化 溫度轉(zhuǎn)換啟動 主循環(huán)(溫度轉(zhuǎn)換-溫度處理報(bào)警檢測) void main()/dio=0;Init_timer0();/*dispbuf5=0xf;dispbuf4=0xf;dispbuf3=0xf;dispbuf2=0;dispbuf1=0;dispbuf0=0;*/ sendChangeCmd(); tempValue1 = getTmpValue(); temp = abs(tempValue1); tempL=temp; tempH=temp; KEY5=0;while(1) uint j=200,k=1000;/啟動溫度轉(zhuǎn)換 sendChangeCmd(); tempVal
10、ue1 = getTmpValue(); temp = abs(tempValue1);/ if(temp10000)while(k-)beeping(); /beep=0;/led=0;/ /temp=getTmpValue(); tempL=(tempL temp ? temp :tempL ); tempH=(tempH temp ? temp :tempH ); if(KEY1=0)temp= tempL; test1=0; EA=0; while(j-)display();EA=1; if(KEY2=0) temp= tempH; test2=0; EA=0; while(j-)di
11、splay(); EA=1; B.3顯示子程序8個(gè)數(shù)碼管輪流進(jìn)行顯示,分別顯示1ms,依賴人的視覺 暫留效應(yīng),給人以數(shù)碼管持續(xù)高亮的錯(cuò)覺。該段程序如下:void display() uchar tmp;uchar tmp1;staticuchar count;P3=0XFF;tmp=dispbitcount;tmp1=tmp;P3&=tmp;/we=0;/WEI操作/du=1;/duan操做tmp=dispbuf5-count;if(tmp1=0xf7)tmp=disptabwithdottmp;elsetmp=disptabtmp;P0=tmp;count+;if(count=6)count
12、=0;/unsigned int temp = abs(tempValue); dispbuf0 = temp/ 10000; dispbuf1 = temp % 10000 / 1000; dispbuf2 =temp % 1000 / 100; dispbuf3 = temp % 100 / 10; dispbuf4 = temp % 10; / TH0=th0;/TL0=tl0; 程序調(diào)試本程序通過Keil單片機(jī)開發(fā)平臺實(shí)現(xiàn)程序的編譯,鏈接,生成HEX文件。程序再編譯過程中可以發(fā)現(xiàn)錯(cuò)位,并及時(shí)改正,在設(shè)計(jì)時(shí)非常重要,使錯(cuò)誤被扼殺在搖籃中。通過Keil和硬件仿真平臺Proteus的聯(lián)合,可
13、以將設(shè)計(jì)效果仿真出來,根據(jù)效果,有目的的改變設(shè)計(jì),優(yōu)化程序。c. 利用Keil軟件實(shí)驗(yàn)過程截圖:c.1匯編程序,并生成HEX文件c.2 利用下載線將文件調(diào)入電路板調(diào)試,運(yùn)行結(jié)果如下: 下圖為溫度實(shí)時(shí)顯示結(jié)果:下圖為溫度報(bào)警結(jié)果:D電路板連接實(shí)現(xiàn)通過軟,硬件設(shè)計(jì)和仿真,基本上實(shí)現(xiàn)了自己想要的功能,就可以真刀真槍的干一場了。軟件通過調(diào)試基本上是沒問題的,但是硬件仿真過于泛泛,對電路的細(xì)節(jié)要求不是那么高,有些問題是不能發(fā)現(xiàn)的,最后的實(shí)現(xiàn)效果還是要用實(shí)物來驗(yàn)證的。元器件的購買是個(gè)苦活,雖然中發(fā)市場那么大,但那些元件才是我要的那個(gè)它呢?我們購買的量少,對于那些元器件廠家來說,根本不屑做我們的生意,根本不
14、用說砍價(jià)了。經(jīng)過一番“跋涉”,終于搜刮齊了元器件。根據(jù)以往經(jīng)驗(yàn),焊接電路的布線非常重要,首先要在電路板上將線的大致走向規(guī)劃好,如何美觀,精簡是要領(lǐng)。一下是本次試驗(yàn)的硬件電路實(shí)現(xiàn)五.實(shí)驗(yàn)總結(jié)及感想通過這幾周的軟、硬件設(shè)計(jì),不僅加深了我們對理論知識的理解,培養(yǎng)了我們的實(shí)踐動手能力,還鍛煉了我們遇到問題解決問題的能力。從開始接到任務(wù)時(shí)的無從下手,到小組成員各司其職,搜集資料,學(xué)習(xí)新知識,相互討論,分析交流,解決好問題的這個(gè)過程本身就是對我們的鍛煉。此次設(shè)計(jì)課不同于一般理論課的地方就在于要求我們的并非只是單純的懂得理論知識,更重要的是小組成員間的團(tuán)結(jié)協(xié)作精神以及將理論知識用于實(shí)踐的能力,由于在實(shí)際中,
15、存在各種各樣的因素,即使我們有著正確的原理圖、軟件程序等也不一定能得出正確的結(jié)果,正如調(diào)試時(shí)產(chǎn)生的問題一樣,這就需要我們有耐心去分析各種可能存在因素以達(dá)到解決問題的最終目的,當(dāng)然這其中肯定少不了老師的指導(dǎo)和幫助 。這次真得要感謝我們組組長和小組成員,幾周以來,我們共同度過了很多困難的時(shí)光,也共同收獲了很多。通過這次課程設(shè)計(jì)我們學(xué)到了很多東西,培養(yǎng)了我們的自學(xué)能力,接受新事物的心態(tài),以及遇到問題時(shí)戒驕戒躁的良好心態(tài)和虛心向同學(xué)、老師請教自己不會的問題,更重要的是小組成員間的團(tuán)結(jié)協(xié)作,相互鼓勵,做好分配給自己的任務(wù),用心做每一件事而非應(yīng)付過關(guān)的消極態(tài)度。從最初的連線到最終程序的不斷,排錯(cuò),改進(jìn),大
16、家的能力真得提高了不少??傊?,此次設(shè)計(jì)課使我們受益匪淺。附:總程序#include#include /要用到取絕對值函數(shù)abs()#define uchar unsigned char #define uint unsigned intsbit KEY1=P24;sbit KEY2=P25;sbit KEY3=P26;sbit KEY4=P27;sbit KEY5=P23;sbit test1=P36;sbit test2=P37;sbit beep=P15;sbit led=P12;/sbit du=P26; /sbit dio=P25;sbit ds=P10;/sbit ds=P22;in
17、t tempValue1;unsigned int temp;unsigned int tempH;unsigned int tempL;uchar code th0=(65535-3000)/256;uchar code tl0=(65535-3000)%256;uchar dispbuf6;uchar code disptab=0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x0;uchar code disptabwithdot=0xbf,0x86,0xdb,0xcf,0xe6
18、,0xed,0xfd,0xa7,0xff,0xef,0xf7,0xfc,0xb9,0xf9,0xf1;uchar code dispbit=0xfe,0xfd,0xfb,0xf7,0xef,0xdf;/1111 1110,1111 1101,1111 1011,1111 0111,1110 1111,1101 1111;/延時(shí)函數(shù), 對于11.0592MHz時(shí)鐘, 例i=10,則大概延時(shí)10ms.void display();void beeping(); void delay(unsigned int i) unsigned int j; while(i-) for(j = 0; j 0)
19、i-; ds = 1; /產(chǎn)生一個(gè)上升沿, 進(jìn)入等待應(yīng)答狀態(tài) i = 4; while(i0) i-; void dsWait() unsigned int i; while(ds); while(ds); /檢測到應(yīng)答脈沖 i = 4; while(i 0) i-;/向DS18B20讀取一位數(shù)據(jù)/讀一位, 讓DS18B20一小周期低電平, 然后兩小周期高電平,/之后DS18B20則會輸出持續(xù)一段時(shí)間的一位數(shù)據(jù)bit readBit()/讀0時(shí)序 unsigned int i; bit b; ds = 0; i+; /延時(shí)約8us, 符合協(xié)議要求至少保持1us ds = 1; i+; i+;
20、/延時(shí)約16us, 符合協(xié)議要求的至少延時(shí)15us以上 b = ds; i = 8; while(i0) i-; /延時(shí)約64us, 符合讀時(shí)隙不低于60us要求 return b;/讀取一字節(jié)數(shù)據(jù), 通過調(diào)用readBit()來實(shí)現(xiàn)unsigned char readByte() unsigned int i; unsigned char j, dat; dat = 0; for(i=0; i8; i+) j = readBit(); /最先讀出的是最低位數(shù)據(jù) dat = (j 1);/先把數(shù)據(jù)放在高位,然后再移到低位 return dat;/向DS18B20寫入一字節(jié)數(shù)據(jù)void writ
21、eByte(unsigned char dat) unsigned int i; unsigned char j; bit b; for(j = 0; j = 1; /寫1, 將DQ拉低15us后, 在15us60us內(nèi)將DQ拉高, 即完成寫1 if(b) ds = 0; i+; i+; /拉低約16us, 符號要求1560us內(nèi) ds = 1; i = 8; while(i0) i-; /延時(shí)約64us, 符合寫時(shí)隙不低于60us要求 else /寫0, 將DQ拉低60us120us ds = 0; i = 8; while(i0) i-; /拉低約64us, 符號要求 ds = 1; i+
22、; i+; /整個(gè)寫0時(shí)隙過程已經(jīng)超過60us, 這里就不用像寫1那樣, 再延時(shí)64us了 /向DS18B20發(fā)送溫度轉(zhuǎn)換命令void sendChangeCmd() dsInit(); /初始化DS18B20, 無論什么命令, 首先都要發(fā)起初始化 dsWait(); /等待DS18B20應(yīng)答 delay(1); /延時(shí)1ms, 因?yàn)镈S18B20會拉低DQ 60240us作為應(yīng)答信號 writeByte(0xcc); /寫入跳過序列號命令字 Skip Rom writeByte(0x44); /寫入溫度轉(zhuǎn)換命令字 Convert T/向DS18B20發(fā)送讀取數(shù)據(jù)命令void sendRead
23、Cmd()EA=0;/關(guān)閉中斷是因?yàn)檫M(jìn)入顯示中斷會影響到DS18B20的讀寫時(shí)序 dsInit(); dsWait(); delay(1); writeByte(0xcc); /寫入跳過序列號命令字 Skip Rom writeByte(0xbe); /寫入讀取數(shù)據(jù)令字 Read ScratchpadEA=1;/獲取當(dāng)前溫度值int getTmpValue() unsigned int tmpvalue; int value; /存放溫度數(shù)值 float t; unsigned char low, high;EA=0; sendReadCmd(); /連續(xù)讀取兩個(gè)字節(jié)數(shù)據(jù) low = read
24、Byte(); high = readByte(); /將高低兩個(gè)字節(jié)合成一個(gè)整形變量 /計(jì)算機(jī)中對于負(fù)數(shù)是利用補(bǔ)碼來表示的 /若是負(fù)值, 讀取出來的數(shù)值是用補(bǔ)碼表示的, 可直接賦值給int型的value tmpvalue = high; tmpvalue 0 ? 0.5 : -0.5); /大于0加0.5, 小于0減0.5 return value;EA=1;void Init_timer0()TMOD=0x01;TH0=th0;TL0=tl0;EA=1;ET0=1;TR0=1; void timer0() interrupt 1int k=30;if(temp3000)while(k-)b
25、eeping(); /beep=0; led=0;else led=1;beep=1;display();TH0=th0; TL0=tl0; void display() uchar tmp;uchar tmp1;staticuchar count;P3=0XFF;tmp=dispbitcount;tmp1=tmp;P3&=tmp;/we=0;/WEI操作/du=1;/duan操做tmp=dispbuf5-count;if(tmp1=0xf7)tmp=disptabwithdottmp;elsetmp=disptabtmp;P0=tmp;count+;if(count=6)count=0;/unsigned int temp = abs(tempValue); dispbuf0 = temp/ 10000; di
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年武漢市硚口區(qū)某公立初中招聘初中數(shù)學(xué)教師備考題庫及答案詳解1套
- 277人浙江中醫(yī)藥大學(xué)臨床醫(yī)學(xué)院及直屬附屬醫(yī)院公開招聘人員備考題庫(2026年第一批)及答案詳解參考
- 2026年深圳市龍崗區(qū)衛(wèi)生健康局下屬事業(yè)單位招聘9人備考題庫及答案詳解1套
- 企業(yè)設(shè)備維護(hù)與保養(yǎng)制度
- 中央團(tuán)校(中國青年政治學(xué)院)2026年度高校畢業(yè)生公開招聘9人備考題庫及答案詳解1套
- 2026年皮山縣人民醫(yī)院招聘備考題庫及參考答案詳解
- 養(yǎng)老院入住退住規(guī)定制度
- 2026年漳州市龍文區(qū)碧湖街道社區(qū)衛(wèi)生服務(wù)中心公開招聘工作人員工作備考題庫及答案詳解參考
- 企業(yè)員工培訓(xùn)與素質(zhì)發(fā)展目標(biāo)路徑制度
- 企業(yè)內(nèi)部保密責(zé)任制度
- 鄉(xiāng)鎮(zhèn)建筑垃圾管理辦法
- 試訓(xùn)隊(duì)員合同協(xié)議
- 拍攝合作協(xié)議書范本
- 國家開放大學(xué)漢語言文學(xué)本科《古代小說戲曲專題》期末紙質(zhì)考試第四大題論述題庫2025春期版
- 環(huán)境衛(wèi)生學(xué)EnvironmentalHygiene10課件
- 橋架安裝承包合同
- 12D101-5 110KV及以下電纜敷設(shè)
- 直腸陰道瘺診療指南的更新
- DL-T5434-2021電力建設(shè)工程監(jiān)理規(guī)范
- 居住權(quán)協(xié)議書
- 病案管理考核標(biāo)準(zhǔn)表格2022版
評論
0/150
提交評論