接口實驗報告_第1頁
接口實驗報告_第2頁
接口實驗報告_第3頁
接口實驗報告_第4頁
接口實驗報告_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

計算機(jī)接口與控制技術(shù)實驗報告中南大學(xué)機(jī)電工程學(xué)院機(jī)械1304班俞文龍實驗一穿行靜態(tài)顯示實驗實驗?zāi)康?.掌握數(shù)字、字符轉(zhuǎn)換成顯示段碼的軟件譯碼方法2.靜態(tài)顯示的原理和相關(guān)程序的編寫3.掌握C51程序設(shè)計方法二、實驗說明輸入給定程序,配置選項,調(diào)試并運(yùn)行程序,觀察程序控制下仿真器輸出的變化。選中此項keil為硬件仿真設(shè)置Port串口:一般為COM3,Baudrate波特率為最大值:115200bit/s,最后確認(rèn)顯示器由8個共陰極LED數(shù)碼管組成。輸入只有兩個信號,它們是串行數(shù)據(jù)線DIN和移位信號CLK。8個串/并移位存放器芯片74LS164首尾相連。每片的并行輸出作為LED數(shù)碼管的段碼。74LS164為8位串入并出移位存放器,1、2為串行輸入端,QA~QH為并行輸出端,CLK為移位時鐘脈沖,上升沿移入一位;CLR為清零端,低電平時并行輸出為零。用C51進(jìn)行程序設(shè)計,選擇匯編或者C語言編程均可,要求程序結(jié)構(gòu)清晰,模塊化結(jié)構(gòu),反復(fù)調(diào)用局部做成子模塊,有必要的注釋。編寫程序上機(jī)調(diào)試通過,實驗報告要求提交程序流程圖及源程序。三、實驗內(nèi)容本實驗需要用到單片機(jī)的最小應(yīng)用系統(tǒng)〔F1區(qū)〕和串行靜態(tài)顯示模塊〔I3區(qū)〕。使用單片機(jī)最小應(yīng)用系統(tǒng)模塊,用導(dǎo)線將連接P3.0〔RXD〕、P3.1〔TXD〕連接到串行靜態(tài)顯示模塊的DIN、CLK端。用串行數(shù)據(jù)通信線連接計算機(jī)與仿真器,把仿真頭插到模塊的單片機(jī)鎖緊插座中,請注意仿真器的方向:缺口朝上。請指導(dǎo)老師檢查接線后再翻開模塊電源。翻開KeiluVision2仿真軟件,首先建立本實驗的工程文件,接著添加源程序,進(jìn)行編譯,直到編譯無誤。全速運(yùn)行程序。8LED顯示“89C51”。程序停止運(yùn)行時,顯示不變,說明靜態(tài)顯示模塊具有數(shù)據(jù)鎖存功能。四、實驗程序及原理圖#include<reg51.h>sbitDin=P1^0;sbitClk=P1^1;voiddelay(void){unsignedinti;for(i=0;i<10;i++);}voidmain(void){unsignedchari,j,chr,sel;unsignedcharcodeTab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9顯示代碼unsignedcharxs[8]={5,0,1,6,2,3,2,8};for(i=0;i<8;i++){chr=Tab[xs[i]];//sel=0x06; for(j=0;j<8;j++) { Din=chr&sel; Clk=0;//P1.·同步時鐘 sel=sel>>1; delay(); Clk=1;delay(); }}while(1);}

