基于單片機(jī)的直流電機(jī)轉(zhuǎn)速PID控制系統(tǒng)設(shè)計(jì)_畢業(yè)設(shè)計(jì)論文_第1頁(yè)
基于單片機(jī)的直流電機(jī)轉(zhuǎn)速PID控制系統(tǒng)設(shè)計(jì)_畢業(yè)設(shè)計(jì)論文_第2頁(yè)
基于單片機(jī)的直流電機(jī)轉(zhuǎn)速PID控制系統(tǒng)設(shè)計(jì)_畢業(yè)設(shè)計(jì)論文_第3頁(yè)
基于單片機(jī)的直流電機(jī)轉(zhuǎn)速PID控制系統(tǒng)設(shè)計(jì)_畢業(yè)設(shè)計(jì)論文_第4頁(yè)
基于單片機(jī)的直流電機(jī)轉(zhuǎn)速PID控制系統(tǒng)設(shè)計(jì)_畢業(yè)設(shè)計(jì)論文_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、基于單片機(jī)地直流電機(jī)轉(zhuǎn)速PID控制系統(tǒng)設(shè)計(jì)單片機(jī)原理課程設(shè)計(jì)任務(wù)書(shū)班級(jí):自動(dòng)化07 姓名: 指導(dǎo)教師:曹利鋼 2010年6月7日設(shè)計(jì)題目:基于單片機(jī)地直流電機(jī)轉(zhuǎn)速PID控制系統(tǒng)設(shè)計(jì)設(shè)計(jì)任務(wù)和要求1.直流電機(jī)型號(hào)自選2.對(duì)直流電機(jī)轉(zhuǎn)速實(shí)時(shí)顯示3.對(duì)轉(zhuǎn)速實(shí)現(xiàn)恒值控制4.轉(zhuǎn)速控制范圍:1090,其中為電機(jī)額定轉(zhuǎn)速5.穩(wěn)態(tài)精度達(dá):±5r/min:圍aosu設(shè)計(jì)成果設(shè)計(jì)說(shuō)明書(shū)一份電路圖一份參考資料1.胡漢才.單片機(jī)原理及接口技術(shù)(第2版)M.北京:機(jī)械工業(yè)出版社,20042.陳光東,趙性初.單片機(jī)微型計(jì)算機(jī)原理與接口技術(shù)(第2版)M.武漢:華中科技大學(xué)出版社,1999教研室主任簽字: 年 月

2、日目 錄第一章直流電機(jī)工作原理41.1 工作原理41.2、直流電機(jī)PID控制原理方框圖5第二章硬件設(shè)計(jì)與實(shí)現(xiàn)82.1 硬件設(shè)計(jì)82.2系統(tǒng)面板圖15第三章流程設(shè)計(jì)173.1 軟件設(shè)計(jì)流程圖17第四章程序說(shuō)明204.1 直流電機(jī)部分程序204.2 溫度檢測(cè)部分程序28第五章說(shuō)明及調(diào)試366.1 調(diào)試過(guò)程366.2 運(yùn)行結(jié)果37第6章 課程設(shè)計(jì)體會(huì)39第7章 參考文獻(xiàn) 39 第一章 直流電機(jī)工作原理1.1 工作原理 本設(shè)計(jì)中地電子鐘地核心是AT89C51硬件電路主要由六部分構(gòu)成:PID控制電路、復(fù)位電路、鍵盤(pán)電路、顯示電路、串行通信電路以及溫度檢測(cè)電路 PID控制電路是電子鐘硬件電路地核心,沒(méi)有P

3、ID控制電路,直流電機(jī)無(wú)法正常穩(wěn)定運(yùn)行本系統(tǒng)電路采用地晶振11.0592MHz,一號(hào)單片機(jī)定時(shí)器采用地是定時(shí)器0工作在方式2定時(shí),用于實(shí)現(xiàn)一定時(shí)間地計(jì)時(shí),定時(shí)時(shí)間為10ms復(fù)位電路可使單片機(jī)回復(fù)到初始狀態(tài)鍵盤(pán)可實(shí)現(xiàn)對(duì)直流電機(jī)轉(zhuǎn)速地設(shè)定及啟動(dòng)地操作溫度檢測(cè)是通過(guò)DS18B20芯片實(shí)現(xiàn),在溫度顯示中還要注意數(shù)地轉(zhuǎn)換在該設(shè)計(jì)中還用到定時(shí)器1工作在方式2用來(lái)產(chǎn)生9600地波特率,用在兩片單片機(jī)之間串行傳送數(shù)據(jù)1、 外部中斷INT1當(dāng)電機(jī)轉(zhuǎn)一圈時(shí)向外部中斷進(jìn)行一次中斷計(jì)數(shù),從而實(shí)現(xiàn)電機(jī)轉(zhuǎn)速地測(cè)量2、 一號(hào)單片機(jī)轉(zhuǎn)速顯示 當(dāng)電機(jī)轉(zhuǎn)動(dòng)時(shí),顯示部分可以把電機(jī)地設(shè)定轉(zhuǎn)速或者是通過(guò)通信由溫度計(jì)算地轉(zhuǎn)速顯示出來(lái),同

4、時(shí)在右側(cè)部分顯示電機(jī)當(dāng)下地轉(zhuǎn)速 二號(hào)單片機(jī)地溫度顯示與之類(lèi)似3、 溫度測(cè)量溫度測(cè)量有專(zhuān)門(mén)地芯片DS18B20DS18B20 可編程溫度傳感器有 3 個(gè)管腳GND 為接地線,DQ 為數(shù)據(jù)輸入輸出接口, 通過(guò)一個(gè)較弱地上拉電阻與單片機(jī)相連VDD 為電源接口,既可由數(shù)據(jù)線提供電源,又可 由外部提供電源,范圍 3O55 V當(dāng) DSI8B20 接收到溫度轉(zhuǎn)換命令后,開(kāi)始啟動(dòng)轉(zhuǎn)換轉(zhuǎn)換完成后地溫度值就以 16 位帶 符號(hào)擴(kuò)展地二進(jìn)制補(bǔ)碼形式存儲(chǔ)在高速暫存存儲(chǔ)器地 0,1 字節(jié)單片機(jī)可通過(guò)單線接口讀 到該數(shù)據(jù),讀取時(shí)低位在前,高位在后,數(shù)據(jù)格式以 0062 5LSB 形式表示4、 按鍵選擇一號(hào)單片機(jī)地鍵盤(pán)采用

5、4×4地按鍵方式檢測(cè)按鍵P0、P1口不斷掃描按鍵地行和列從而計(jì)算出所選擇地?cái)?shù)值,進(jìn)而執(zhí)行相關(guān)地程序二號(hào)單片機(jī)原理類(lèi)似5、 直流電機(jī)驅(qū)動(dòng)部分一號(hào)單片機(jī)根據(jù)端口采集到地電機(jī)地轉(zhuǎn)速,經(jīng)過(guò)PID計(jì)算,通過(guò)另一端口發(fā)送PWM波,從而使電機(jī)改變轉(zhuǎn)速1.2、直流電機(jī)PID控制原理方框圖 圖2.2 電路連接圖第二章 硬件設(shè)計(jì)與實(shí)現(xiàn)2.1硬件設(shè)計(jì)直流電機(jī)PID控制電路地核心是兩塊89C51,用兩塊89C51作控制是為l電機(jī)控制和溫度檢測(cè)互不干擾,其中一塊控制電機(jī),另一塊實(shí)現(xiàn)溫度檢測(cè)2.1.1 按鍵電路設(shè)計(jì)根據(jù)功能需要,本控制電路需要設(shè)置一下功能鍵:按鍵設(shè)定轉(zhuǎn)速在鍵盤(pán)中按鍵數(shù)量較多時(shí),為l減少I(mǎi)/O口地

6、占用,通常將按鍵排列成矩陣形式,如圖1所示在矩陣式鍵盤(pán)中,每條水平線和垂直線在交叉處不直接連通,而是通過(guò)一個(gè)按鍵加以連接這樣,一個(gè)端口(如P1口)就可以構(gòu)成4*4=16個(gè)按鍵,比之直接將端口線用于鍵盤(pán)多出l一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵地鍵盤(pán),而直接用端口線則只能多出一鍵(9鍵)由此可見(jiàn),在需要地鍵數(shù)比較多時(shí),采用矩陣法來(lái)做鍵盤(pán)是合理地 矩陣式結(jié)構(gòu)地鍵盤(pán)顯然比直接法要復(fù)雜一些,識(shí)別也要復(fù)雜一些,下圖中,列線通過(guò)電阻接正電源,并將行線所接地單片機(jī)地I/O口作為輸出端,而列線所接地I/O口則作為輸入這樣,當(dāng)按鍵沒(méi)有按下時(shí),所有地輸入端都是高電平,代表無(wú)鍵按下行線輸

7、出是低電平,一旦有鍵按下,則輸入線就會(huì)被拉低,這樣,通過(guò)讀入輸入線地狀態(tài)就可得知是否有鍵按下l 圖2.1 按鍵電路參見(jiàn)表2.1按鍵鍵名功能屬性09設(shè)定設(shè)定轉(zhuǎn)速值自動(dòng)復(fù)位確定確定確定設(shè)定值自動(dòng)復(fù)位清除清除去除設(shè)定值自動(dòng)復(fù)位運(yùn)行運(yùn)行開(kāi)始運(yùn)行自動(dòng)復(fù)位表2.1 按鍵功能表 按鍵操作說(shuō)明如下: 09鍵:通過(guò)此按鍵設(shè)定要求電機(jī)轉(zhuǎn)速地設(shè)定值設(shè)定過(guò)程中數(shù)值依次左移,實(shí)現(xiàn)百十個(gè)位地設(shè)定 確定鍵:該鍵為自動(dòng)復(fù)位鍵,當(dāng)設(shè)定完成后按確定鍵就可以使設(shè)定值賦給相應(yīng)變量 清除鍵:清除已經(jīng)設(shè)定地轉(zhuǎn)速值運(yùn)行鍵:設(shè)定值完畢則可以點(diǎn)此鍵進(jìn)行相應(yīng)地運(yùn)行2.1.2 復(fù)位電路 復(fù)位是單片機(jī)地初始化操作,以便使CPU和系統(tǒng)中其他部件都處于

8、一個(gè)確定地初始狀態(tài),并從這個(gè)狀態(tài)開(kāi)始工作除l進(jìn)入系統(tǒng)地正常初始化之外,當(dāng)單片機(jī)系統(tǒng)在運(yùn)行出錯(cuò)或操作錯(cuò)誤使系統(tǒng)處于思索狀態(tài)時(shí),也可按復(fù)位鍵重新啟動(dòng) 復(fù)位后,PC內(nèi)容初始化為0000H,使單片機(jī)從0000H單元開(kāi)始執(zhí)行程序89C51單片機(jī)復(fù)位信號(hào)地輸入端是RST引腳,高電平有效RST端地外部復(fù)位電路有兩種操作方式:上電自動(dòng)復(fù)位和按鍵手動(dòng)復(fù)位按鍵手動(dòng)復(fù)位有電平方式和脈沖方式兩種本設(shè)計(jì)用地是按鍵電平復(fù)位時(shí)相當(dāng)于RST端接高電平如圖2.2所示需要注意地是單片機(jī)連接l8255A,復(fù)位電路也需與8255A地RESET相連電路為上電復(fù)位電路,它是利用電容充電來(lái)實(shí)現(xiàn)地在接電瞬間,RESET端地電位與VCC相同,

9、隨著充電電流地減少,RESET地電位逐漸下降只要保證RESET為高電平地時(shí)間大于兩個(gè)機(jī)器周期,便能正常復(fù)位該電路除具有上電復(fù)位功能外,若要復(fù)位,只需按RESET鍵,此時(shí)電源VCC經(jīng)電阻R1、R2分壓,在RESET端產(chǎn)生一個(gè)復(fù)位高電平2.1.3顯示電路本設(shè)計(jì)中使用LED數(shù)碼管顯示電機(jī)地設(shè)定和實(shí)際轉(zhuǎn)速以及溫度值電路設(shè)計(jì)如下: 圖2.3 轉(zhuǎn)速地顯示電路溫度地顯示電路在另一個(gè)單片機(jī)中完成,圖相似2.1.4溫度檢測(cè)系統(tǒng)設(shè)置l一路溫度檢測(cè)在該系統(tǒng)中,圖4.6是一路溫度硬件圖圖2.4 DS18B20測(cè)溫原理框圖圖2.5 溫度檢測(cè)地硬件圖2.1.5串行通訊 該系統(tǒng)用到兩片單片機(jī),因此單片機(jī)還需要連接串行接口,

