回复 40楼 rtx52 的帖子
#include "msp430g2553.h"
#include "lcd1602.h"
#define uint unsigned int
#define uchar unsigned char
float P10_v,P11_v,P10,P11;
uint shi,ge,shi_fen,bai_fen,i=6,j,P10_int,P11_int;
uchar table[]="0123456789";
uint a[],num;//,b[],num1;
//P1.0电压值
void display_v_P10(float P10_v)
{
//取出每位数值
P10_v=P10_v*100;//将得到的数*100为了方便取出小数部分
P10_int=(uint)P10_v;//保留两位小数 转化为整型
ge =P10_int/100;//取个位
shi_fen=P10_int/10%10;//取十分位
bai_fen=P10_int%10;//取百分位
//写每位数值
LCD_write_char(1+i,0,table[ge]);
LCD_write_char(2+i,0,'.');
LCD_write_char(3+i,0,table[shi_fen]);
LCD_write_char(4+i,0,table[bai_fen]);
//伏特符号
LCD_write_char(5+i,0,'V');
}
//P1.1电压值
void display_v_P11(float P11_v)
{
//取出每位数值
P11_v=P11_v*100;//将得到的数*100为了方便取出小数部分
P11_int=(uint)P11_v;//保留两位小数 转化为整型
ge =P11_int/100;//取个位
shi_fen=P11_int/10%10;//取十分位
bai_fen=P11_int%10;//取百分位
//写每位数值
LCD_write_char(1+i,1,table[ge]);
LCD_write_char(2+i,1,'.');
LCD_write_char(3+i,1,table[shi_fen]);
LCD_write_char(4+i,1,table[bai_fen]);
//伏特符号
LCD_write_char(5+i,1,'V');
}
//主函数
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
ADC10CTL1 = INCH_1 + ADC10DIV_0 + CONSEQ_3; // Temp Sensor ADC10CLK/4
ADC10CTL0 |= ADC10ON + ADC10IE + REFON + REF2_5V + SREF_1 + MSC + ADC10SHT_2;
ADC10AE0 = 0X03; //P1.0 P1.1 analog enable
ADC10DTC1|=0X0a;
delay_us(40);
//LCD初始化
LCD_init_first();
LCD_init();
while(1)
{
ADC10CTL0 &= ~ENC;//关闭采样使能
while(ADC10CTL1 & ADC10BUSY);//判断是否有采样或转换动作
ADC10SA = (uint)a;
ADC10CTL0 |= ADC10SC + ENC;//开始采样
_EINT();//关闭CPU,开启总中断
LPM0;
for(num=0;num<5;num++)
{
P10 += a[1+2*num]; //取采集P1.0五次的值
P11 += a[2*num]; //取采集P1.1五次的值
}
//取五次的平均值
P10=P10/5;
P11=P11/5;
//根据公式换算模拟电压值
P10_v=P10/1023*2.5;
P11_v=P11/1023*2.5;
//显示部分
display_v_P10(P10_v);
display_v_P11(P11_v);
}
}
// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR (void)
{
LPM0_EXIT;// Clear CPUOFF bit from 0(SR)
}
这是我根据楼主写的程序改了一点,但是P1.1读出的数据时错的,P1.0是对的,这是为啥?