<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > MSP430之ADC12之1602顯示

MSP430之ADC12之1602顯示

作者: 時(shí)間:2016-12-02 來(lái)源:網(wǎng)絡(luò ) 收藏
#include <msp430x14x.h>
/*兩路數據采集,其中一路很穩定,跳動(dòng)一兩個(gè)字,但是另一路跳動(dòng)就很大了,
我的處理方法是:1 是將多余的通道都接上,采集后排序取中間的或中間
的幾個(gè)相加再平均,適用于變化較大的輸入信號。2 是適用于比較平穩的
輸入信號,可4次、8次、16次、32次、64次循環(huán)存儲平均。這樣比較穩定多了。
本程序就是使用了32次循環(huán)存儲平均*/
typedef unsigned char uchar;
typedef unsigned int uint;
/**************宏定義***************/
#define DataDir P4DIR
#define DataPort P4OUT
#define Busy 0x80
#define CtrlDir P3DIR
#define CLR_RS P3OUT&=~BIT0; //RS = P3.0
#define SET_RS P3OUT|=BIT0;
#define CLR_RW P3OUT&=~BIT1; //RW = P3.1
#define SET_RW P3OUT|=BIT1;
#define CLR_EN P3OUT&=~BIT2; //EN = P3.2
#define SET_EN P3OUT|=BIT2;

static uint results[32]; //保存ADC轉換結果的數組
void Trans_val(uint dat);
/*******************************************
函數名稱(chēng):delay
功 能:延時(shí)一段時(shí)間
參 數:time--延時(shí)長(cháng)度
********************************************/
void delay(uint time)
{
uint i;
for(i = 0;i < time;i++) _NOP();
}
/*******************************************
函數名稱(chēng):Delay5ms 功 能:延時(shí)約5ms
********************************************/
void Delay5ms(void)
{
uint i=40000;
while (i != 0)
{
i--;
}
}
/*******************************************
函數名稱(chēng):WaitForEnable
功 能:等待1602液晶完成內部操作
********************************************/
void WaitForEnable(void)
{
P4DIR &= 0x00; //將P4口切換為輸入狀態(tài)
CLR_RS;
SET_RW;
_NOP();
SET_EN;
_NOP();
_NOP();

while((P4IN & Busy)!=0); //檢測忙標志
CLR_EN;
P4DIR |= 0xFF; //將P4口切換為輸出狀態(tài)
}
/*******************************************
函數名稱(chēng):write_com
功 能:向液晶模塊寫(xiě)入命令
********************************************/
void write_com(uchar cmd)
{
WaitForEnable(); // 檢測忙信號?

CLR_RS;
CLR_RW;
_NOP();
DataPort = cmd; //將命令字寫(xiě)入數據端口
_NOP();

SET_EN; //產(chǎn)生使能脈沖信號
_NOP();
_NOP();
CLR_EN;
}

/*******************************************
函數名稱(chēng):write_data
功 能:向液晶顯示的當前地址寫(xiě)入顯示數據
參 數:data--顯示字符數據
返回值 :無(wú)
********************************************/
void write_data( uchar data )
{
WaitForEnable(); //等待液晶不忙
SET_RS;
CLR_RW;
_NOP();
DataPort = data; //將顯示數據寫(xiě)入數據端口
_NOP();
SET_EN; //產(chǎn)生使能脈沖信號
_NOP();
_NOP();
CLR_EN;
}
void Write1602(uchar add,uchar dat)
{
write_com(add);
write_data(dat);
}

void zifuchuan(uchar *ch)
{
while(*ch!=0)
write_data(*ch++);
Delay5ms();
}