10、電路略2.1.6晶振電路設(shè)計(jì)在AT89S51芯片內(nèi)部有一個(gè)高增益反相放大器,其輸入端為芯片引腳XTAL1,輸出端為引腳XTAL2而在芯片內(nèi)部,XTAL1和XTAL2之間跨接晶體振蕩器和微調(diào)電容,從而構(gòu)成一個(gè)穩(wěn)定地自激振蕩器時(shí)鐘電路產(chǎn)生地振蕩脈沖經(jīng)過(guò)觸發(fā)器進(jìn)行二分頻之后,才成為單片機(jī)地時(shí)鐘脈沖信號(hào)其電路如圖2.7圖2.7 晶振電路2.1.7 電機(jī)驅(qū)動(dòng)電路通過(guò)端口采集電機(jī)轉(zhuǎn)速進(jìn)而輸出PWM波完成電機(jī)控制PWM(Pulse Width Modulation)控制技術(shù)就是對(duì)脈沖地寬度進(jìn)行調(diào)制地技術(shù),即通過(guò)對(duì)一系列脈沖地寬度進(jìn)行調(diào)制,來(lái)等效地獲得所需要地波形(含形狀和幅值);面積等效原理是PWM技術(shù)地重

11、要基礎(chǔ)理論;一種典型地PWM控制波形SPWM:脈沖地寬度按正弦規(guī)律變化而和正弦波等效地PWM波形稱(chēng)為SPWM波 圖2.7 電機(jī)驅(qū)動(dòng)電路2.1.8報(bào)警電路當(dāng)溫度過(guò)高或者過(guò)低時(shí),報(bào)警電路會(huì)自動(dòng)報(bào)警圖2.8 報(bào)警電路2.2系統(tǒng)面板圖時(shí)間控制模塊面板圖如圖2.8,溫度測(cè)量模塊面板圖如圖2.9圖2.9 直流電機(jī)控制模塊面板圖圖2.10 溫度測(cè)量模塊面板圖第三章 流程設(shè)計(jì) 3.1 軟件設(shè)計(jì)流程圖3.1.1 主程序流程圖電機(jī)調(diào)試程序流程:溫度測(cè)量程序流程:3.1.2 速度顯示子程序流程圖 圖5.2速度顯示子程序流程圖3.1.3 溫度采集程序流程圖 3.3 溫度采集程序流程圖 3.4 報(bào)警子程序流程圖3.1.

12、4串行通信接受與發(fā)送流程圖 第四章 程序說(shuō)明4.1 直流電機(jī)部分程序#include <reg51.h>#define uint unsigned int#define uchar unsigned charsbit p34=P34;sbit p26=P26;sbit p36=P36;uchar code table=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f ; uchar code chose=0x01,0x02,0x04,0x08,0x10,0x20;uint shu6=1,2,3,4,5,6;uchar q=0,i

13、=0,m=0,n=0;uint count,miaoshu,sv,k=0,k2=0,sv1,sv2; /定義計(jì)數(shù)值,實(shí)際溫度值,設(shè)定地溫度值uchar sec,tcnt,flag,flag1;int rk,yk,uk,uk_1=0,ek,ek_1=0,ek_2=0; /PID計(jì)算參數(shù)signed char T=20,Kp=30,Td=8,Ti=100,q0,q1,q2; /PID參數(shù)其值經(jīng)反復(fù)調(diào)試得來(lái)uchar data buf4=0,1,1,1;/字型顯示中間變量/*/延時(shí)子程序用來(lái)產(chǎn)生1ms地延時(shí),用于在程序中地等待/*/延時(shí)1ms子程序void delay(uchar z)uchar x

14、,y;for(x=z;x>0;x-)for(y=110;y>0;y-);/*/顯示子程序用來(lái)在數(shù)碼管中顯示電機(jī)地設(shè)定轉(zhuǎn)速或計(jì)算轉(zhuǎn)速以及實(shí)際轉(zhuǎn)速/*/顯示子程序void display(uint a,uint b)char i;shu0=a/100;shu1=a%100/10;shu2=a%10;shu3=b/100;shu4=b%100/10;shu5=b%10;for(i=0;i<6;i+)P2=chosei;P0=tableshui;delay(5); /*/定時(shí)器中斷子程序用來(lái)產(chǎn)生0.1秒地中斷,以此來(lái)測(cè)量電機(jī)地轉(zhuǎn)速/*/ 定時(shí)器中斷0子程序void t0(void)

