📄 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; //读取高8位数据
return addata;
}
/*******************************************
函数名称: 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 + -