|
/************************
函數(shù)名稱:adc12的應(yīng)用
函數(shù)功能: 實現(xiàn)P6.0口的單通道單次轉(zhuǎn)換,并利用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;//將轉(zhuǎn)換數(shù)據(jù)轉(zhuǎn)換成為電壓值(計算方法:N*2.5*1000/2^12,相當(dāng)于將原數(shù)據(jù)放大1000倍)
write_command(0xC5);//將從第二行第三列開始顯示
write_data(curvol/1000+48);//顯示數(shù)據(jù)的千位
write_data(46);//顯示小數(shù)點,因為前面數(shù)據(jù)擴大了1000倍,所以我們在這里將數(shù)據(jù)縮小1000倍
write_data(curvol/100%10+48);//顯示數(shù)據(jù)的百位
write_data(curvol/10%10+48);//顯示數(shù)據(jù)的十位
write_data(curvol%10+48);//顯示數(shù)據(jù)的個位
delay(500);//延時500ms
}
return 0;
}
int msp430adc12(void)
{
volatile unsigned int i;//定義i為揮發(fā)性變量,防止編譯器清楚i的值
unsigned int data_adc12;//定義data_adc12
WDTCTL = WDTPW + WDTHOLD; // stop watchdog timer
P6SEL |= 0x01;//使能A0輸入通道
REFCTL0 &= ~REFMSTR;//復(fù)位REFMSTR控制位以控制ADC12參考電壓控制寄存器
ADC12CTL0 = ADC12ON+ADC12SHT02+ADC12REFON+ADC12REF2_5V;//打開ADC12,設(shè)置采樣間隔為4個CLK,打開參考電壓產(chǎn)生器,并設(shè)置參考電壓為2.5V
ADC12CTL1 = ADC12SHP;//采樣保持觸發(fā)信號選擇采樣定時器
ADC12MCTL0 =ADC12SREF_1;//Vr+=Vref+,Vr-=AVss
for(i=0;i<0x30;i++);//延時以使參考電壓穩(wěn)定
ADC12CTL0 |= ADC12ENC;//使能轉(zhuǎn)換
while(1)
{
ADC12CTL0 |= ADC12SC;//開始轉(zhuǎn)換
while(!(ADC12IFG & BIT0));
{
__no_operation();//可在此處設(shè)置端點查看ADC12MEM0緩沖寄存器
data_adc12=ADC12MEM0;//準(zhǔn)備輸出ADC12MEM0里面的值
ADC12IFG=0;
break;
}
}
return data_adc12;//返回所測的值
}
|
|