********************************************************
程序功能: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;
}
|