基于msp430g2553单片机ADC测量外部直流电压_第1页
基于msp430g2553单片机ADC测量外部直流电压_第2页
基于msp430g2553单片机ADC测量外部直流电压_第3页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

1、#include <msp430g2553 、 h> #define uchar unsigned char#defineuintunsigned int#defineLCDCON_DIR P2DIR#defineLCDCON_IN P2IN#defineLCDCON_OUT P2OUT#defineLCDRSBIT0/p2、5接 51 p2 、5#defineLCDRWBIT1/p2、0接 51 p2 、6#defineLCDENBIT2/p2、1接 51 p2 、7#define LCD_DATA_DIR P1DIR#define LCD_DATA_IN P1IN#define

2、 LCD_DATA_OUT P1OUT #define A 1000#define B 100#define X 10 void 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 M

3、easure_Volte ( void );uchar 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

4、;/ ADC10ON, interrupt enabledADC10CTL1 = INCH_1;/ input A1ADC10AE0 |= 0x02;/二次采集DCO时钟初始化 设为1MHz* void DCO_lnit (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; i<8; i+)

5、if (Zdata << i) & 0x80)/clk始终信号为高LCD_CON_OUT |= LCD_RW;else/clk始终信号为低LCD_CON_OUT &=LCD_RW;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(command<<4)&0xF0);

6、 _delay_cycles(200); /*向12864 写数据*/ void write_data (uchar data)LCD_CON_OUT |= LCD_RS;SendByte(0xFA);SendByte(data & 0xF0);SendByte(data << 4) & 0xF0);_delay_cycles(200);void Display_ZFC (uchar *s)while (*s > 0)write_data(*s);s+;_delay_cycles(5000);/* 确定 12864 屏幕显示的坐标位置 (x,y) */ voi

7、d LCD_Set_xy ( uchar x, uchar y )uchar address;switch (x)case0: address = 0x80 + y;breakcase1: address = 0x80 + y;breakcase2: address = 0x90 + y;breakcase3: address = 0x88 + y;breakcase4: address = 0x98 + y;breakdefault :address = 0x80 + y;break ;/ 写入地址命令write_command(address);led初始化*/void InitLCD (

8、void )LCD_CON_DIR |= OxFF;p2 口定义为输出write_command(0x01);/ 清屏write_command(0x30);_delay_cycles(5000);write_command(0x0c);_delay_cycles(5000);/*采集到的数据转化成电压形式*/void Trans_val (uint Hex_Val)unsigned long caltmp;uint Curr_Volt,volt,max;uint a50;caltmp = Hex_Val;caltmp = caltmp*34600;/caltmp = Hex Val * 34

9、600Curr_Volt = caltmp >> 10 ;Curr_Volt = caltmp / 2Anvolt = Curr_Volt;for (i=0;i<50;i+)ai=volt;for (max=a0,i=0;i<50;i+) if (ai>max)max=ai;Curr_Volt = max;Display_Volte(Curr_Volt);/*主函数*/void main ( void )WDTCTL = WDTPW + WDTHOLD;ADC_Init();/ADC 初始化DCO_Init();/DCO 初始化InitLCD();/12864 液

10、晶初始化while (1)Measure_Volte();/测量直流电压值并且显示测量电压*void Measure_Volte ( void )ADC10CTL0 |= ENC + ADC10SC;_bis_SR_register(CPUOFF + GIE); resultsindex+ = ADC10MEM;if (index = Num_of_Results)index = 0;for (i = 0; i < Num_of_Results; i+)sum += resultsi; sum >>= 5; Trans_val(sum); sum=0;/ Sampling a

11、nd conversion start/ Move results/ 除以 32显示电压值* void Display_Volte (uint Hex_Val)uint Curr_Volt;Curr_Volt = Hex_Val; write_command(0x90);for (i=0;i<16;i+) write_data(voltei); write_command(0x93);write_data(numCurr_Volt / 10000); write_data(num10);write_data(numCurr_Volt % 10000/1000); write_data(numCurr_Volt % 10000 % 1000 / 100); write_data(numCurr_Volt % 10000 % 1000 % 100 / 10); write_data( &#

温馨提示

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

评论

0/150

提交评论