智能儀器實驗報告-3_第1頁
智能儀器實驗報告-3_第2頁
智能儀器實驗報告-3_第3頁
智能儀器實驗報告-3_第4頁
智能儀器實驗報告-3_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

實驗課程:智能儀器原理與設(shè)計實驗項目:基于MCS-51單片機的直流電壓測量顯示儀設(shè)計專業(yè)班級:學(xué)號:學(xué)號姓名:指導(dǎo)教師:實驗日期:2014年05月24日設(shè)計題目基于MCS-51單片機的直流電壓測量、顯示儀設(shè)計。硬件電路設(shè)計1602LCD主要技術(shù)參數(shù):顯示容量:16×2個字符,芯片工作電壓:4.5—5.5V,工作電流:2.0mA(5.0V),模塊最佳工作電壓:5.0V,字符尺寸:2.95×4.35(W×H)mm。5.1引腳功能說明1602LCD采用標準的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如圖7編號符號引腳說明編號符號引腳說明1VSS電源地9D2數(shù)據(jù)2VDD電源正極10D3數(shù)據(jù)3VL液晶顯示偏壓11D4數(shù)據(jù)4RS數(shù)據(jù)/命令選擇12D5數(shù)據(jù)5R/W讀/寫選擇13D6數(shù)據(jù)6E使能信號14D7數(shù)據(jù)7D0數(shù)據(jù)15BLA背光源正極8D1數(shù)據(jù)16BLK背光源負極圖7引腳接口說明表第1腳:VSS為地電源。第2腳:VDD接5V正電源。第3腳:VL為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度。第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當RS為低電平R/W為高電平時可以讀忙信號,當RS為高電平R/W為低電平時可以寫入數(shù)據(jù)。第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。第15腳:背光源正極。第16腳:背光源負極。5.21602LCD的指令說明及時序1602液晶模塊內(nèi)部的控制器共有11條控制指令,如圖8序號指令RSR/WD7D6D5D4D3D2D1D01清顯示00000000012光標返回000000001*3置輸入模式00000001I/DS4顯示開/關(guān)控制0000001DCB5光標或字符移位000001S/CR/L**6置功能00001DLNF**7置字符發(fā)生存貯器地址0001字符發(fā)生存貯器地址8置數(shù)據(jù)存貯器地址001顯示數(shù)據(jù)存貯器地址9讀忙標志或地址01BF計數(shù)器地址10寫數(shù)到CGRAM或DDRAM)10要寫的數(shù)據(jù)內(nèi)容11從CGRAM或DDRAM讀數(shù)11讀出的數(shù)據(jù)內(nèi)容圖81602液晶模塊的讀寫操作、屏幕和光標的操作都是通過指令編程來實現(xiàn)的。(說明:1為高電平、0為低電平)指令1:清顯示,指令碼01H,光標復(fù)位到地址00H位置。指令2:光標復(fù)位,光標返回到地址00H。指令3:光標和顯示模式設(shè)置I/D:光標移動方向,高電平右移,低電平左移S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效。指令4:顯示開關(guān)控制。D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示C:控制光標的開與關(guān),高電平表示有光標,低電平表示無光標B:控制光標是否閃爍,高電平閃爍,低電平不閃爍。指令5:光標或顯示移位S/C:高電平時移動顯示的文字,低電平時移動光標。指令6:功能設(shè)置命令DL:高電平時為4位總線,低電平時為8位總線N:低電平時為單行顯示,高電平時雙行顯示F:低電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符。指令7:字符發(fā)生器RAM地址設(shè)置。指令8:DDRAM地址設(shè)置。指令9:讀忙信號和光標地址BF:為忙標志位,高電平表示忙,此時模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。指令10:寫數(shù)據(jù)。指令11:讀數(shù)據(jù)。讀操作時序1602LCD的一般初始化(復(fù)位)過程延時15mS寫指令38H(不檢測忙信號)延時5mS寫指令38H(不檢測忙信號)延時5mS寫指令38H(不檢測忙信號)以后每次寫指令、讀/寫數(shù)據(jù)操作均需要檢測忙信號寫指令38H:顯示模式設(shè)置寫指令08H:顯示關(guān)閉寫指令01H:顯示清屏寫指令06H:顯示光標移動設(shè)置寫指令0CH:顯示開及光標設(shè)置三、軟件程程設(shè)計源代碼:#include<reg52.h> #include<intrins.h>#include<I2C.H> #include<stdio.H>#definePCF85910x90//PCF8591地址//elseIOsbitLS138A=P2^2;sbitLS138B=P2^3;sbitLS138C=P2^4;unsignedcharAD_CHANNEL;unsignedlongxdataLedOut[8];unsignedintD; unsignedcharStringBuf[10]={0}; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////typedefunsignedcharBYTE; //用BYTE代替unsignedchartypedefunsignedintWORD;//WORD代替unsignedinttypedefbitBOOL;//用BOOL代替bitsbitrs =P2^6;//復(fù)位端sbitrw=P2^5;//寫數(shù)據(jù)端sbitep=P2^7; //使能端BYTEcodedis1[]={"==...zhudc&huzh"};BYTEcodedis2[]={"WENHUA/*******************延時函數(shù)********************/voiddelay(BYTEms){ BYTEi; while(ms--) { for(i=0;i<250;i++) { _nop_(); _nop_();//空執(zhí)行消耗CPU時間達到等待的效果 _nop_(); _nop_(); } }}/*******************LCD側(cè)忙函數(shù)********************/BOOLlcd_bz(){ BOOLresult; rs=0; rw=1; ep=1; _nop_(); _nop_(); _nop_(); _nop_(); result=(BOOL)(P0&0x80);//檢測P0最高位是否為1 ep=0; returnresult;//返回側(cè)忙結(jié)果 }voidlcd_wcmd(BYTEcmd){ //寫入指令數(shù)據(jù)到LCD while(lcd_bz()); rs=0; rw=0; ep=0; _nop_(); _nop_(); P0=cmd;//將8位指令通過P0口傳給1602 _nop_(); _nop_();//用于產(chǎn)生一個脈沖寬度 _nop_(); _nop_(); ep=1; _nop_(); _nop_(); _nop_(); _nop_(); ep=0; }voidlcd_pos(BYTEpos){ //設(shè)定顯示位置 lcd_wcmd(pos|0x80);}voidlcd_wdat(BYTEdat) { //寫入字符顯示數(shù)據(jù)到LCD while(lcd_bz()); rs=1; rw=0; ep=0; P0=dat;//將8位數(shù)據(jù)通過P0口傳給1602 _nop_(); _nop_(); _nop_();//用于產(chǎn)生一個脈沖寬度 _nop_(); ep=1; _nop_(); _nop_(); _nop_(); _nop_(); ep=0; }voidlcd_init(){ //LCD初始化設(shè)定 lcd_wcmd(0x38); ////16*2顯示,5*7點陣,8位數(shù)據(jù) delay(1); lcd_wcmd(0x0c); //顯示開,關(guān)光標 delay(1); lcd_wcmd(0x06); //移動光標 delay(1); lcd_wcmd(0x01); //清除LCD的顯示內(nèi)容 delay(1);}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*******************************************************************ADC發(fā)送字節(jié)[命令]數(shù)據(jù)函數(shù)*******************************************************************/bitISendByte(unsignedcharsla,unsignedcharc){Start_I2c();//啟動總線SendByte(sla);//發(fā)送器件地址if(ack==0)return(0);SendByte(c);//發(fā)送數(shù)據(jù)if(ack==0)return(0);Stop_I2c();//結(jié)束總線return(1);}/*******************************************************************ADC讀字節(jié)數(shù)據(jù)函數(shù)*******************************************************************/unsignedcharIRcvByte(unsignedcharsla){unsignedcharc;Start_I2c();//啟動總線SendByte(sla+1);//發(fā)送器件地址if(ack==0)return(0);c=RcvByte();//讀取數(shù)據(jù)0Ack_I2c(1);//發(fā)送非就答位Stop_I2c();//結(jié)束總線return(c);}floatDivision(floatdivisor,floatdividend) //除法,保留后5位小數(shù){ floatdiv; div=(divisor*100000/dividend)*0.00001; returndiv;}unsignedintVoltage=0;//******************************************************************/main(){ BYTEi; lcd_init(); //初始化LCD delay(10); lcd_pos(3); // 置顯示位置為第一行的第5個字符 while(dis1[i]!='\0') { //顯示字符"VoltageDisplay" lcd_wdat(dis1[i]); i++; } i=0; while(1) { ISendByte(PCF8591,0x40); //對0通道進行AD轉(zhuǎn)換D=IRcvByte(PCF8591); //ADC0模數(shù)轉(zhuǎn)換 Voltage=Division(D,256)*5*100; //將數(shù)據(jù)轉(zhuǎn)換為電壓,保留2位小數(shù) StringBuf[0]=Voltage%1000/100+0x30; //將電壓值的各位轉(zhuǎn)換為ASCII碼,以便在LCD上顯示 StringBuf[1]='.'; StringBuf[2]=Voltage%100/10+0x30; StringB

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論