?? adc.h
字號:
/*********************************************************************************************************
** 文件功能 :STC12C5A60S2內置AD驅動程序
** 工程作者 :Blue Sky Teams——ZZL
** 工程版本 :V1.0
*********************************************************************************************************/
#include<intrins.h>
/********************************用于配置P1口對應管腳為AD模擬輸入口**************************************/
#define ADC_PORT0 0X01
#define ADC_PORT1 0X02
#define ADC_PORT2 0X04
#define ADC_PORT3 0X08
#define ADC_PORT4 0X10
#define ADC_PORT5 0X20
#define ADC_PORT6 0X40
#define ADC_PORT7 0X80
#define ADC_PORTALL 0XFF
/*************************************用于獲取對應通道的電壓值******************************************/
#define ADC_CH0 0X00
#define ADC_CH1 0X01
#define ADC_CH2 0X02
#define ADC_CH3 0X03
#define ADC_CH4 0X04
#define ADC_CH5 0X05
#define ADC_CH6 0X06
#define ADC_CH7 0X07
/*********************************************定義AD轉換速度*********************************************/
#define ADC_SPEEDLL_540 0X00
#define ADC_SPEEDLL_360 0X20
#define ADC_SPEEDLL_180 0X40
#define ADC_SPEEDLL_90 0X60
/***************************************定義轉換控制寄存器控制位*****************************************/
#define ADC_POWER 0X80 //電源控制位
#define ADC_FLAG 0X10 //轉換結束標志位
#define ADC_START 0X08 //轉換開始位
/*********************************************************************************************************
** 函數功能 :內置ADC的初始化配置
** 函數說明 :使用內置ADC時需要先配置對應的P1口的管腳為模擬輸入
** 入口參數 :port:需要配置為模擬輸入的通道,使用或運算可以同時配置多個管腳
** 如:ADC_Init(ADC_PORT0 | ADC_PORT1 | ADC_PORT2)調用此函數后可以同時配置P1^0,P1^1,P1^2為模擬輸入
** 出口參數 :無
*********************************************************************************************************/
void ADC_Init(unsigned char port)
{
P1ASF=port;//設置AD轉換通道
ADC_RES=0;//清空轉換結果
ADC_CONTR=ADC_POWER | ADC_SPEEDLL_540;//打開AD轉化器電源
// IE=0XA0;//開啟總中斷,ADC中斷
_nop_();
_nop_();
_nop_();
_nop_();
}
/*********************************************************************************************************
** 函數功能 :獲取ADC對應通道的電壓值
** 函數說明 :每次只能獲取一個通道的電壓值,不同通道需要分別調用該函數獲取
** 入口參數 :channel:獲取該通道的電壓值
** 出口參數 :result: 當前通道的電壓值
*********************************************************************************************************/
float GetADCResult(unsigned char channel)//讀取通道ch的電壓值
{
unsigned int ADC_RESULT = 0;//用來存放結果
float result;
ADC_CONTR = ADC_POWER | ADC_SPEEDLL_540 | ADC_START | channel;//開始轉換,并設置測量通道為P1^0
_nop_();//需經過四個CPU時鐘延時,上述值才能保證被設進ADC_CONTR控制寄存器
_nop_();
_nop_();
_nop_();
while(!(ADC_CONTR & ADC_FLAG));//等待轉換結束
ADC_CONTR &= ~ADC_FLAG;//軟件清除中斷控制位
ADC_RESULT = ADC_RES;
ADC_RESULT = (ADC_RESULT << 2) | (0x02 & ADC_RESL); //默認數據存儲方式:高八位在ADC_RES,低二位在ADC_RESL低二位
result = ADC_RESULT * 5.0 / 1024.0 ; //基準電壓為電源電壓5V,10的分辨率,即1024
return result;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -