?? mega16_ad.c
字號:
/*******************************************
文件:MEGA16_AD.C
環境:編譯為ICC AVR6.25A,仿真為AVR Studio4.10
硬件:ATMEGA16芯片
日期:2006年12月10日
功能:驅動MEGA16片上自帶的AD轉換器
備注:參考《AVR系列單片機C語言編程與應用實例》(清華大學出版社)
/******************************************/
#include <iom16v.h> //包含型號頭文件
#include <macros.h> //包含"位"操作頭文件
#include <stdio.h> //標準輸入輸出頭文件
#include <AVR_PQ1A.h> //包含自定義常量頭文件
#include "SMG.C" //包含數碼管顯示函數
/*******************************************
函數名稱: Mega16_ad
功 能: 對指定的通道進行模數轉換
參 數: chl--指定的通道(本開發板只用了通道0)
返回值 : addata--10位數據輸出
/********************************************/
uint Mega16_ad(uchar chl)
{
uint addata;
DDRA&=~(BIT(PA0)|BIT(PA1)); //轉換口設置為輸入、無上拉
PORTA&=~(BIT(PA0)|BIT(PA1));
ADMUX=0; //采用外部參考電壓,輸出數據右對齊
ADMUX|=chl; //設置指定的通道
ADCSR=0x80; //采用單次轉換,查詢模式,2分頻
ADCSR|=BIT(ADSC); //啟動轉換
while(!(ADCSR&(BIT(ADIF)))); //等待轉換結束
addata=ADCL; //讀取低8位數據
addata+=ADCH*256; //讀取高2位數據
return addata; //返回10位數據
}
/*******************************************
函數名稱: Num_BCD
功 能: 將一個字節的整數轉換成三位BCD碼
參 數: num--需要轉換的整數
返回值 : chr--三位BCD碼數組指針
/********************************************/
uchar* Num_BCD(uchar num)
{
uchar i,chr[3];
uchar *rept;
rept=&(chr[0]); //返回指針指向BCD碼數組
for(i=0;i<3;i++)
{
chr[2-i]=num%10; //對10取余數(其實是求模,但是對于正數,取余與求模是相等的)
num/=10; //除以10,為取出下一位做準備
}
return rept; //返回指針
}
/*******************************************
函數名稱: main
功 能: 驅動MEGA16的AD,并在數碼管上顯示采集值
參 數: 無
返回值 : 無
/********************************************/
void main(void)
{
uchar *adpt; //定義一個接受返回指針的指針變量
uchar i,ad0[3];
Board_init( ); //初始化開發板
while(1)
{
adpt=Num_BCD(Mega16_ad(0)/4); //啟動AD轉換通道0,同時將數值轉換成BCD碼
for(i=0;i<3;i++) //將轉換后的BCD碼存入顯示數組
{
ad0[i]=*(adpt+i);
}
for(i=0;i<3;i++) //顯示轉換的數值
{
One_smg_display(ad0[i],i+1);
Delayms(2);
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -