【正文】
B20發(fā)送“1”4)數(shù)據(jù)處理:DS18B20要求嚴(yán)格的時(shí)序來保證數(shù)據(jù)的完整性。在寫數(shù)據(jù)時(shí)序的前15us總線需要是被控制器拉為低電平,而后則將是芯片對(duì)總線數(shù)據(jù)的采樣時(shí)間,采樣時(shí)間在1560us,采樣時(shí)間內(nèi)如果控制器將總線拉高則表示寫“1”,如果控制器將總線拉低則表示寫“0”。圖45 寫時(shí)序圖讀時(shí)序:該時(shí)序也是必須有主機(jī)產(chǎn)生1us的低電平,表示該時(shí)間的起始。圖45讀時(shí)序圖所有的讀寫時(shí)序至少需要60us且每?jī)蓚€(gè)獨(dú)立的時(shí)序至少1us的回復(fù)時(shí)間。必須馬上產(chǎn)生時(shí)序,以便DS18B20傳輸數(shù)據(jù)。溫度讀取子程序跳過讀序列號(hào)操作初始化DS18b20發(fā)起讀暫存器命令跳過讀序列號(hào)讀取溫度高、低位字節(jié)溫度轉(zhuǎn)換將溫度數(shù)據(jù)轉(zhuǎn)換為十六進(jìn)制延時(shí)等待溫度轉(zhuǎn)換完成返回初始化DS18b20圖 46 溫度讀程序流程圖該中斷服務(wù)函數(shù)屬于定時(shí)中斷,當(dāng)定時(shí)時(shí)間到則賦標(biāo)志位。為了方便設(shè)計(jì),通訊協(xié)議中將采用字符型數(shù)據(jù)(遵循ASCII字符集)進(jìn)行傳輸,一共5個(gè)字節(jié)數(shù)據(jù),下位機(jī)按照從第一字節(jié)到第五字節(jié)的順序以字符型形式發(fā)送數(shù)據(jù),第一個(gè)字節(jié)是符號(hào)符,第二,三,四字節(jié)分別是百位,十位,和個(gè)位數(shù)字,第五個(gè)字節(jié)是結(jié)束符。定義變量y用于記錄當(dāng)前數(shù)據(jù)Private Sub Command1_Click() = 439。接收文本型數(shù)據(jù),如果設(shè)置為1則以二進(jìn)制的形式取回傳入的數(shù)據(jù) = True39。定義Picture1的坐標(biāo)系,左上角坐標(biāo)值 (0, 1000)到右下角坐標(biāo)值(200, 100) (0, 0)(200, 0), RGB(0, 0, 255)39。將指示燈調(diào)整為綠色End SubPrivate Sub Timer1_Timer() Dim buf$ 39。Text1中的數(shù)據(jù)等于原有的數(shù)據(jù)加上新接收的數(shù)據(jù)If buf = A And X = 200 Then39。在上次數(shù)據(jù)(x1,y1)和這次數(shù)據(jù)(x,y)之間用RGB顏色(255,0 ,0)顏色連線X = X + 139。 amp。Text2中的數(shù)據(jù)等于原先的數(shù)據(jù)加上數(shù)據(jù)編號(hào)加上數(shù)據(jù)的值以及Chr(13) amp。AT89C52是一種帶8K字節(jié)閃速可以編程可以擦除只讀存儲(chǔ)器(PEROM)的低電壓、高性能 CMOS 8位微控制器。此外,AT89C52不含有穩(wěn)態(tài)邏輯,可在低到零頻率的條件下靜態(tài)邏輯,可支持2種軟件可選的省電模式。P0 口是地址/數(shù)據(jù)總線復(fù)用口, 也就是是一組8位漏極開路型雙向I/O 接口。在Flash編程時(shí),P0 口會(huì)接收指令字節(jié),而在程序校驗(yàn)的時(shí)候,輸出指令字節(jié),校驗(yàn)時(shí),要求上拉電阻外接。與AT89C51 不同的是, 還可以分別作是定時(shí)/計(jì)數(shù)器的外部計(jì)數(shù)輸入()和輸入(),F(xiàn)lash 編程和程序校驗(yàn)的時(shí)候,P1會(huì)接收低8 位地址。在訪問8位地址的外部數(shù)據(jù)存儲(chǔ)器(如執(zhí)行MOVXRI 指令)時(shí),P2端口輸出P2鎖存器的內(nèi)容。對(duì)P3口是“1”時(shí),它們被內(nèi)部上拉電阻拉高并且成是輸入端口。當(dāng)振蕩器運(yùn)行時(shí),RST引腳會(huì)出現(xiàn)兩個(gè)機(jī)器周期以上高電平會(huì)使得單片機(jī)復(fù)位。對(duì)Flash存儲(chǔ)器編程時(shí),該引腳還可以用于輸入編程脈沖(PROG)。P SEN程序儲(chǔ)存允許(PSEN)輸出是指外部程序存儲(chǔ)器的讀選通信號(hào),當(dāng)AT89C52 在外部程序存儲(chǔ)器取指令和數(shù)據(jù)時(shí),每個(gè)機(jī)器會(huì)有周期兩次PSEN有效,就是輸出兩個(gè)脈沖。 關(guān)于8155部分 AD0~AD7是地址數(shù)據(jù)總線,單片機(jī)和8155之間的地址、數(shù)據(jù)、命令和狀態(tài)信息都是通過這個(gè)總線口進(jìn)行傳送的。IO/M是RAM/IO口選擇線。RD、WR就是讀、寫控制輸入線。當(dāng)IO/M 是0時(shí),就選擇8155的片內(nèi)RAM,AD0~AD7上地址是8155中RAM單元的地址(00H~FFH);當(dāng)IO/M 是1時(shí),選擇 8155的I/O口,AD0~AD7上的地址是8155 I/O口的地址CE:是片選信號(hào)線,低電平有效WR:是寫選通信號(hào),控制對(duì)8155寫操作,低電平有效RD:是讀選通信號(hào),控制對(duì)8155讀操作,低電平有效AD0~AD7:三態(tài)地址/數(shù)據(jù)的總線。在本系統(tǒng)中只作是定時(shí)器擴(kuò)展使用,他的基本操作如下:(1)關(guān)于定時(shí)器的選擇方式:8155片里有一個(gè)14位減法計(jì)數(shù)器,可以對(duì)輸入脈沖進(jìn)行減法計(jì)數(shù)。定時(shí)器的14位計(jì)數(shù)器是04H(低8位)與05H的D0D5(高6位)組成的。計(jì)數(shù)器的啟動(dòng)和停止計(jì)數(shù)是命令寄存器(00H)的最高兩位進(jìn)行控制命令寄存器最高兩位(TM2和TM1)對(duì)定時(shí)器的控制如下:TM2TM1運(yùn)作情況00空,不影響計(jì)數(shù)器操作01停止計(jì)數(shù),當(dāng)定時(shí)器無啟動(dòng)時(shí)則無操作10計(jì)數(shù)器計(jì)滿后立刻停止計(jì)數(shù),假如定時(shí)器沒啟動(dòng),則無操作11啟動(dòng),當(dāng)計(jì)數(shù)器未開始計(jì)數(shù)時(shí),裝入計(jì)數(shù)常數(shù)后立刻開始計(jì)數(shù);假如計(jì)數(shù)器正在計(jì)數(shù),等待計(jì)數(shù)器溢出以后按新的工作方式和計(jì)數(shù)常數(shù)開始計(jì)數(shù)任意時(shí)刻可以置定時(shí)器的長(zhǎng)度與工作方式,然后要把啟動(dòng)命令寫入命令寄存器(00H),即使計(jì)數(shù)器已經(jīng)計(jì)數(shù),在寫入啟動(dòng)命令后仍然可以改變定時(shí)器的工作方式。8155計(jì)數(shù)器通常無法當(dāng)作外部文件計(jì)數(shù)器使用,只當(dāng)作信號(hào)發(fā)生器使用,在輸入連續(xù)脈沖之后,編程輸出單方波、連續(xù)方波、單脈沖和連續(xù)脈沖信號(hào)。兩者各有所長(zhǎng)。方法二:中位值濾波法方法:連續(xù)采樣N次,把N次采樣值按從小到大排列取中間值為本次有效值。優(yōu)點(diǎn):對(duì)一般具有隨機(jī)干擾的信號(hào)進(jìn)行濾波比較適用,這樣信號(hào)的特點(diǎn)是有一個(gè)平均值。優(yōu)點(diǎn):能抑制周期性干擾,平滑度高。在具體操作過程中,采用了計(jì)算機(jī)進(jìn)行溫度控制,采用PID算法控制精度,在操作過程中有好多要注意的地方。江蘇建筑職業(yè)技術(shù)學(xué)院畢業(yè)技術(shù)報(bào)告致 謝經(jīng)過一個(gè)多月的努力,在吳興華老師的悉心指導(dǎo)下我順利的完成了畢業(yè)設(shè)計(jì)。他兢兢業(yè)業(yè)的工作作風(fēng)、認(rèn)真的態(tài)度給我留下了非常深刻的印象。uint temp,wen,wensf,wens,weng,flag_pid,counter,high_time,wenflag=0,wensflag。//開光標(biāo)閃爍:0x0f,關(guān)光標(biāo)閃爍:0x0c write_(0x06)。break。break。key=keyscan()。//1 case 0xde:date=2。c=0。break。//5 case 0xdd:date=6。c=0。break。//9 case 0xdb:date=0。{shedingjian()。write_str(amp。table1)。table2)。}if(s2num==1){write_(0x0f)。}if(s2num==4){gotoxy(1,12)。write_(0x0c)。}if(s2num==4){gotoxy(1,6)。write_(0x0c)。table3)。}if(s4num==1){write_(0x0f)。}if(s4num==4){gotoxy(1,12)。write_(0x0c)。}if(s4num==4){gotoxy(1,6)。write_(0x0c)。table5)。}if(s5num==1){write_(0x0f)。}if(s5num==4){s5num=0。}if(s5num==3){gotoxy(1,9)。gotoxy(1,0)。write_str(amp。if(s3num==1amp。c==0){switch(s2num) { case 1:ws1=date。c=1。write_num(wg1)。//1 按下相應(yīng)的鍵顯示相對(duì)應(yīng)的碼值 case 3:wsf1=date。c=1。write_num(sb1)。//3 case 5:ss1=date。c=1。write_num(sg1)。//5 case1:sg1=date。c=1。write_num(ss1)。//1 按下相應(yīng)的鍵顯示相對(duì)應(yīng)的碼值 case 3:sb1=date。c=1。write_num(wsf1)。//3 case 5:wg1=date。c=1。write_num(ws1)。//4}shewen1=ws1*10+wg1+wsf1/10。h==1amp。//0按下相應(yīng)的鍵顯示相對(duì)應(yīng)的碼值 case 2:wg2=date,gotoxy(1,4),write_num(wg2),gotoxy(1,4),c=1。//2 case 4:sb2=date,gotoxy(1,12),write_num(sb2),gotoxy(1,12),c=1。//4 case 6:sg2=date,gotoxy(1,14),write_num(sg2),gotoxy(1,14),c=1。//0按下相應(yīng)的鍵顯示相對(duì)應(yīng)的碼值 case 2:ss2=date,gotoxy(1,13),write_num(ss2),gotoxy(1,13),c=1。//2 case4:wsf2=date,gotoxy(1,6),write_num(wsf2),gotoxy(1,6),c=1。//4 case6:wg2=date,gotoxy(1,3),write_num(ws2),gotoxy(1,3),c=1。}if(s3num==3amp。c==0) { switch(s5num) { case 1:bjs=date,gotoxy(1,9),write_num(bjs),gotoxy(1,9),c=1。//1 按下相應(yīng)的鍵顯示相對(duì)應(yīng)的碼值 case 3:bjsf=date,gotoxy(1,12),write_num(bjsf),gotoxy(1,12),c=1。//0按下相應(yīng)的鍵顯示相對(duì)應(yīng)的碼值 case 2:bjg=date,gotoxy(1,10),write_num(bjg),gotoxy(1,10),c=。//2 case1:bjsf=date,gotoxy(1,12),write_num(bjsf),gotoxy(1,12),c=1。//0按下相應(yīng)的鍵顯示相對(duì)應(yīng)的碼值 case 2:bjg=date,gotoxy(1,10),write_num(bjg),gotoxy(1,10),c=1。h==1amp。//4}shewen2=ws2*10+wg2+wsf2/10。//3 case 5:wg2=date,gotoxy(1,4),write_num(wg2),gotoxy(1,4),c=1。//1 按下相應(yīng)的鍵顯示相對(duì)應(yīng)的碼值 case 3:sb2=date,gotoxy(1,12),write_num(sb2),gotoxy(1,12),c=1。//5 case 1:sg2=date,gotoxy(1,14),write_num(sg2),gotoxy(1,14),c=1。//3 case 5:ss2=date,gotoxy(1,13),write_num(ss2),gotoxy(1,13),c=1。//1 按下相應(yīng)的鍵顯示相對(duì)應(yīng)的碼值 case 3:wsf2=date,gotoxy(1,6),write_num(wsf2),gotoxy(1,6),c=1。c==0){switch(s4num) { case 1:ws2=date,gotoxy(1,3),write_num(ws2),gotoxy(1,3),c=1。}if(s3num==2amp。c=1。//4 case 6:wg1=date。write_num(wg1)。c=1。//2 case 4:wsf1=date。write_num(sb1)。c=1。//0按下相應(yīng)的鍵顯示相對(duì)應(yīng)的碼值 case 2:ss1=date。write_num(sg1)。c=1。//4 case 6:sg1=date。write_num(ss1)。c=1。//2 case 4:sb1=date。write_num(wsf1)。c=1。//0按下相應(yīng)的鍵顯示相對(duì)應(yīng)的碼值 case 2:wg1=date。write_num(ws1)。h==1amp。} }void shewen(){keyscant()。table0)。write_(0x0c)。}if(s5num==1){gotoxy(1,12)。}if(s5num==2){gotoxy(1,10)。if(h==1)//如果設(shè)置鍵按下進(jìn)行設(shè)置{if(k==1){s5num++,k=0。gotoxy(1,0)。}if(s4num==6){gotoxy(1,3)。}if(s4num==2){gotoxy(1,13)。}if(s4num==6){gotoxy(1,14)。}if(s4num==2){gotoxy(1,4)。if(h==1)//如果設(shè)置鍵按下進(jìn)行設(shè)置{if(k==1){s4num++,k=0。gotoxy(1,0)。}if(s2num==6){gotoxy(1,3)。}if(s2num==2){gotoxy(1,13)。}if(s2num==6){gotoxy(1,14)。}if(s2num==2){gotoxy(1,4)。if(h==1)//如果設(shè)置鍵按下進(jìn)行設(shè)置{if(k==1){s2num++,k=0。gotoxy(1,0)。gotoxy(2,0)。ini