?? ad.h
字號:
//******************************************************************************
//函數: void ad_init(void);
//描述: 初始化AD轉換器作為單一轉換
//參數: none
//返回值: none
//*******************************************************************************
void Init_AD(void)
{
ADSCR=0x1f;
//ADCH0=1
//ADCH1=1
//ADCH2=1
//ADCH3=1
//ADCH4=1 此時AD電源關閉,AD通道選擇
//ADCO=0 單次轉換
//AIEN=0 禁止中斷
//COCO=0 1轉換結束,0忙
ADCLK=0x10;
//0~1為NC
//MODE0=0
//MODE1=0 轉換結果為無符號8位
//ADICLK=1 0晶振、1總線
//ADIV0=1
//ADIV1=1
//ADIV2=0 //27.669ms
}
//*******************************************************************************
//函數: unsigned char ad_single(unsigned char ch);
//參數: unsigned char ch---選擇A/D 通道;
//返回值: A/D 轉換值
//說明: channel為AD通道取值0-7
//*******************************************************************************
unsigned char ad_single(unsigned char channel)
{
unsigned char i = 0;
unsigned int ad_sum = 0;
unsigned char ad_max = 0;
unsigned char ad_min = 0xff;
unsigned char ad_temp = 0;
unsigned char ad[8];
ADSCR=0X20+channel; //寫ADSCR啟動連續AD轉換
while(i<8) //8次采樣
{
if(ADSCR_COCO==1)
{
ad[i] = ADRL; //取AD寄存器,8位AD量
i++;
}
}
ADSCR=0X1F; //寫ADSCR關閉AD轉換
for(i=0;i<8;i++)
{
if(ad[i]>ad_max) ad_max=ad[i]; //取得最大值
if(ad[i]<ad_min) ad_min=ad[i]; //取得最小值
ad_sum+=ad[i]; //求和
}
ad_sum=ad_sum-ad_max; //去掉最大值
ad_sum=ad_sum-ad_min; //去掉最小值
ad_temp=ad_sum%6; //求余數
ad_sum=ad_sum/6; //求平均
if(ad_temp>3) //判斷余數,4舍5入
{
ad_sum++;
}
ad_temp=ad_sum%0x100; //確定最后結果
return ad_temp; //返回結果
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -