/************************
函数名称:adc12的应用
函数功能: 实现P6.0口的单通道单次转换,并利用lcd1602显示。
时间:2020.8.22
制作人:XXXX
***********************/
#include <msp430.h>
#include <lcd1602.h>
int main(void)
{
int data,curvol;
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
write_command(0x01);//清零操作
write_command(0x85);
string("curvol:");//将从第1行第6列开始显示“curvol”
while(1)
{
data=msp430adc12();
curvol=data*0.61;//将转换数据转换成为电压值(计算方法:N*2.5*1000/2^12,相当于将原数据放大1000倍)
write_command(0xC5);//将从第二行第三列开始显示
write_data(curvol/1000+48);//显示数据的千位
write_data(46);//显示小数点,因为前面数据扩大了1000倍,所以我们在这里将数据缩小1000倍
write_data(curvol/100%10+48);//显示数据的百位
write_data(curvol/10%10+48);//显示数据的十位
write_data(curvol%10+48);//显示数据的个位
delay(500);//延时500ms
}
return 0;
}
int msp430adc12(void)
{
volatile unsigned int i;//定义i为挥发性变量,防止编译器清楚i的值
unsigned int data_adc12;//定义data_adc12
WDTCTL = WDTPW + WDTHOLD; // stop watchdog timer
P6SEL |= 0x01;//使能A0输入通道
REFCTL0 &= ~REFMSTR;//复位REFMSTR控制位以控制ADC12参考电压控制寄存器
ADC12CTL0 = ADC12ON+ADC12SHT02+ADC12REFON+ADC12REF2_5V;//打开ADC12,设置采样间隔为4个CLK,打开参考电压产生器,并设置参考电压为2.5V
ADC12CTL1 = ADC12SHP;//采样保持触发信号选择采样定时器
ADC12MCTL0 =ADC12SREF_1;//Vr+=Vref+,Vr-=AVss
for(i=0;i<0x30;i++);//延时以使参考电压稳定
ADC12CTL0 |= ADC12ENC;//使能转换
while(1)
{
ADC12CTL0 |= ADC12SC;//开始转换
while(!(ADC12IFG & BIT0));
{
__no_operation();//可在此处设置端点查看ADC12MEM0缓冲寄存器
data_adc12=ADC12MEM0;//准备输出ADC12MEM0里面的值
ADC12IFG=0;
break;
}
}
return data_adc12;//返回所测的值
}
|