基于msp430g2553单片机ADC测量外部直流电压_第1页
基于msp430g2553单片机ADC测量外部直流电压_第2页
基于msp430g2553单片机ADC测量外部直流电压_第3页
基于msp430g2553单片机ADC测量外部直流电压_第4页
基于msp430g2553单片机ADC测量外部直流电压_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include<msp430g2553.h>#defineucharunsignedchar#defineuintunsignedint#defineLCD_CON_DIRP2DIR#defineLCD_CON_INP2IN#defineLCD_CON_OUTP2OUT#defineLCD_RSBIT0//p2.5接51p2.5#defineLCD_RWBIT1//p2.0接51p2.6#defineLCD_ENBIT2//p2.1接51p2.7#defineLCD_DATA_DIRP1DIR#defineLCD_DATA_INP1IN#defineLCD_DATA_OUTP1OUT#defineA1000#defineB100#defineX10voidInitOsc(void);voidInitLCD(void);voidwrite_command(ucharcommand);voidwrite_data(uchardata);voidDisplay_ZFC(uchar*s);voidLCD_Set_xy(ucharx,uchary);voidTrans_val(uintHex_Val);voidDisplay_Volte(uintHex_Val);voidMeasure_Volte(void);ucharnum[]={".v"};ucharvolte[]={"Volt:"};uintindex=0;inti;unsignedlongsum=0;uintHex_Val;#defineNum_of_Results32uintresults[Num_of_Results];//保存ADC转换成果旳数组uintaverage;/****************************************************************************ADC初始化*****************************************************************************/voidADC_Init(void){ADC10CTL0=ADC10SHT_2+ADC10ON+ADC10IE;//ADC10ON,interruptenabledADC10CTL1=INCH_1;//inputA1ADC10AE0|=0x02;//二次采集}/****************************************************************************DCO时钟初始化设为1MHz*****************************************************************************/voidDCO_Init(void){ if(CALBC1_1MHZ==0xFF||CALDCO_1MHZ==0xFF)ﻩﻩ{ﻩﻩﻩwhile(1); } BCSCTL1=CALBC1_1MHZ;ﻩDCOCTL=CALDCO_1MHZ;ﻩBCSCTL2=SELM_0+DIVM_0;}/****************************************************************************向12864发送字节*****************************************************************************/voidSendByte(ucharZdata){ uinti;ﻩfor(i=0;i<8;i++) {ﻩﻩif((Zdata<<i)&0x80) ﻩ{ﻩﻩﻩLCD_CON_OUT|=LCD_RW;//clk始终信号为高ﻩﻩ}ﻩﻩelse ﻩ{ﻩ LCD_CON_OUT&=~LCD_RW;//clk始终信号为低ﻩﻩ}ﻩﻩLCD_CON_OUT&=~LCD_EN;ﻩ LCD_CON_OUT|=LCD_EN;ﻩ}}/****************************************************************************向12864写命令*****************************************************************************/voidwrite_command(ucharcommand){ LCD_CON_OUT|=LCD_RS;ﻩSendByte(0xF8);ﻩSendByte(command&0xF0); SendByte((command<<4)&0xF0);ﻩ_delay_cycles(200);}/****************************************************************************向12864写数据*****************************************************************************/voidwrite_data(uchardata){ﻩLCD_CON_OUT|=LCD_RS;ﻩSendByte(0xFA);ﻩSendByte(data&0xF0);ﻩSendByte((data<<4)&0xF0); _delay_cycles(200);}voidDisplay_ZFC(uchar*s){ while(*s>0){ﻩﻩwrite_data(*s);ﻩﻩs++;ﻩﻩ_delay_cycles(5000);}}/****************************************************************************拟定12864屏幕显示旳坐标位置(x,y)*****************************************************************************/voidLCD_Set_xy(ucharx,uchary){ucharaddress;ﻩswitch(x)ﻩ{ ﻩcase0:address=0x80+y;break;case1:address=0x80+y;break;ﻩﻩcase2:address=0x90+y;break;ﻩﻩcase3:address=0x88+y;break;ﻩﻩcase4:address=0x98+y;break; ﻩdefault:address=0x80+y;break;ﻩ}write_command(address);//写入地址命令}/****************************************************************************lcd初始化*****************************************************************************/voidInitLCD(void){ﻩLCD_CON_DIR|=0xFF;//p2口定义为输出ﻩwrite_command(0x01);//清屏ﻩwrite_command(0x30);ﻩ_delay_cycles(5000); write_command(0x0c);ﻩ_delay_cycles(5000);}/****************************************************************************采集到旳数据转化成电压形式*****************************************************************************/voidTrans_val(uintHex_Val){ﻩunsignedlongcaltmp;ﻩuintCurr_Volt,volt,max;ﻩuinta[50];ﻩcaltmp=Hex_Val;caltmp=caltmp*34600;//caltmp=Hex_Val*34600Curr_Volt=caltmp>>10;//Curr_Volt=caltmp/2^nvolt=Curr_Volt;for(i=0;i<50;i++){a[i]=volt;}for(max=a[0],i=0;i<50;i++){if(a[i]>max)max=a[i];}Curr_Volt=max;Display_Volte(Curr_Volt);}/****************************************************************************主函数*****************************************************************************/voidmain(void){ﻩWDTCTL=WDTPW+WDTHOLD;ﻩADC_Init();//ADC初始化ﻩDCO_Init();//DCO初始化 InitLCD();//12864液晶初始化ﻩwhile(1)ﻩ{ ﻩMeasure_Volte();//测量直流电压值并且显示ﻩ}}/****************************************************************************测量电压*****************************************************************************/voidMeasure_Volte(void){ﻩADC10CTL0|=ENC+ADC10SC;//Samplingandconversionstart __bis_SR_register(CPUOFF+GIE);ﻩresults[index++]=ADC10MEM;//Moveresultsﻩif(index==Num_of_Results) { ﻩindex=0; ﻩfor(i=0;i<Num_of_Results;i++) ﻩ{ﻩ ﻩsum+=results[i]; ﻩ}ﻩ sum>>=5;//除以32ﻩﻩTrans_val(sum); ﻩsum=0;ﻩ}}/****************************************************************************显示电压值*****************************************************************************/voidDisplay_Volte(uintHex_Val){ﻩuintCurr_Volt; Curr_Volt=Hex_Val;ﻩwr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论