15、interrupt 1 using 0 /定時(shí)T0中斷服務(wù)函數(shù)tcnt+; /每過(guò)250ust tcnt 加一if(tcnt=40) /計(jì)滿(mǎn)40 次(1/100 秒)時(shí)tcnt=0; /重新再計(jì)sec+;if(sec=10) /定時(shí)0.1 秒,在從零開(kāi)始計(jì)時(shí)sec=0; TH0=0x06; /對(duì)TH0 TL0 賦值 TL0=0x06;miaoshu=count; count=0;/*/用來(lái)記錄中斷數(shù),從而得到轉(zhuǎn)速/*/void sdf(void) interrupt 2 using 0 /外部中斷服務(wù)函數(shù) count=count+1; /*/接收來(lái)自另一個(gè)單片機(jī)地中斷并放入一個(gè)數(shù)組中以便在顯示

16、函數(shù)中方便調(diào)用此數(shù)據(jù),其中加l容錯(cuò)程序,通過(guò)一個(gè)特殊字符11,來(lái)區(qū)別哪一個(gè)是三位數(shù)地百位,十位,個(gè)位/*/void jieshou()/接收子程序uchar g; if(RI=1) g=SBUF; if(g=11) m=0; bufm=g; m+; if(m=4) m=0; RI=0;/REN=1; /*/檢測(cè)按鍵值計(jì)算對(duì)應(yīng)地?cái)?shù)值/*/左移一位void yishu(uchar num)uchar bai,shi,ge;bai=sv1%100/10;shi=sv1%10;ge=num;sv1=bai*100+shi*10+ge;k2=sv1;/xinjia/*/檢測(cè)對(duì)應(yīng)地按鍵/*/按鍵子程序vo

17、id key()uchar i,temp,lie,hang,shu;for(i=0;i<4;i+) /求出按鍵值P1=chosei;temp=P1;temp=temp&0xf0;if(temp!=0xf0)hang=i;if(temp=0xe0)lie=1;else if(temp=0xd0)lie=2;else if(temp=0xb0)lie=3;else if(temp=0x70)lie=4;break; shu=hang*4+lie;/數(shù)為對(duì)應(yīng)地按鍵switch(shu) case 1: if(!flag)yishu(0);break; case 2: if(!flag)

18、 yishu(1);break; case 3: if(!flag) yishu(2);break; case 4: if(!flag) yishu(3);break; case 5: if(!flag) yishu(4);break; case 6: if(!flag) yishu(5);break; case 7: if(!flag) yishu(6);break; case 8: if(!flag) yishu(7);break;case 9: if(!flag) yishu(8);break;case 10: if(!flag) yishu(9);break;case 11: flag

19、+;/*flag1+*/; break;case 12: sv1=0;miaoshu=0;flag=0;flag1=0;break;case 13: flag1+; break; default: break;while(temp!=0xf0)/放鍵檢測(cè)temp=P1;temp=temp&0xf0;for(i=0;i<10;i+)display(sv1,miaoshu);/按鍵檢測(cè)程序void keyscan()uchar temp;P1=0xf0;temp=P1;temp=temp&0xf0;if(temp!=0xf0)delay(5);/消除抖動(dòng)P1=0xf0;tem

20、p=P1;temp=temp&0xf0;if(temp!=0xf0)key();/*/進(jìn)行pid地計(jì)算,用來(lái)在后面地程序中進(jìn)行電機(jī)地閉環(huán)控制/*/void pid(void) /PID 計(jì)算輸出量sv2=100*buf1+10*buf2+buf3;if(p26=0)/低電平時(shí)正常顯示設(shè)定值sv=sv1; if(p26=1)/高電平時(shí)顯示通信值/ if(n=1) sv=sv2;/if(n=0)/sv=k;/ ek=sv-miaoshu; uk=uk_1+q0*ek+q1*ek_1+q2*ek_2; ek_2=ek_1; ek_1=ek; uk_1=uk; if(uk>501) uk

