單片機(jī)課程設(shè)計-溫度采集電路_第1頁
單片機(jī)課程設(shè)計-溫度采集電路_第2頁
單片機(jī)課程設(shè)計-溫度采集電路_第3頁
單片機(jī)課程設(shè)計-溫度采集電路_第4頁
單片機(jī)課程設(shè)計-溫度采集電路_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

單片機(jī)課程設(shè)計報告————溫度采集電路設(shè)計與仿真一、設(shè)計目的1、通過單片機(jī)課程設(shè)計,熟練掌握C語言與匯編語言的編程方法,將理論聯(lián)系到實踐中去,提高我們的動腦和動手的能力。2、通過數(shù)字采集與控制系統(tǒng)的設(shè)計,掌握如何采集數(shù)據(jù)并在LCD上顯示采集的數(shù)據(jù)合如何控制電機(jī)的使用方法,和簡單程序的編寫,最終提高我們的邏輯抽象能力。二、設(shè)計任務(wù)和要求任務(wù):設(shè)計一個能夠采集數(shù)據(jù)和控制電機(jī)的系統(tǒng).具體要求:通過I/O口擴(kuò)展5個按鍵單片機(jī)的P口外接8個撥碼開關(guān),作為8位數(shù)據(jù)輸入通過I/O口外接DS18B20溫度傳感器,進(jìn)行溫度采集外接一步進(jìn)電機(jī),作為控制部分外接一LCM1602液晶屏,進(jìn)行數(shù)據(jù)顯示在PROTEUS軟件中設(shè)計實現(xiàn)上述功能的電路,然后編寫源程序?qū)崿F(xiàn)如下功能:按下按鍵“1”時在液晶屏上顯示“DANPIANJIKECHENGSHEJI”。按下按鍵“2”時在液晶屏上顯示自己的學(xué)號和姓名(拼音)。按下按鍵“3”時進(jìn)行溫度采集并顯示在液晶屏上。按下按鍵“4”時通過撥碼開關(guān)采集8位數(shù)據(jù)并顯示在液晶屏上,數(shù)據(jù)大于200控制步進(jìn)電機(jī)反轉(zhuǎn),小于50步進(jìn)電機(jī)正轉(zhuǎn)。按下按鍵“5”時步進(jìn)電機(jī)停止轉(zhuǎn)動。三、設(shè)計原理分析1、顯示“DANPIANJIKECHENGSHEJI”與自己的學(xué)號和姓名(拼音)直接定義字符串然后送入1602LCD顯示。2、采集溫度通過DS18B20溫度傳感器將采集的溫度通過硬件電路轉(zhuǎn)送入單片機(jī)內(nèi)部,單片機(jī)內(nèi)部將采集的溫度轉(zhuǎn)換成字符串然后送入1602LCD顯示。3、通過控制ULN2003來控制電機(jī)的正反轉(zhuǎn)。(ULN2003是另一款電機(jī)脈沖分配芯片,由于其結(jié)構(gòu)簡單,價格低廉,而且無需外接功率放大電路,因此也常用來作為步進(jìn)電機(jī)的驅(qū)動芯片)。4、該電路系統(tǒng)采用“一線總線”數(shù)字傳感器DS18B20實現(xiàn)溫度的采集,采用液晶顯示器進(jìn)行數(shù)據(jù)顯示。首先啟動Proteus并從Proteus元件庫中選擇需要的元件繪制電路圖并設(shè)置相應(yīng)元件的參數(shù)值。5、電路繪制完成以后,打開KeilμVision2新建一個項目,命名為cewen.uv2。選擇Project菜單下的SelectDeviceforTarget選擇AT89C51。然后單擊Project菜單下的OptionforTarget‘Target1’項,選擇Debug,使用ProteusVSMEm-ulator仿真。然后新建一個源文件cewen.c,寫入源程序(只給出讀取溫度函數(shù)):四、硬件圖五、源程序//////////ds18b20/////////#include<reg51.h>#include<INTRINS.h>#include<absacc.h>unsignedcharreaddata[2];sbitDQ=P3^3;////////////endofds18b20variable////////////////////lcdvariable/////////////////#include<reg51.h>#include<absacc.h>#defineREG0XBYTE[0x0000]#defineREG1XBYTE[0x0001]#defineREG2XBYTE[0x0002]#defineREG3XBYTE[0x0003]#defineUP20#defineDOWN30#defineSTOP40unsignedcharbdatabusyflag;unsignedchardat,datn,count;unsignedcharword1[16]={"T="};codeunsignedcharword2[16]={"byKeTingTing"};codeunsignedcharword3[16]={"DANPINJI"};codeunsignedcharword4[16]={"KECHENGSHEJI"};codeunsignedcharword5[16]={"WellcomeTo"};codeunsignedcharword6[16]={"ProteusTools!"};codeunsignedcharword7[16]={"204799218”"};codeunsignedcharword8[16]={"byKeTingTing"};dataunsignedcharword9[16]={"P2="};sbitbusyflag_7=busyflag^7;sbitp10=P1^0;sbitp11=P1^1;sbitp12=P1^2;sbitp13=P1^3;sbitp14=P1^4;sbitp20=P2^0;sbitp21=P2^1;sbitp22=P2^2;sbitp23=P2^3;sbitp24=P2^4;sbitp25=P2^5;sbitp26=P2^6;sbitp27=P2^7;/////////////////endoflcdvariable///////////////////////////ds18b20///////////////////////延時函數(shù)voiddelay(unsignedinti){ while(i--);}//初始化函數(shù)voidInit_DS18B20(void){ unsignedcharx=0; DQ=1;//DQ復(fù)位 delay(8);//稍做延時 DQ=0;//單片機(jī)將DQ拉低 delay(80);//精確延時大于480us DQ=1;//拉高總線 delay(14); x=DQ;//稍做延時后如果x=0則初始化成功x=1則初始化失敗 delay(20);}//讀一個字節(jié)unsignedcharReadOneChar(void){ unsignedchari=0; unsignedchardat=0; for(i=8;i>0;i--) { DQ=0;//給脈沖信號 dat>>=1; DQ=1;//給脈沖信號 if(DQ) dat|=0x80; delay(4); } return(dat);}//寫一個字節(jié)voidWriteOneChar(unsignedchardat){ unsignedchari=0; for(i=8;i>0;i--) { DQ=0; DQ=dat&0x01; delay(5); DQ=1; dat>>=1; } delay(4);}//讀取溫度voidReadTemperature(void){ Init_DS18B20(); WriteOneChar(0xCC);//跳過讀序號列號的操作 WriteOneChar(0x44);//啟動溫度轉(zhuǎn)換 Init_DS18B20(); WriteOneChar(0xCC);//跳過讀序號列號的操作 WriteOneChar(0xBE);//讀取溫度寄存器等(共可讀9個寄存器)前兩個就是溫度 readdata[0]=ReadOneChar(); readdata[1]=ReadOneChar(); }voidTempprocess()//溫度轉(zhuǎn)換{ unsignedintt; floattt; unsignedchartemp; if((readdata[1]&0x80)!=0) { word1[3]='-'; t=readdata[1]; t<<=8; t=t|readdata[0]; t=t-1; t=~t; t>>=4; word1[4]=t/100+48; word1[5]=((t/10)%10)+48; word1[6]=t%10+48; temp=readdata[0]; temp=temp-1; temp=~temp; temp=temp&0x0f; tt=temp*0.0625; word1[7]='.'; word1[8]=(unsignedchar)(tt*10); word1[9]=(unsignedchar)(tt*100-word1[8]*10); word1[10]=(unsignedchar)(tt*1000-word1[8]*100-word1[9]*10); word1[11]=(unsignedchar)(tt*10000-word1[8]*1000-word1[9]*100-word1[10]*10); word1[8]+=48; word1[9]+=48; word1[10]+=48; word1[11]+=48; word1[12]='C'; } else { word1[3]='+'; t=readdata[1]; t<<=8; t=t|readdata[0]; t>>=4; word1[4]=t/100+48; word1[5]=((t/10)%10)+48; word1[6]=t%10+48; temp=readdata[0]; temp=temp&0x0f; tt=temp*0.0625; word1[7]='.'; word1[8]=(unsignedchar)(tt*10); word1[9]=(unsignedchar)(tt*100-word1[8]*10); word1[10]=(unsignedchar)(tt*1000-word1[8]*100-word1[9]*10); word1[11]=(unsignedchar)(tt*10000-word1[8]*1000-word1[9]*100-word1[10]*10); word1[8]+=48; word1[9]+=48; word1[10]+=48; word1[11]+=48; word1[12]='C'; }}////////////////////P2shujuxianshi////////////////voidxie(){//if(p13==0){ if(p27==1){word9[4]='1';}else{word9[4]='0';}if(p26==1){word9[5]='1';}else{word9[5]='0';}if(p25==1){word9[6]='1';}else{word9[6]='0';}if(p24==1){word9[7]='1';}else{word9[7]='0';}if(p23==1){word9[8]='1';}else{word9[8]='0';}if(p22==1){word9[9]='1';}else{word9[9]='0';}if(p21==1){word9[10]='1';}else{word9[10]='0';}if(p20==1){word9[11]='1';}else{word9[11]='0';} } } /////////////////////endofds18b20/////////////////////////////////startoflcd1602/////////////////voidbusy(){ do { busyflag=REG1; }while(busyflag_7);}voidwrc(unsignedcharwcon){ busy(); REG0=wcon;}voidwrd(unsignedcharwdat){ busy(); REG2=wdat;}voidrdd(){ busy(); dat=REG3;}voidlcdint(){ wrc(0x38); wrc(0x01); wrc(0x06); wrc(0x0c);}voidwrn(unsignedcharword[]){ unsignedchari; for(i=0;i<16;i++) { wrd(word[i]); }}//////////////endoflcd1602///////////////////////voidmain(){ unsignedchartemp; unsignedcharcout; lcdint();//初始化液晶 wrc(0x80); wrn(word5); wrc(0xc0); wrn(word6); while(1) {if(p10==0)//判斷P1.0是否按下 { ReadTemperature(); Tempprocess(); wrc(0x80); wrn(word1); wrc(0xc0); wrn(word2); } if(p11==0)//判斷P1.1是否按下 { wrc(0x80); wrn(word3); wrc(0xc0); wrn(word4); } if(p12==0)//判斷P1.2是否按下 { wrc(0x80); wrn(word7); wrc(0xc0); wrn(word8); } { P2=0xff; cout=P2; if(p13==0) { xie(); wrc(0x80); wrn(word9); wrc(0xc0); wrn(word8); if(cout>200) { temp=UP;//控制正轉(zhuǎn) P3=0X00; delay(1000); } if(cout<50) { temp=DOWN;//控制反轉(zhuǎn) P3=0X00; delay(1000);

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論