基于MSP430數(shù)字式電壓表_第1頁
基于MSP430數(shù)字式電壓表_第2頁
基于MSP430數(shù)字式電壓表_第3頁
基于MSP430數(shù)字式電壓表_第4頁
基于MSP430數(shù)字式電壓表_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

課程設計題目:基于MSP430數(shù)字式電壓表院系:電子與信息工程學院班級:學生姓名:學號:指導老師:2016年7月6日Msp430數(shù)字電壓表設計目標采用MSP430單片機來實現(xiàn)數(shù)字電壓表的功能,本數(shù)字電壓表由MSP430F5529作為主控器件,A/D轉(zhuǎn)換器采用MSP430自帶轉(zhuǎn)換器,利用單片機靈活的編程設計和豐富的I/O端口,及其控制的準確性,實現(xiàn)數(shù)字電壓表的硬件電路和軟件設計。利用外部硬件電路對不同檔位的輸入電壓進行處理,使電壓達到單片機測量范圍,實現(xiàn)基本的數(shù)字電壓表功能,使其可以測量0~16.5V的電壓值,并且誤差控制在0.02v以內(nèi),最后在AY-SEBModule板的液晶屏上顯示。該系統(tǒng)的數(shù)字電壓表電路元件較少,成本低,調(diào)節(jié)工作簡單等優(yōu)點。在電壓測量中有較強的實用性。器件1.MSP430F5529LP開發(fā)板2.AY-SEBModule核心板3.測試前端(電阻分壓和電壓跟隨器組成)三、原理分析測試前端包括電阻分壓和電壓跟隨器,即輸入電壓前接電阻分壓電路和LM358運算放大器組成的電壓跟隨器,電阻分壓能增大測量量程(可通過改變兩個電阻比值而改變量程)。運算放大器同時起到增加輸入阻抗的作用,使得電阻分壓得到的電壓更穩(wěn)定,避免影響被測量的電壓值。用MSP430F5529開發(fā)板P6.0(A0)通道采用中斷方式,不//**************************數(shù)字電壓表程序**************************//MSP430F5529LP-MSP-EXP430F5529LP+AY-SEBModule核心板//描述:P60(A0)通道采用中斷方式,不間斷連續(xù)采集輸入電壓,再經(jīng)液晶屏顯示。//*******************************************************************#include<msp430.h>#include"grlib.h"#include"LCD_driver/Template_Driver.h"#include"images/images.h"#include"driverlib.h"http://*****************************************************************************//變量來存儲振蕩器故障標志的狀態(tài)//*******************************************************************uint16_tstatus;#defineNum_of_Results16#defineADC_REF 1500 //adc基準參考電壓(1.5V與2.5V)#defineADC_RANGE 4095 //adc轉(zhuǎn)換位數(shù)volatileuint16_tresults[Num_of_Results];volatileuint16_tadc_filter;Graphics_Contextg_sContext;#ifdefined(__IAR_SYSTEMS_ICC__)int16_t__low_level_init(void){//StopWDT(WatchDogTimer)WDTCTL=WDTPW+WDTHOLD;return(1);}#endiftContextg_sContext;externvoidGrStringNumberCentered(consttContext*pContext,int16_tNumber, uint8_tui8Dot,uint8_tui8X,uint8_tui8Y);voidmain(void){ volatileunsignedinti; volatileunsignedintvin_mv; _system_pre_init();//設置LCDTemplate_DriverInit();Graphics_initContext(&g_sContext,&g_sTemplate_Driver);Graphics_setForegroundColor(&g_sContext,ClrBlack);//設置前景為白色Graphics_setBackgroundColor(&g_sContext,ClrWhite); //設置背景為黑色Graphics_setFont(&g_sContext,&g_sFontCm16b); //設置字體Graphics_clearDisplay(&g_sContext);//清空顯示頁面 //繪制LCD界面 GrStringDraw(&g_sContext,"=shuzidianya=",AUTO_STRING_LENGTH,5,17,OPAQUE_TEXT); GrStringDraw(&g_sContext,"zhi:v",AUTO_STRING_LENGTH,5,34,OPAQUE_TEXT); GrFlush(&g_sContext);//打開全局中斷__bis_SR_register(GIE); while(1) { //轉(zhuǎn)換成電壓值(單位:mv)并乘于電阻分壓倍數(shù)11,得到電阻分壓電壓,在加上射級跟隨電壓0.707,最后得到檢測電壓。 vin_mv=(adc_filter*1.0*11)/ADC_RANGE*ADC_REF+707;//擦除舊的LCD顯示數(shù)據(jù) GrStringDrawCentered(&g_sContext,"",AUTO_STRING_LENGTH,70,40,OPAQUE_TEXT); //顯示電壓并把電壓換算成V(1V=1000mV) GrStringNumberCentered(&g_sContext,vin_mv,3,70,40); GrFlush(&g_sContext); }}//====================數(shù)字轉(zhuǎn)字符串函數(shù)=========================voidNum2String(int16_ti16Number,uint8_tui8Dot,uint8_t*p){ int8_ti=0,ds=0; uint8_tpos=0,m=0; uint8_tDispBuff[11]={0}; uint8_ttempBuff[11]={0}; if(i16Number<0) { i16Number=-i16Number; //處理負數(shù) DispBuff[0]='-'; //顯示負號 m=1; //跟蹤緩存位置 } else m=0; //等效為-清除負號 for(i=m;i<11;i++) //拆分數(shù)字 { DispBuff[i]=(i16Number%10); i16Number/=10; } for(i=10;i>=0;i--) //消隱無效"0" { if(DispBuff[i]==0)DispBuff[i]=0; else { pos=i; //保存當前第一個有效值 break; } } tempBuff[0]=DispBuff[0]; //保存對應的符號位 for(i=10;i>=m;i--) //高低位數(shù)據(jù)轉(zhuǎn)換存儲位置,高位在前,符號位不變 { if(i<=pos) { tempBuff[pos-i+m]=DispBuff[i]+0x30; } else tempBuff[i]=32; //空格(ASCII) } if(ui8Dot>0) { if(ui8Dot<pos+1-m) //pos+1-m為當前數(shù)組數(shù)據(jù)位數(shù) { for(i=pos;i>=pos-(ui8Dot-1);i--) { tempBuff[i+1]=tempBuff[i]; } tempBuff[pos-(ui8Dot-1)]=0x2e; //小數(shù)點 } else//if(ui8Dot>pos+m) { ds=ui8Dot-(pos+1-m); //移位距離(既需要增加幾個0) for(i=pos;i>=m;i--) { tempBuff[i+ds+2]=tempBuff[i]; //這里+2是為了增加前置:“0.” } for(i=0;i<ds;i++) { tempBuff[m+2+i]=0x30; //這里小數(shù)點后“補0操作” } tempBuff[m]=0x30; //添加前置 “0.” tempBuff[m+1]=0x2e; } } for(i=0;i<7;i++) { if(tempBuff[i]!='') { *p=tempBuff[i]; *p++; } else break; }}//-------------------//GrStringDraw(consttContext*pContext,constchar*pcString,longlLength,longlX,longlY,unsignedlongbOpaque)voidGrStringNumberCentered(consttContext*pContext,int16_tNumber,uint8_tui8Dot,uint8_tui8X,uint8_tui8Y){ uint8_tString[8]={0}; Num2String(Number,ui8Dot,String); GrStringDrawCentered(pContext,(constchar*)String,AUTO_STRING_LENGTH,ui8X,ui8Y,OPAQUE_TEXT);}#ifdefined(__TI_COMPILER_VERSION__)||defined(__IAR_SYSTEMS_ICC__)#pragmavector=ADC12_VECTOR__interrupt#elifdefined(__GNUC__)__attribute__((interrupt(ADC12_VECTOR)))#endifvoidADC12ISR(void)//adc12a中斷函數(shù){staticuint8_tindex=0;volatileuint8_ti;switch(__even_in_range(ADC12IV,34)){case0:break;//矢量0: 無case2:break;//矢量2: ADC溢出case4:break;//矢量4: ADC時序溢出case6://矢量6: ADC12IFG0//Moveresultsresults[index]=ADC12_A_getResults(ADC12_A_BASE,ADC12_A_MEMORY_0);index++;if(index==Num_of_Results){ adc_filter=0; for(i=0;i<Num_of_Results;i++) adc_filter+=results[i]; adc_filter>>=4;index=0;}case8:break;//Vector8:ADC12IFG1case10:break;//Vector10:ADC12IFG2case12:break;//Vector12:ADC12IFG3case14:break;//Vector14:ADC12IFG4case16:break;//Vector16:ADC12IFG5case18:break;//Vector18:ADC12IFG6case20:break;//Vector20:ADC12IFG7case22:break;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論