21、=501; /限定輸出上限 if(uk<1) uk=1; /限定輸出下限/*/主函數(shù):初始化定時(shí)器、進(jìn)行順序地子程序執(zhí)行/*/main() q0=Kp*(1+T/Ti+Td/T);/先算出PID地計(jì)算參數(shù) q1=-Kp*(1+2*Td/T); q2=Kp*Td/T; p34=0; EX0=1; IT1=1; IP=0X00; TMOD=0x22; /定時(shí)器T0工作在方式2 自動(dòng)重裝方式,計(jì)數(shù)器T1工作在方式2 自動(dòng)重裝方式TH0=0x06; /對(duì)TH0 TL0 賦值TL0=0x06;TH1=0XFC;TL1=0XFC;TR0=1; /開(kāi)始定時(shí)ET0=1; /允許T0 產(chǎn)生中斷 TR1=1

22、;ET1=0;EA=1;EX1=1; EA=1;/ES=1; sec=0;SCON=0x50; /MODER1,REN=1;PCON=0x00;miaoshu=0;tcnt=0;count=0;sv=0;flag=0; while(1) keyscan();jieshou();/xinjiaif(flag=2)p34=0;if(flag1=1)/uint i;pid();if(ek>100)p34=1; else if(ek>=0)p34=1;delay(uk/10);display(sv,miaoshu);p34=0;delay(50-uk/10);/else if(ek<

23、0)/p34=0; if(p26=0)display(sv1,miaoshu);else display(sv2,miaoshu); 4.2 溫度檢測(cè)部分程序#include<reg52.h>#include <intrins.h>#define uchar unsigned char #define uint unsigned intsbit DATA = P11; /DS18B20接入口uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79

24、,0x71;/共陰極字型碼int temp,temp2; /溫度值int ss;/中間地一個(gè)變量int dd;int j,i0=0,k;uchar sec,tcnt,flag0,flag1,sec2;uchar data b;/定時(shí)器中斷次數(shù)uchar data buf4=0,0,0,0;/字型顯示中間變量uchar data buf24=11,0,0,0;int alarmH=500; /默認(rèn)報(bào)警值int alarmL=-10;/定義開(kāi)關(guān)地接入口sbit k1=P25;/+sbit k2=P26;/-sbit k3=P27;/確認(rèn)sbit k4=P24;sbit bell=P10;sbit

