|
#include <msp430x14x.h>
#include "Config.h" //開發板配置頭文件,主要配置IO端口信息
#include "1602.c"
static uchar Flag=0; //標志變量
uint TEMP=0; //ADC值暫存變量
uint temp,A1,A2,A3,A4,A5,A6,A7; //定義的變量,顯示數據處理
//***********************************************************************
// 顯示采集到的ADC數值
//***********************************************************************
void LCD_DisplayADC()
{
LCD_write_char(0x0b,0,0x30+A1);
LCD_write_char(0x0c,0,0x30+A2);
LCD_write_char(0x0d,0,0x30+A3);
LCD_write_char(0x0e,0,0X30+A4);
}
void LCD_DisplayVoltage()
{
LCD_write_char(0x0b,1,0x30+A5);
LCD_write_char(0x0c,1,'.');
LCD_write_char(0x0d,1,0x30+A6);
LCD_write_char(0x0e,1,0X30+A7);
LCD_write_char(0x0f,1,'V');
}
//*************************************************************************
// 數字量顯示處理函數
//*************************************************************************
void Data_do(uint temp_d)
{
uint temp_1,temp_2;
A1=temp_d/1000; //分出千,百,十,和個位
temp_1=temp_d%1000;
A2=temp_1/100;
temp_2=temp_1%100;
A3=temp_2/10;
A4=temp_2%10;
}
//*************************************************************************
// 電壓數據顯示處理函數
//*************************************************************************
void Voltage_do(uint temp_d)
{
uint temp_1,temp_2;
ulong temp_3;
temp_3=(ulong)(temp_d)*250; //轉換公式,ADC數字量轉換為電壓大小,注意數據類型
temp_d=temp_3/4095; //12位精度,除以4095
A5=temp_d/100; //分出百,十,和個位
temp_1=temp_d%100;
A6=temp_1/10;
temp_2=temp_1%10;
A7=temp_2;
}
//*************************************************************************
// ADC初始化程序,用于配置ADC相關寄存器
//*************************************************************************
void ADC_Init()
{
P6SEL|=0x01; //選擇ADC通道
ADC12CTL0|= ADC12ON + SHT0_2 + REF2_5V + REFON; //ADC電源控制開,16個CLK,內部基準2.5V
ADC12CTL1|= ADC12SSEL1 + ADC12SSEL0; //SMCLK做時鐘源
ADC12MCTL0= SREF0 + INCH_0; //參考控制位及通道選擇,這里選擇通道0
ADC12IE|= 0x01; //中斷允許
ADC12CTL0|= ENC; //使能轉換器
}
//*************************************************************************
// ADC中斷服務程序
//*************************************************************************
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR(void)
{
uchar j;
while((ADC12CTL1&0x01)==1); //如果ADC忙,則等待,否則讀取ADC轉換數值
Flag = 1 ;
TEMP = ADC12MEM0; //讀取ADC轉換值
Data_do(TEMP); //處理ADC值,用于顯示,數字量
Voltage_do(TEMP); //處理ADC值,用于顯示,模擬電壓值
for(j=0;j<15;j++)
{
LCD_DisplayADC(); //顯示ADC的數據,ADC數字量
LCD_DisplayVoltage(); //顯示ADC的電壓值
}
}
//***********************************************************************
// 主程序
//***********************************************************************
void main(void)
{
WDT_Init(); //看門狗初始化
Clock_Init(); //時鐘初始化
Port_Init(); //端口初始化,用于控制IO口輸入或輸出
ADC_Init(); //初始化ADC配置
delay_ms(100); //延時100ms
LCD_init(); //液晶參數初始化設置
LCD_clear(); //清屏
LCD_Desk();
_EINT(); //使能中斷
Flag=1; //標志位先置1
while(1)
{
while(Flag==1)
{
ADC12CTL0 |= ADC12SC; //開啟轉換
ADC12CTL0 &= ~ADC12SC; //清零
Flag=0; //清零標志位
}
}
}
|
-
-
ADC_IN0_1602.zip
2019-5-9 15:48 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
55.65 KB, 下載次數: 43, 下載積分: 黑幣 -5
|