基于msp430g2553单片机ADC测量外部直流电压.doc

上传人:rrsccc 文档编号:9608021 上传时间:2021-03-11 格式:DOC 页数:6 大小:37.50KB
返回 下载 相关 举报
基于msp430g2553单片机ADC测量外部直流电压.doc_第1页
第1页 / 共6页
基于msp430g2553单片机ADC测量外部直流电压.doc_第2页
第2页 / 共6页
基于msp430g2553单片机ADC测量外部直流电压.doc_第3页
第3页 / 共6页
基于msp430g2553单片机ADC测量外部直流电压.doc_第4页
第4页 / 共6页
基于msp430g2553单片机ADC测量外部直流电压.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《基于msp430g2553单片机ADC测量外部直流电压.doc》由会员分享,可在线阅读,更多相关《基于msp430g2553单片机ADC测量外部直流电压.doc(6页珍藏版)》请在三一文库上搜索。

1、#include#define uchar unsigned char#define uint unsigned int#define LCD_CON_DIR P2DIR#define LCD_CON_IN P2IN#define LCD_CON_OUT P2OUT#define LCD_RS BIT0 /p2.5接51 p2.5#define LCD_RW BIT1 /p2.0接51 p2.6#define LCD_EN BIT2 /p2.1接51 p2.7#define LCD_DATA_DIR P1DIR#define LCD_DATA_IN P1IN#define LCD_DATA_O

2、UT P1OUT#define A 1000#define B 100#define X 10void InitOsc(void);void InitLCD(void);void write_command(uchar command);void write_data(uchar data);void Display_ZFC(uchar *s);void LCD_Set_xy(uchar x,uchar y);void Trans_val(uint Hex_Val);void Display_Volte(uint Hex_Val);void Measure_Volte(void);uchar

3、num=0123456789.v;uchar volte=Volt: ;uint index=0;int i;unsigned long sum=0;uint Hex_Val;#define Num_of_Results 32uint resultsNum_of_Results; /保存ADC转换结果的数组uint average;/* ADC初始化*/void ADC_Init(void) ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; / ADC10ON, interrupt enabled ADC10CTL1 = INCH_1; / input A

4、1 ADC10AE0 |= 0x02; /二次采集/* DCO时钟初始化 设为1MHz*/void DCO_Init(void)if(CALBC1_1MHZ=0xFF|CALDCO_1MHZ=0xFF)while(1);BCSCTL1 = CALBC1_1MHZ;DCOCTL = CALDCO_1MHZ; BCSCTL2 = SELM_0 +DIVM_0;/* 向12864发送字节*/void SendByte(uchar Zdata)uint i;for(i=0; i8; i+)if(Zdata i) & 0x80)LCD_CON_OUT |= LCD_RW; /clk始终信号为高elseL

5、CD_CON_OUT &=LCD_RW; /clk始终信号为低LCD_CON_OUT &= LCD_EN;LCD_CON_OUT |= LCD_EN;/* 向12864写命令*/void write_command(uchar command)LCD_CON_OUT |= LCD_RS;SendByte(0xF8);SendByte(command & 0xF0);SendByte(command4)&0xF0);_delay_cycles(200);/* 向12864写数据*/void write_data(uchar data)LCD_CON_OUT |= LCD_RS;SendByte(

6、0xFA);SendByte(data & 0xF0);SendByte(data 0) write_data(*s);s+;_delay_cycles(5000); /* 确定12864屏幕显示的坐标位置(x,y)*/void LCD_Set_xy( uchar x, uchar y ) uchar address;switch(x)case 0: address = 0x80 + y; break; case 1: address = 0x80 + y; break;case 2: address = 0x90 + y; break; case 3: address = 0x88 + y;

7、 break;case 4: address = 0x98 + y; break;default:address = 0x80 + y; break; write_command(address); /写入地址命令/* lcd初始化*/void InitLCD(void)LCD_CON_DIR |= 0xFF; /p2口定义为输出write_command(0x01); /清屏write_command(0x30);_delay_cycles(5000);write_command(0x0c);_delay_cycles(5000);/* 采集到的数据转化成电压形式*/void Trans_v

8、al(uint Hex_Val)unsigned long caltmp;uint Curr_Volt,volt,max;uint a50;caltmp = Hex_Val; caltmp = caltmp*34600; /caltmp = Hex_Val * 34600 Curr_Volt = caltmp 10 ; /Curr_Volt = caltmp / 2n volt = Curr_Volt; for(i=0;i50;i+) ai=volt; for(max=a0,i=0;imax)max=ai; Curr_Volt = max; Display_Volte(Curr_Volt);/

9、* 主函数*/void main(void)WDTCTL = WDTPW + WDTHOLD;ADC_Init(); /ADC初始化DCO_Init(); /DCO初始化InitLCD(); /12864液晶初始化while(1)Measure_Volte(); /测量直流电压值并且显示/* 测量电压*/void Measure_Volte(void) ADC10CTL0 |= ENC + ADC10SC; / Sampling and conversion start _bis_SR_register(CPUOFF + GIE); resultsindex+ = ADC10MEM; / Mo

10、ve results if(index = Num_of_Results) index = 0; for(i = 0; i = 5; /除以32 Trans_val(sum); sum=0; /* 显示电压值*/void Display_Volte(uint Hex_Val)uint Curr_Volt;Curr_Volt = Hex_Val;write_command(0x90);for(i=0;i16;i+)write_data(voltei);write_command(0x93);write_data(numCurr_Volt / 10000);write_data(num10);wr

11、ite_data(numCurr_Volt % 10000/1000);write_data(numCurr_Volt % 10000 % 1000 / 100);write_data(numCurr_Volt % 10000 % 1000 % 100 / 10);write_data( );write_data(num11);/* ADC中断,进入低功耗模式 关闭CPU*/#pragma vector=ADC10_VECTOR _interrupt void ADC10_ISR(void) _bic_SR_register_on_exit(CPUOFF); / Clear CPUOFF bit from 0(SR) (注:可编辑下载,若有不当之处,请指正,谢谢!)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1