********************************************************
程序功能:MCU的片内ADC对P6.0端口,P6.1端口的电压进行转换
将模拟电压值显示在1602液晶上。
----------------------------------------------------------
测试说明:调节电位器R7的旋钮观察液晶显示数字变化。
*********************************************************/
#include <msp430x14x.h>
#include "BoardConfig.h"
#include "cry1602.h"
#define Num_of_Results 32
#define keyin (P1IN&0x0f)
uchar shuzi[] = {"0123456789."};
uchar tishi[] = {"The volt is:"};
static uint results[Num_of_Results],results1[Num_of_Results]; //保存ADC转换结果的数组 // is not used for anything.
void Trans_val(uint Hex_Val);
/************************主函数****************************/
void main(void)
{
WDTCTL = WDTPW+WDTHOLD; //关闭看门狗
BoardConfig(0xb8); //关闭数码管、流水灯、4245
LcdReset(); //复位1602液晶
DispNChar(2,0,12,tishi); //显示提示信息
Disp1Char(11,1,'V'); //显示电压单位
P6DIR|=BIT3;
P6OUT|=BIT3;//背光显示
P6SEL|=0X03;
ADC12CTL0 &= ~(ENC); //设置ENC为0,从而修改ADC12寄存器的值
ADC12CTL0 = ADC12ON+SHT0_2+MSC; // 打开ADC,设置采样时间
//ADC12MCTL0=INCH_0;
//ADC12MCTL1=INCH_1;
while(1)
{
ADC12CTL0 &= ~(ENC);
if(keyin!=0x0f)
{
ADC12CTL0 = ADC12ON+SHT0_2+MSC+REFON;
ADC12CTL1 = SHP+CONSEQ_2+CSTARTADD_1; // 使用采样定时器
ADC12MCTL1=INCH_1;
ADC12IE = 0x02; // 使能ADC中断
static uint index = 0;
results1[index++] = ADC12MEM1; // Move results
if(index == Num_of_Results)
{
uchar i;
unsigned long sum = 0;
index = 0;
for(i = 0; i < Num_of_Results; i++)
{
sum += results1[i];
}
sum >>= 5; //除以32
Trans_val(sum);
}
}
else if (keyin==0x0f)
{
ADC12CTL1 = SHP+CONSEQ_2+CSTARTADD_0; // 使用采样定时器
ADC12MCTL0=INCH_0;
ADC12IE = 0x01; // 使能ADC中断
static uint index = 0;
results[index++] = ADC12MEM0; // Move results
if(index == Num_of_Results)
{
uchar i;
unsigned long sum = 0;
index = 0;
for(i = 0; i < Num_of_Results; i++)
{
sum += results[i];
}
sum >>= 5; //除以32
Trans_val(sum);
}
}
ADC12CTL0 |= ENC; // 使能转换
ADC12CTL0 |= ADC12SC; // 开始转换
}
// _EINT();
// LPM0;
}
|