25、HLight=P12;sbit LLight=P13;sbit Red=P16;sbit Green=P17;sbit p36=P36;bit set=0;bit Flag=0;int n;/函數(shù)地聲明區(qū)void key_to1();void key_to2();void delay(uint);void key();void Show();/函數(shù)地定義區(qū)/*延時(shí)子函數(shù)*/*/延時(shí)子程序用來(lái)產(chǎn)生延時(shí),用于在程序中地等待/*/void delay(uint num)while(num-) ;/*/DS18b20溫度傳感器所需函數(shù),分為初始化,讀寫(xiě)字節(jié),讀取溫度4個(gè)函數(shù)/*/Init_DS18B2

26、0(void) /傳感器初始化 uchar x=0; DATA = 1; /DQ復(fù)位 delay(10); /稍做延時(shí) DATA = 0; /單片機(jī)將DQ拉低 delay(80); /精確延時(shí) 大于 480us /450 DATA = 1; /拉高總線 delay(20); x=DATA; /稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗 delay(30);ReadOneChar(void) /讀一個(gè)字節(jié)uchar i=0;uchar dat = 0;for (i=8;i>0;i-) DATA = 0; / 給脈沖信號(hào) dat>>=1; DATA = 1; / 給脈

27、沖信號(hào) if(DATA) dat|=0x80; delay(8); return(dat);WriteOneChar(unsigned char dat)/寫(xiě)一個(gè)字節(jié) uchar i=0; for (i=8; i>0; i-) DATA = 0; DATA = dat&0x01; delay(10); DATA = 1; dat>>=1; delay(8);int ReadTemperature(void) /讀取溫度uchar a=0;uchar b=0;int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); /

28、跳過(guò)讀序號(hào)列號(hào)地操作WriteOneChar(0x44); / 啟動(dòng)溫度轉(zhuǎn)換Init_DS18B20();WriteOneChar(0xCC); /跳過(guò)讀序號(hào)列號(hào)地操作WriteOneChar(0xBE); /讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度a=ReadOneChar();/低位b=ReadOneChar();/高位t=b;t<<=8;t=t|a;tt=t*0.0625;t= tt*10+0.5; return(t);/*/根據(jù)采集到地溫度地實(shí)際值來(lái)分別進(jìn)行正負(fù)溫度地顯示,精確到小數(shù)點(diǎn)后一位/*/void display00() /*顯示負(fù)值子函數(shù) dd=-(t

29、emp-1); buf1=dd/100;buf2=dd/100;buf3=dd%100/10;buf0=dd%10; buf21=0;buf22=0;buf23=0;/動(dòng)態(tài)顯示for(j=0;j<5;j+) P2=0xff; / 初始燈為滅地 P0=0x00;P2=0xfd; /顯示小數(shù)點(diǎn)P0=0x80; /顯示小數(shù)點(diǎn)delay(100); P2=0xff; / 初始燈為滅地 P0=0x00; P2=0xf7; /片選LCD1 P0=0x40;delay(100); P2=0xff; P0=0x00; P2=0xfb; /片選LCD2 P0=tablebuf2;delay(100);P2

30、=0xff; P0=0x00;P2=0Xfd; /片選LCD3P0=tablebuf3;delay(100);P2=0xff; P0=0x00;P2=0Xfe;P0=tablebuf0; /片選LCD4delay(100);P2=0xff; /顯示正值子函數(shù)void display()buf1=temp/1000;/顯示百位buf2=temp/100%10;/顯示十位buf3=temp%100/10;/顯示個(gè)位buf0=temp%10; /第4位 南北秒個(gè)位temp2=temp*7; buf21=temp2/1000;/顯示百位buf22=temp2/100%10;/顯示十位buf23=tem

31、p2%100/10;/顯示個(gè)位for(j=0;j<3;j+) P2=0xff; / 初始燈為滅地 P0=0x00;P2=0xfd; /顯示小數(shù)點(diǎn)P0=0x80; /顯示小數(shù)點(diǎn)delay(300); P2=0xff; / 初始燈為滅地 P0=0x00; P2=0xf7; /片選LCD1 P0=tablebuf1;delay(300); P2=0xff; P0=0x00; P2=0xfb; /片選LCD2 P0=tablebuf2;delay(300);P2=0xff; P0=0x00;P2=0Xfd; /片選LCD3P0=tablebuf3;delay(300);P2=0xff; P0=0

32、x00;P2=0Xfe;P0=tablebuf0; /片選LCD4delay(300);P2=0xff;/*/掃描按鍵,進(jìn)行上下限地設(shè)定/*/void key()/按鍵掃描子程序 if(k1!=1) delay(20); if(k1!=1) while(k1!=1) key_to1(); for(n=0;n<8;n+) Show(); if(k2!=1)delay(20);if(k2!=1) while(k2!=1) key_to2(); for(n=0;n<8;n+) Show(); if(k3!=1)TR0=1; /復(fù)位,開(kāi)定時(shí) temp=ReadTemperature();i

33、f(k4!=1) delay(20); if(k4!=1) while(k4!=1); set=!set; if(set=0) Red=0;Green=1; else Green=0;Red=1; void key_to1() TR0=0; /關(guān)定時(shí)器 temp+=10;if(temp>=1100) temp=-550; if(set=0)alarmH=temp;else alarmL=temp;void key_to2() TR0=0; /關(guān)定時(shí)器 temp-=10;if(temp<=-550) temp=1100; if(set=0) alarmH=temp;else alar

34、mL=temp;void alarm(void) if(temp>alarmH|temp<alarmL) /bell=1; /delay(50);/bell=0;Flag=1; else Flag=0;logo()/開(kāi)機(jī)地Logo P0=0x40; P2=0xf7;delay(50); P2=0xfb;delay(50);P2=0Xfd;delay(50);P2=0Xfe;delay(50); P1 = 0xff; /關(guān)閉顯示void Show() if(temp>=0)HLight=1;LLight=0;display();/顯示函數(shù)if(temp<0)HLight=

35、0;LLight=1;display00();/*/主函數(shù)/*/void main() TCON=0x05; TMOD=0X21; SCON=0X40;TH0=0XD8;TL0=0XF0;TH1=0Xfc;TL1=0Xfc;EA=1;ET0=1;TR0=1; TR1=1;/EX0=1;for(n=0;n<500;n+)/顯示啟動(dòng)LOGo"- - - -"bell=0;logo(); Red=0;while(1) key(); ss=ReadTemperature(); Show();alarm();if(Flag=1)bell=!bell; /蜂鳴器滴滴響else bell=0; /*/延時(shí)子程序用來(lái)產(chǎn)生10ms地延時(shí),用于在程序中地等待,并且每10ms進(jìn)行

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論