/*******************************************
函數名稱(chēng):LcdReset
功 能:對1602液晶模塊進(jìn)行復位操作
********************************************/
void LcdReset(void)
{
CtrlDir |= 0x07; //控制線(xiàn)端口設為輸出狀態(tài)
DataDir = 0xFF; //數據端口設為輸出狀態(tài)

write_com(0x38);//規定的復位操作
Delay5ms();
write_com(0x38);
Delay5ms();
write_com(0x38);
Delay5ms();
write_com(0x38);//顯示模式設置
write_com(0x06);//寫(xiě)字符時(shí)整體不移動(dòng)
write_com(0x0c);//顯示開(kāi),不開(kāi)游標,不閃爍
write_com(0x01);//顯示清屏


}

/************************主函數****************************/
void main(void)
{
WDTCTL = WDTPW+WDTHOLD; //關(guān)閉看門(mén)狗

/*下面六行程序關(guān)閉所有的IO口*/
P1DIR = 0XFF;P1OUT = 0XFF;
P2DIR = 0XFF;P2OUT = 0XFF;
P3DIR = 0XFF;P3OUT = 0XFF;
P4DIR = 0XFF;P4OUT = 0XFF;
P5DIR = 0XFF;P5OUT = 0XFF;
P6DIR = 0XFF;P6OUT = 0XFF;

P6DIR |= BIT2;P6OUT |= BIT2;//關(guān)閉電平轉換
LcdReset(); //復位1602液晶
// P6DIR&=~BIT0;//先把P6_1口設為輸入,上電就是這個(gè)狀態(tài),這句可要可不要
P6SEL |= 0x01;//把P6_1口設為ADC輸入通道
ADC12CTL0 = ADC12ON+SHT0_8+MSC; // 打開(kāi)ADC,設置采樣時(shí)間
ADC12CTL1 = SHP+CONSEQ_2; // 使用采樣定時(shí)器
ADC12IE = 0x01;// 使能ADC中斷
ADC12CTL0 |= ENC; // 使能轉換
ADC12CTL0 |= ADC12SC;// 開(kāi)始轉換
write_com(0x82);
zifuchuan("The volt is:");
_EINT();
LPM0;
}
/*******************************************
函數名稱(chēng):ADC12ISR
功 能:ADC中斷服務(wù)函數,在這里用多次平均的
計算P6.0口的模擬電壓數值
參 數:無(wú)
返回值 :無(wú)
********************************************/
#pragmavector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
static uint temp = 0;
results[temp++] = ADC12MEM0;
if(temp == 32)
{
uchar i;
unsignedlongsum = 0;
temp = 0;
for(i = 0; i < 32; i++)
{
sum += results[i];
}
sum >>= 5;//除以32

Trans_val(sum);
}
}
/*******************************************
函數名稱(chēng):Trans_val
功 能:將16進(jìn)制ADC轉換數據變換成三位10進(jìn)制
真實(shí)的模擬電壓數據,并在液晶上顯示
參 數:Hex_Val--16進(jìn)制數據
n--變換時(shí)的分母等于2的n次方
返回值 :無(wú)
********************************************/
void Trans_val(uint dat)
{
unsignedlongtemp;
uint Curr_Volt;
uchar ptr[3];
temp = dat;
temp = (temp << 5) + dat; //temp = dat * 33
//移位比直接乘效率要高
temp = (temp << 3) + (temp << 1); //temp = temp * 10
//一個(gè)數左移N位等于這個(gè)數乘以2的N次方
Curr_Volt = temp >> 12;//Curr_Volt = temp / 2^n一個(gè)數右移N位等于除以2的N次方
ptr[0] = Curr_Volt/100;
ptr[1] = Curr_Volt %100/10;
ptr[2] = Curr_Volt%10;
//在液晶上顯示變換后的結果
Write1602(0x80+0x40,ptr[0]+0x30);
Write1602(0x80+0x41,.);
Write1602(0x80+0x42,ptr[1]+0x30);
Write1602(0x80+0x43,ptr[2]+0x30);
Write1602(0x80+0x44,V);
}


關(guān)鍵詞: MSP430ADC121602顯

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>