五實驗體會通過實驗,再次熟悉了51單片機(jī)的仿真軟件,更加的熟練使用軟件。同時,也掌握數(shù)字、字符轉(zhuǎn)換成顯示段碼的軟件譯碼方法,初步學(xué)會了軟件譯碼方法。對靜態(tài)顯示的原理和相關(guān)程序的編寫有了進(jìn)一步的認(rèn)識。根本掌握C51程序設(shè)計方法實驗二交通燈模擬實驗串行靜態(tài)顯示實驗一、實驗?zāi)康?.掌握ULN2003芯片工作原理2.掌握十字路口交通燈控制方法二、實驗說明輸入給定程序,配置選項,調(diào)試并運(yùn)行程序,觀察程序控制下仿真器輸出的變化。選中此項keil為硬件仿真設(shè)置Port串口:一般為COM3,Baudrate波特率為最大值:115200bit/s,最后確認(rèn)ULN2003是大電流驅(qū)動陣列,由七個硅NPN達(dá)林頓管組成,具有電流增益高、工作電壓高、溫度范圍寬、帶負(fù)載能力強(qiáng)等特點,適應(yīng)于各類要求高速大功率驅(qū)動的系統(tǒng),可直接驅(qū)動繼電器等負(fù)載。輸入5VTTL電平,輸出可達(dá)500mA/50V。用C51進(jìn)行程序設(shè)計,選擇匯編或者C語言編程均可,要求程序結(jié)構(gòu)清晰,模塊化結(jié)構(gòu),反復(fù)調(diào)用局部做成子模塊,有必要的注釋。編寫程序上機(jī)調(diào)試通過,實驗報告要求提交程序流程圖及源程序。三、實驗內(nèi)容及步驟〔完成分值:60分/單個程序〕本實驗需要用到本實驗需要用到單片機(jī)最小應(yīng)用系統(tǒng)〔F1區(qū)〕和汽車信號燈/交通燈/舞臺燈模塊〔D1區(qū)〕。用十字路口交通燈控制模塊。單片機(jī)最小應(yīng)用系統(tǒng)的P2口JD2F接至汽車信號燈/交通燈/舞臺燈模塊的JD4D。汽車信號燈/交通燈/舞臺燈模塊的DIN、CLK分別對應(yīng)的接單片機(jī)最小應(yīng)用系統(tǒng)的P1.1、P1.0口。翻開相關(guān)模塊電源。用串行數(shù)據(jù)通信線連接計算機(jī)與仿真器,把仿真頭插到模塊的單片機(jī)鎖緊插座中,請注意仿真器的方向:缺口朝上。請指導(dǎo)老師檢查接線后再翻開模塊電源。翻開KeiluVision2仿真軟件,首先建立本實驗的工程文件,接著添加源程序,進(jìn)行編譯,直到編譯無誤。全速運(yùn)行程序。觀察交通燈的模擬情況。東西向綠燈亮假設(shè)干秒,黃燈閃爍3次后紅燈亮,南北向由紅燈變?yōu)榫G燈,假設(shè)干秒后南北向黃燈閃爍3次此后變紅燈,東西向變綠燈,如此重復(fù)。LED燈控制說明:P2.7控制東西向紅燈;P2.6控制東西向黃燈;P2.5控制東西向綠燈;P2.4控制南北向紅燈;P2.3控制南北向黃燈;P2.2控制南北向綠燈。四、電路原理圖及實驗程序#include<reg51.h>#include<absacc.h>#defineucharunsignedcharuchardataR2,R3,R4;sbitLED_G2=P2^2;//南北綠燈sbitLED_Y2=P2^3;//南北黃燈sbitLED_R2=P2^4;//南北紅燈sbitLED_G1=P2^5;//東西綠燈sbitLED_Y1=P2^6;//東西黃燈sbitLED_R1=P2^7;//東西紅燈voiddelay(intcount){unsignedinti; for(i=0;i<count;i++);}//狀態(tài)1voidstate1(){LED_G1=1;//東西綠燈亮LED_Y1=0;LED_R1=0;LED_G2=0;LED_Y2=0;LED_R2=1;//南北紅燈亮}//狀態(tài)2voidstate2(){LED_Y1=0;LED_R1=0;LED_G2=0;LED_Y2=0;LED_R2=1;//南北紅燈亮}//狀態(tài)3voidstate3(){LED_G1=0;LED_R1=0;LED_G2=0;LED_Y2=0;LED_R2=1;//南北紅燈亮LED_Y1=1;//東西黃燈亮}//狀態(tài)4voidstate4(){LED_G1=0;LED_Y1=0;LED_R1=1;//東西紅燈亮LED_G2=1;//南北綠燈亮LED_Y2=0;LED_R2=0;}//狀態(tài)5voidstate5(){LED_G1=0;LED_Y1=0;LED_R1=1;//東西紅燈亮LED_Y2=0;LED_R2=0;}//狀態(tài)6voidstate6(){LED_G1=0;LED_Y1=0;LED_R1=1;//東西紅燈亮LED_G2=0;LED_R2=0;LED_Y2=1;//南北黃燈亮}voidmain(){P2=0x00;//關(guān)閉不相關(guān)的LEDP0=0xff;P1=0xff;TMOD=0x01;//置T0工作方式1TH0=0x3c;//置T0定時初值50mSTL0=0xb0;TR0=1;//啟動T0EA=0;LOOP:R2=20;//置1S計數(shù)初值50mS*20=1SR3=20;//紅燈20Sstate1();//調(diào)用狀態(tài)1WAIT1:while(!TF0);TF0=0;TH0=0x3c;TL0=0xb0;TR0=1;//啟動T0R2--; if(R2>0)gotoWAIT1;//判1S到否?未到繼續(xù)狀態(tài)1R2=20;//置50mS計數(shù)初值R3--;if(R3>0)gotoWAIT1;//狀態(tài)1維持20S//***************************************************R2=5;//置50mS計數(shù)初值5*4=20R3=3;//綠燈閃3SR4=4;//閃爍間隔200mSWAIT2:state2();//調(diào)用狀態(tài)2if(!TF0)gotoWAIT2;//查詢50mS到否TF0=0;TH0=0x3c;//恢復(fù)T0定時初值50mSTL0=0xb0;R4--;if(R4>0)gotoWAIT2;//判200mS到否?未到繼續(xù)狀態(tài)2LED_G1=~LED_G1;//東西綠燈閃R4=4;//閃爍間隔200mSR2--;if(R2>0)gotoWAIT2;//判1S到否?未到繼續(xù)狀態(tài)2R2=5;//置50mS計數(shù)初值R3--;if(R3>0)gotoWAIT2;//狀態(tài)2維持3S//***************************************************R2=20;//置50mS計數(shù)初值R3=2;//黃燈2SWAIT3:state3();//調(diào)用狀態(tài)3if(!TF0)gotoWAIT3;//查詢30mS到否TF0=0;TH0=0x3c;//恢復(fù)T0定時初值50mSTL0=0xb0; R2--;if(R2>0)gotoWAIT3;//判1S到否?未到繼續(xù)狀態(tài)3R2=20;//置50mS計數(shù)初值R3--;if(R3>0)gotoWAIT3;//狀態(tài)3維持2S//;***************************************************R2=20;//置50mS計數(shù)初值R3=20;//黃燈2SWAIT4:state4();//調(diào)用狀態(tài)4if(!TF0)gotoWAIT4;//查詢30mS到否TF0=0;TH0=0x3c;//恢復(fù)T0定時初值50mSTL0=0xb0; R2--;if(R2>0)gotoWAIT4;//判1S到否?未到繼續(xù)狀態(tài)3R2=20;//置50mS計數(shù)初值R3--;if(R3>0)gotoWAIT4;//狀態(tài)4維持20S /////////////////////////////////////R2=5;//置50mS計數(shù)初值5*4=20R4=4;//閃爍間隔200mSR3=3;//綠燈閃3SWAIT5:state5();//調(diào)用狀態(tài)35if(!TF0)gotoWAIT5;//查詢50mS到否TF0=0;TH0=0x3c;//恢復(fù)T0定時初值100mSTL0=0xb0;R4--;if(R4>0)gotoWAIT5;//判200mS到否?未到繼續(xù)狀態(tài)5LED_G2=~LED_G2;//南北綠燈閃R4=4;//閃爍200mSR2--;if(R2>0)gotoWAIT5;R2=5;//置100mS計數(shù)初值R3--;if(R3>0)gotoWAIT5;//狀態(tài)5維持3S//;***************************************************R2=20;//置50mS計數(shù)初值R3=2;//黃燈2SWAIT6:state6();//調(diào)用狀態(tài)6if(!TF0)gotoWAIT6;//查詢100mS到否TF0=0;TH0=0x3c;//恢復(fù)T0定時初值100mSTL0=0xb0;R2--;if(R2>0)gotoWAIT6;//判1S到否?未到繼續(xù)狀態(tài)6R2=20;//置100mS計數(shù)初值R3--;if(R3>0)gotoWAIT6;//狀態(tài)6維持2gotoLOOP;//大循環(huán)}五實驗心得體會通過實驗及仿真,根本熟悉了解了ULN2003芯片工作原理,通過軟件的仿真,了解了交通燈的運(yùn)行原理,同時,對于51單片機(jī)的應(yīng)用有了進(jìn)一步的認(rèn)識。實驗三串行A/D轉(zhuǎn)換實驗一、實驗?zāi)康?.掌握單片機(jī)I/O的編程方法2.掌握TLC549芯片使用方法二、實驗說明輸入給定程序,配置選項,調(diào)試并運(yùn)行程序,觀察程序控制下仿真器輸出的變化。選中此項keil為硬件仿真設(shè)置Port串口:一般為COM3,Baudrate波特率為最大值:115200bit/s,最后確認(rèn)TLC549是美國德州儀器公司生產(chǎn)的8位串行A/D轉(zhuǎn)換器芯片,可與通用微處理器、控制器通過CLK、CS、DATAOUT三條口線進(jìn)行串行接口。具有4MHz片內(nèi)系統(tǒng)時鐘和軟、硬件控制電路,轉(zhuǎn)換時間最長17μs,TLC549為40000次/s??偸д{(diào)誤差最大為±0.5LSB,典型功耗值為6mW。采用差分參考電壓高阻輸入,抗干擾,可按比例量程校準(zhǔn)轉(zhuǎn)換范圍,VREF-接地,VREF+-VREF-≥1V,可用于較小信號的采樣。用C51進(jìn)行程序設(shè)計,選擇匯編或者C語言編程均可,要求程序結(jié)構(gòu)清晰,模塊化結(jié)構(gòu),反復(fù)調(diào)用局部做成子模塊,有必要的注釋。編寫程序上機(jī)調(diào)試通過,實驗報告要求提交程序流程圖及源程序。三、實驗內(nèi)容及步驟〔完成分值:100分/單個程序〕本實驗需要用到本實驗用到單片機(jī)最小系統(tǒng)〔F1區(qū)〕、串行靜態(tài)數(shù)碼顯示〔I3區(qū)〕、電位器〔A2區(qū)〕和串行A/D轉(zhuǎn)換〔H6區(qū)〕。串行靜態(tài)數(shù)碼顯示的DIN、CLK分別接單片機(jī)最小系統(tǒng)的P1.0、P1.1口;單片機(jī)最小系統(tǒng)的P2.1、P2.0分別接串行A/D轉(zhuǎn)換的DATA、CLK,串行A/D轉(zhuǎn)換的CS-549接P2.2,AIN接電位器〔A2區(qū)〕0~5V可調(diào)輸出端。翻開單片機(jī)最小系統(tǒng)的電源開關(guān),串行A/D轉(zhuǎn)換的JT1H電源短路帽打在VCC處。用串行數(shù)據(jù)通信線連接計算機(jī)與仿真器,把仿真頭插到模塊的單片機(jī)鎖緊插座中,請注意仿真器的方向:缺口朝上。請指導(dǎo)老師檢查接線后再翻開模塊電源。翻開KeiluVision2仿真軟件,首先建立本實驗的工程文件,接著添加源程序,進(jìn)行編譯,直到編譯無誤。全速運(yùn)行程序。數(shù)碼管顯示電壓轉(zhuǎn)化的數(shù)字量,調(diào)節(jié)模擬信號輸入端的電位器旋鈕。觀察數(shù)碼管數(shù)字隨著旋鈕旋轉(zhuǎn)而線性變化。注意:電位器旋鈕容易被擰壞,不要過分旋轉(zhuǎn)旋鈕。四、電路原理圖實驗程序#include<reg51.h>#defineuintunsignedint#defineucharunsignedchar//sbitclock=P2^0;//sbitdout=P2^1;//sbitcs=P2^2;sbitTLC549_CLK=P2^0;sbitTLC549_DOUT=P2^1;sbitTLC549_CS=P2^2;sbitDin=P1^0;sbitClk=P1^1;unsignedcharcodeTab[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71,0x00};//0-Fvoiddelay(intcount){unsignedinti; for(i=0;i<count;i++);}//顯示函數(shù)voiddisplay(uchardatax){ uchari,j,chr,sel;ucharxs[8]={16,16,16,16,16,16,16,16};//針對實驗中8個串口LED靜態(tài)顯示器 xs[7]=x&0x0f; xs[6]=x&0xf0; xs[6]=x>>4;for(i=0;i<8;i++){chr=Tab[xs[i]];// sel=0x80; for(j=0;j<8;j++) { Clk=0;//P1.1發(fā)出同步信號Din=chr&sel; Clk=1;sel=sel>>1; }}}unsignedcharTLC549_ReadByte(void){ unsignedcharvalue=0,i=0; TLC549_DOUT=1; for(i=0;i<8;i++) { if(TLC549_DOUT==1) value|=(0x80>>i); TLC549_CLK=1; TLC549_CLK=0; delay(50); }returnvalue;}unsignedcharTLC549_GetValue(void){ unsignedcharConvertValue; TLC549_CS=0; ConvertValue=TLC549_ReadByte(); TLC549_CS=1; delay(150);returnConvertValue;}voidmain(){uchari,dataad; while(1){ad=TLC549_GetValue(); display(ad); for(i=0;i<255;i++)delay(100); }}五實驗心得與體會通過實驗,認(rèn)識掌握TLC549芯片使用方法,并且運(yùn)用實驗程序做出了正確的結(jié)果。同時,對于單片機(jī)的i/o編程有了認(rèn)識,掌握單片機(jī)I/O的編程方法。實驗四DS18B20溫度傳感器實驗一、實驗?zāi)康牧私鉁囟葌鞲衅麟娐返墓ぷ髟砹私鉁囟瓤刂频母驹碚莆找痪€總線接口的使用二、實驗說明輸入給定程序,配置選項,調(diào)試并運(yùn)行程序,觀察程序控制下仿真器輸出的變化。選中此項keil為硬件仿真設(shè)置Port串口:一般為COM3,Baudrate波特率為最大值:115200bit/s,最后確認(rèn)Dallas半導(dǎo)體公司的數(shù)字化溫度傳感器DS1820是世界上第一片支持“一線總線”接口的溫度傳感器?,F(xiàn)場溫度直接以“一線總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。DS18B20內(nèi)部結(jié)構(gòu)主要由四局部組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置存放器。DS18B20的管腳排列如下,DQ為數(shù)字信號輸入/輸出端;GND為電源地;VDD為外接供電電源輸入端〔在寄生電源接線方式時接地〕。DS18B20中的溫度傳感器可完成對溫度的測量,以12位轉(zhuǎn)化為例:用16位符號擴(kuò)展的二進(jìn)制補(bǔ)碼讀數(shù)形式提供,以0.0625℃/LSB形式表達(dá),其中S為符號位。這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在18B20的兩個8比特的RAM中,二進(jìn)制中的前面5位是符號位,如果測得的溫度大于0,這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于0.0625即可得到實際溫度。例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FF6FH,-55℃的數(shù)字輸出為FC90H。本實驗在讀取溫度的根底上,完成類似空調(diào)恒溫控制的實驗。用加熱電阻代替加熱電機(jī)。溫度值通過LED靜態(tài)顯示電路以十進(jìn)制形式顯示出來,制冷采用自然冷卻。用C51進(jìn)行程序設(shè)計,選擇匯編或者C語言編程均可,要求程序結(jié)構(gòu)清晰,模塊化結(jié)構(gòu),反復(fù)調(diào)用局部做成子模塊,有必要的注釋。編寫程序上機(jī)調(diào)試通過,實驗報告要求提交程序流程圖及源程序。三、實驗內(nèi)容及步驟〔完成分值:100分/單個程序〕本實驗需要用到本實驗需要用到單片機(jī)最小應(yīng)用系統(tǒng)〔F1區(qū)〕、串行靜態(tài)顯示〔I3區(qū)〕和溫度傳感器模塊〔C3區(qū)〕。DS18B20的CONTROL接最小應(yīng)用系統(tǒng)P1.4,OUT接最小應(yīng)用系統(tǒng)P2.0。最小系統(tǒng)的P1.0,P1.1接串行靜態(tài)顯示的DIN,CLK端。翻開相關(guān)模塊電源。用串行數(shù)據(jù)通信線連接計算機(jī)與仿真器,把仿真頭插到模塊的單片機(jī)鎖緊插座中,請注意仿真器的方向:缺口朝上。請指導(dǎo)老師檢查接線后再翻開模塊電源。翻開KeiluVision2仿真軟件,首先建立本實驗的工程文件,接著添加源程序,進(jìn)行編譯,直到編譯無誤。全速運(yùn)行程序。程序正常運(yùn)行后,按下自鎖開關(guān)‘控制’SIC。LED數(shù)顯為“XX”為十進(jìn)制溫度測量值,“XX”為十進(jìn)制溫度設(shè)定值,按下自鎖開關(guān)“控制”SIC那么加熱源開始加熱,溫度也隨著變化,當(dāng)加熱到設(shè)定的控制溫度時如40度時,停止加熱。注意:實驗完成以后務(wù)必關(guān)閉該模塊,防止沒有控制無限加熱造成模塊損壞四、電路原理圖實驗程序#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintsbitDQ=P2^0;//ds18b20與單片機(jī)連接口sbitDin=P1^0;//sbitCLK=P1^1;//unsignedcharcodeLED_Map[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71,0,0x40};//0-F,,-uchardatadisdata[5];uinttvalue;//溫度值uchartflag;//溫度正負(fù)標(biāo)志voiddelay(intcount){unsignedinti; for(i=0;i<count;i++);}//數(shù)碼顯示voiddisplay(){ucharLED_code[5];uchari,j,chr,sel;///////////////for(i=0;i<4;i++)LED_code[i]=LED_Map[disdata[i]];//LED_code[i]=LED_Map[0]; if((LED_code[0]==0)&&(tflag==1)&&(LED_code[1]!=0))LED_code[0]=0x40;//顯示負(fù)號 if((LED_code[1]==0)&&(tflag==1))LED_code[0]=0x40;for(i=0;i<4;i++){chr=LED_code[3-i];//if(i==1)chr=chr|0x80; sel=0x80;for(j=0;j<8;j++) { Din=chr&sel; CLK=0; sel=sel>>1; delay(1); CLK=1;delay(1); } }}/******************************ds1820程序***************************************/voiddelay_18B20(unsignedinti)//延時1微秒{ while(i--);}voidds1820rst()/*ds1820復(fù)位*/{unsignedcharx=0; DQ=1;//DQ復(fù)位 delay_18B20(4);//延時 DQ=0;//DQ拉低 delay_18B20(100);//精確延時大于480us DQ=1;//拉高 delay_18B20(40); }uchards1820rd()/*讀數(shù)據(jù)*/{unsignedchari=0; unsignedchardat=0; for(i=8;i>0;i--) {DQ=0;//給脈沖信號 dat>>=1; DQ=1;//給脈沖信號 if(DQ) dat|=0x80; delay_18B20(10); } return(dat);}voidds1820wr(ucharwdata)/*寫數(shù)據(jù)*/{unsignedchari=0;for(i=8;i>0;i--){DQ=0;DQ=wdata&0x01;delay_18B20(10);DQ=1;wdata>>=1;}}////////////////////////////////////////////////////////read_temp()/*讀取溫度值并轉(zhuǎn)換*/{uchara,b;ds1820rst();ds1820wr(0xcc);//*跳過讀序列號*/ds1820wr(0x44);//*啟動溫度轉(zhuǎn)換*/ds1820rst();ds1820wr(0xcc);//*跳過讀序列號*/ds1820wr(0xbe);//*讀取溫度*/a=ds1820rd();b=ds1820rd();tvalue=b;tvalue<<=8;tvalue=tvalue|a;if(tvalue<0x0fff)tflag=0;else{tvalue=~tvalue+1;//求負(fù)數(shù)絕對值tflag=1;}tvalue=tvalue*(0.625);//溫度值擴(kuò)大10倍,精確到1位小數(shù) return(tvalue);}/*******************************************************************/voidds1820disp()//溫度值顯示{disdata[0]=tvalue/1000;//百位數(shù)disdata[1]=tvalue%1000/100;//十位數(shù)disdata[2]=tvalue%100/10;//個位數(shù)disdata[3]=tvalue%10;//小數(shù)位if(disdata[0]==0) { disdata[0]=0x10;//如果百位為0,不顯示 if(disdata[1]==0) { disdata[1]=0x10;//如果百位為0,十位為0也不顯示 } }display();}/********************主程序*************************/voidmain(){uinti; while(1) { read_temp();//讀取溫度ds1820disp();//顯示 for(i=0;i<255;i++)delay(100); }}五實心得體會通過軟件編及仿真,了解了溫度傳感器電路的工作原理,編程過程中,熟悉并了解溫度控制的根本原理,以及熟悉了解并掌握了一線總線接口的使用實驗五步進(jìn)電機(jī)控制實驗一、實驗?zāi)康?.了解步進(jìn)電機(jī)控制的根本原理2.掌握控制步進(jìn)電機(jī)轉(zhuǎn)動的編程方法3.了解單片機(jī)控制外部設(shè)備的常用電路二、實驗說明輸入給定程序,配置選項,調(diào)試并運(yùn)行程序,觀察程序控制下仿真器輸出的變化。選中此項keil為硬件仿真設(shè)置Port串口:一般為COM3,Baudrate波特率為最大值:115200bit/s,最后確認(rèn)步進(jìn)電動機(jī)有三線式、五線式、六線式三種,但其控制方式均相同,必須以脈沖電流來驅(qū)動。假設(shè)每旋轉(zhuǎn)一圈以20個勵磁信號來計算,那么每個勵磁信號前進(jìn)18度,其旋轉(zhuǎn)角度與脈沖數(shù)成正比,正、反轉(zhuǎn)可由脈沖順序來控制。步進(jìn)電動機(jī)的勵磁方式可分為全步勵磁及半步勵磁,其中全步勵磁又有1相勵磁及2相勵磁之分,而半步勵磁又稱1-2相勵磁。圖為步進(jìn)電動機(jī)的控制等效電路,適應(yīng)控制A、B、/A、/B的勵磁信號,即可控制步進(jìn)電動機(jī)的轉(zhuǎn)動。每輸出一個脈沖信號,步進(jìn)電動機(jī)只走一步。因此,依序不斷送出脈沖信號,即可步進(jìn)電動機(jī)連續(xù)轉(zhuǎn)動。用C51進(jìn)行程序設(shè)計,選擇匯編或者C語言編程均可,要求程序結(jié)構(gòu)清晰,模塊化結(jié)構(gòu),反復(fù)調(diào)用局部做成子模塊,有必要的注釋。編寫程序上機(jī)調(diào)試通過,實驗報告要求提交程序流程圖及源程序。三、實驗內(nèi)容及步驟〔完成分值:100分/單個程序〕本實驗需要用到本實驗需要用到單片機(jī)最小應(yīng)用系統(tǒng)〔F1區(qū)〕、步進(jìn)電機(jī)模塊〔M2區(qū)〕和查詢式鍵盤〔B2區(qū)〕。單片機(jī)最小應(yīng)用系統(tǒng)的P1.0、P1.1、P1.2、P1.3口分別接步進(jìn)電機(jī)模塊的SA、SB、SC、SD。最小系統(tǒng)的P2.0、P2.1、P2.2分別對應(yīng)的接查詢式鍵盤的K0、K1、K2鍵。翻開相關(guān)模塊的電源開關(guān)。用串行數(shù)據(jù)通信線連接計算機(jī)與仿真器,把仿真頭插到模塊的單片機(jī)鎖緊插座中,請注意仿真器的方向:缺口朝上。請指導(dǎo)老師檢查接線后再翻開模塊電源。翻開KeiluVision2仿真軟件,首先建立本實驗的工程文件,接著添加源程序,進(jìn)行編譯,直到編譯無誤。全速運(yùn)行程序。按下K0鍵電機(jī)正轉(zhuǎn),K1反轉(zhuǎn),K2電機(jī)STOP。四、電路原理圖實驗程序#include<reg52.h>#defineucharunsignedchar#defineuintunsignedint voiddelay(uinta);constucharstep_table1[]={0x01,0x02,0x04,0x08};//sbitzhengzhuang=P2^0;sbitfanzhuang=P2^1;sbitstop=P2^2;voiddelay(uinta){uinti,j;for(i=a;i>0;i--)for(j=122;j>0;j--);}voidmain(){uchari,flag0;while(1){zhengzhuang=1;fanzhuang=1; stop=1; flag0=0; if((!zhengzhuang)&&(fanzhuang)&&(stop))flag0=1; if((zhengzhuang)&&(!fanzhuang)&&(stop))flag0=2; if(!stop)flag0=3; if(flag0!=0) { for(i=0;i<4;i++){if(flag0==1) P1=step_table1[i]; if(flag0==2) P1=step_table1[3-i]; if(flag0==3) P1=0; P1=~P1;delay(100);} }}}五實驗心得體會本次實驗成功的實現(xiàn)了步進(jìn)電機(jī)的正反轉(zhuǎn)控制,對仿真軟件以及51單片機(jī)編譯軟件能更加熟練地運(yùn)用,試驗中,了解了步進(jìn)電機(jī)的根本原理,掌握控制步進(jìn)電機(jī)轉(zhuǎn)動的編程方法。對試驗臺中外部電路也有了進(jìn)一步的人是和了解,了解了單片機(jī)控制外部設(shè)備的常用電路。實驗六直流電機(jī)控制實驗串行靜態(tài)顯示實驗一、實驗?zāi)康?.了解脈寬調(diào)制〔PWM〕的原理2.學(xué)習(xí)用PWM輸出模擬量驅(qū)動直流電機(jī)3.熟悉51系列單片機(jī)的延時程序二、實驗說明輸入給定程序,配置選項,調(diào)試并運(yùn)行程序,觀察程序控制下仿真器輸出的變化。選中此項keil為硬件仿真設(shè)置Port串口:一般為COM3,Baudrate波特率為最大值:115200bit/s,最后確認(rèn)PWM是單片機(jī)上常用的模擬量輸出方法,用占空比不同的脈沖驅(qū)動直流電機(jī)轉(zhuǎn)動,從而得到不同的轉(zhuǎn)速。程序中通過調(diào)整輸出脈沖的占空比來調(diào)節(jié)直流電機(jī)的轉(zhuǎn)速。使用光電測速元件測速,當(dāng)它與圓盤上的空位相靠近時,光電元件輸出低電平,當(dāng)它被遮住時,光電元件輸出高電平。圓盤轉(zhuǎn)動一周時那么產(chǎn)生12個脈沖,直流電機(jī)轉(zhuǎn)動時,光電元件輸出連續(xù)的脈沖信號,單片機(jī)記錄其脈沖信號,就可以測出直流電機(jī)的轉(zhuǎn)速。另外增加顯示電路,可把電機(jī)的轉(zhuǎn)速顯示出來。用C51進(jìn)行程序設(shè)計,選擇匯編或者C語言編程均可,要求程序結(jié)構(gòu)清晰,模塊化結(jié)構(gòu),反復(fù)調(diào)用局部做成子模塊,有必要的注釋。編寫程序上機(jī)調(diào)試通過,實驗報告要求提交程序流程圖及源程序。順便說一下:易念恩老師處有大量關(guān)于各種單片機(jī)的資料〔8G以上〕,如果確實有興趣在這方面開展可以帶上USB3.0的U盤或者移動硬盤〔USB2.0拷貝太慢〕找易老師拷貝資料。三、實驗內(nèi)容及步驟〔完成分值:60分/單個程序〕本實驗需要用到本實驗需要用到單片機(jī)最小應(yīng)用系統(tǒng)〔F1區(qū)〕、串行靜態(tài)顯示〔I3區(qū)〕和直流電機(jī)驅(qū)動模塊〔M1區(qū)〕。單片機(jī)最小應(yīng)用系統(tǒng)的P1.7接直流電機(jī)驅(qū)動模塊的PWM輸入口Control,最小系統(tǒng)的INTO接直流電機(jī)驅(qū)動模塊PULSEOUT,最小系統(tǒng)的P1.0、P1.1接串行靜態(tài)顯示的DIN、CLK。翻開相關(guān)模塊電源。用串行數(shù)據(jù)通信線連接計算機(jī)與仿真器,把仿真頭插到模塊的單片機(jī)鎖緊插座中,請注意仿真器的方向:缺口朝上。請指導(dǎo)老師檢查接線后再翻開模塊電源。翻開KeiluVision2仿真軟件,首先建立本實驗的工程文件,接著添加源程序,進(jìn)行編譯,直到編譯無誤。全速運(yùn)行程序。觀察直流電機(jī)轉(zhuǎn)速,一段時間后控制在程序設(shè)定的值30轉(zhuǎn)/S的左右。四、電路原理圖實驗程序#include<reg51.h>typedefunsignedcharuchar; typedefunsignedintuint; sbitPWM_out=P1^7; sbitmRun=P2^0; sbitDin=P1^0;//sbitCLK=P1^1;// uintperiod=300; uinttime=0; uintPWM_h=100; uintcount=0; uintspeed=0; uintdat_t=0; uchardispflag=0; uchardatadisdata[8];unsignedcharcodeLED_Map[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71,0,0x40};//0-F,,-voiddelay(intcount){unsignedinti; for(i=0;i<count;i++);}//數(shù)碼顯示voiddisplay(){ucharLED_code[8];uchari,j,chr,sel;///////////////for(i=0;i<8;i++)LED_code[i]=LED_Map[disdata[i]];//LED_code[i]=0x3f; for(i=0;i<8;i++){chr=LED_code[i];// if(i==1)chr=chr|0x80; sel=0x80;for(j=0;j<8;j++) { Din=chr&sel; CLK=0; sel=sel>>1; delay(1); CLK=1;delay(1); } }}voidspeed_disp()//速度顯示 {//speed=123; disdata[0]=speed/100;//取10位disdata[1]=speed%100/10;//取個位disdata[2]=speed%10;//取個位 disdata[3]=16; disdata[4]=16; disdata[5]=16; disdata[6]=16; disdata[7]=16;if(disdata[2]==0) { disdata[2]=0x10;//如果十位為零那么不顯示 }display();}voidint0()interrupt0using0 { count++; if(dat_t>=1000) {speed=(count-1)*10/12; dispflag=1; count=0; dat_t=0; } } voidtimer0()interrupt1using1{ TH0=0xfc;//定時器裝載初值,設(shè)置脈沖信號的占空比1ms(65536-1000=fc18)TL0=0x18; time++; dat_t++; if(time>period)time=0; if(time<=PWM_h)/*高電平持續(xù)時間結(jié)束,變低*/PWM_out=1; /*經(jīng)過反相器反相*/ elseif((time>PWM_h)&&(time<=period))/*周期時間到,變高*/{ //time=0;PWM_out=0; /*經(jīng)過反相器反相*/ } //if(time==period)time=0;}voidmain(){ucharflag0=0;P1=0x00;PWM_out=0;speed=0;speed_disp();TMOD=0x01;/*定時器0方式1*/TH0=0xfc;//定時器裝載初值,設(shè)置脈沖信號的占空比1ms(65536-1000=fc18)TL0=0x18;dat_t=0;ET0=1;/*開定時器0中斷*/TR0=1;/*啟動定時器0*/IT0=1;EX0=1;EA=1;while(1){ if(mRun==0) { EA=1;/*開CPU中斷*/ flag0=1; if(dispflag==1) { dispflag=0; speed_disp(); } } if(mRun==1) { EA=0; /*關(guān)CPU中斷*/ PWM_out=0; if(flag0==1) { speed=0; speed_disp(); flag0=0; } }}}附加題修改程序,使電機(jī)從高速到低速再到高速,反復(fù)循環(huán)程序#include<reg51.h>typedefunsignedcharuchar; typedefunsignedintuint; sbitPWM_out=P1^7; sbitmRun=P2^0; sbitDin=P1^0;//sbitCLK=P1^1;// uintperiod=300; uinttime=0; uintPWM_h=80; uintcount=0; uintspeed=0; uintdat_t=0; uintturn_flag=1; uchardispflag=0; uchardatadisdata[8];unsignedcharcodeLED_Map[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71,0,0x40};//0-F,,-voiddelay(intcount){unsignedinti; for(i=0;i<count;i++);}//數(shù)碼顯示voiddisplay(){ucharLED_code[8];uchari,j,chr,sel;///////////////for(i=0;i<8;i++)LED_code[i]=LED_Map[disdata[i]];//LED_code[i]=0x3f; for(i=0;i<8;i++){chr=LED_code[i];// if(i==1)chr=chr|0x80; sel=0x80;for(j=0;j<8;j++) { Din=chr&sel; CLK=0; sel=sel>>1; delay(1); CLK=1;delay(1); } }}voidspeed_disp()//速度顯示 {//speed=123; disdata[0]=speed/100;//取10位disdata[1]=speed%100/10;//取個位disdata[2]=speed%10;//取個位 disdata[3]=16; disdata[4]=16; disdata[5]=16; disdata[6]=16; disdata[7]=16;if(disdata[2]==0) { disdata[2]=0x10;//如果十位為零那么不顯示 }display();}voidint0()interrupt0using0 { count++; if(dat_t>=1000) {speed=(count-1)*10/12; dispflag=1; count=0; dat_t=0; } } voidtimer0()interrupt1using1{ TH0=0xfc;//定時器裝載初值,設(shè)置脈沖信號的占空比1ms(65536-1000=fc18)TL0=0x18; time++; dat_t++; if(time>period)time=0; if(time<=PWM_h)/*高電平持續(xù)時間結(jié)束,變低*/PWM_out=1; /*經(jīng)過反相器反相*/ elseif((time>PWM_h)&&(time<=period))/*周期時間到,變高*/{ //time=0;PWM_out=0; /*經(jīng)過反相器反相*/ } //if(time==period)time=0;}voidmain(){ucharflag0=0;P1=0x00;PWM_out=0;speed=0;speed_disp();TMOD=0x01;/*定時器0方式1*/TH0=0xfc;//定時器裝載初值,設(shè)置脈沖信號的占空比1ms(65536-1000=fc18)TL0=0x18;dat_t=0;ET0=1;/*開定時器0中斷*/TR0=1;/*啟動定時器0*/IT0=1;EX0=1;EA=1;while(1){ if(mRun==0) { EA=1;/*開CPU中斷*/ flag0=1; if(dispflag==1) { dispflag=0; speed_disp(); PWM_h=200; turn_flag=0; if((PWM_h<200)&(turn_flag==1)) { PWM_h+=20; } turn_flag=0; if((20<=PWM_h<300)&&(turn_flag==0)) { PWM_h-=20; } //if(PWM_h<=20)turn_flag=1; } // if(t_flag>=1000){ //PWM_h++; //t_flag==0;} } if(mRun==1) { EA=0; /*關(guān)CPU中斷*/ PWM_out=0; if(flag0==1) { speed=0; speed_disp(); flag0=0; } }}}2. 參加控制開關(guān),不同開關(guān)控制對應(yīng)電機(jī)高轉(zhuǎn)速、中等轉(zhuǎn)速、低轉(zhuǎn)速。程序#include<reg51.h>typedefunsignedcharuchar; typedefunsignedintuint; sbitPWM_out=P1^7; sbitmRun=P2^0; sbitDin=P1^0;//sbitCLK=P1^1;//sbitdi=P2^5;sbitzhong=P2^6;sbitgao=P2^7; uintperiod=300; uinttime=0; uintPWM_h=80; uintcount=0; uintspeed=0; uintdat_t=0; uintturn_flag=1; uchardispflag=0; uchardatadisdata[8];unsignedcharcodeLED_Map[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71,0,0x40};//0-F,,-voiddelay(intcount){unsignedinti;

溫馨提示

  • 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

提交評論