📄 ad.c
字号:
/*利用PA口的第二功能将PA0口(即ADC的0通道)输入的模拟量转变为数字量,通道的参考源选
择AVCC,并且数据采用右对齐方式,转换方式为每1秒启动一次转换,转换结果由实验台上
的七段数码管显示*/
#include <macros.h>
#include <iom16v.h>
/***************************************************************/
unsigned char temp1=0x00;
unsigned char temp2=0x00;
/******************************************************************/
//入口参数:tmp1,tmp2
//出口参数:PORTB,PORTD
//功能:将A/D转换的高位,低位数据tmp1,tmp2分别送给PORTTB,PORTD并显示
/**************************************************************/
void display(unsigned char tmp1,unsigned char tmp2)
{
unsigned int tp2;
unsigned char tp20,tp21,tp22;
tp2=tmp2;
tp20=tp2/100;
tp21=(tp2%100)/10;
tp22=tp2%10;
tp20=(tp20<<4);
tp22=tp22<<4;
PORTD=tmp1|tp20;
PORTB=tp21|tp22;
}
/********************************************************
1_ms延时程序
********************************************************/
void delay_1ms(void)
{
unsigned int i;
for(i=0;i<1412;i++)
{
}
}
/****************************************************
N_ms延时程序
***************************************************/
void delay_nms(unsigned int n)
{
unsigned int i;
for(i=0;i<n;i++)
{
delay_1ms();
}
}
/********************************************************
端口初始化
********************************************************/
void port_init(void)
{
DDRB=0xff; //B口输出为1
PORTB=0xff;
DDRD=0xff; //D口输出为1
PORTD=0xff;
DDRA=0x00; //A口为输入
PORTA=0x00;
DDRC=0x02; //C1输出为1
PORTC=0xff;
}
/******************************************************
AD初始化,对内部ADC进行相应设置
*******************************************************/
void adc_init(void)
{
ADCSRA=0x00; //设置ADC之前禁止ADC
ADMUX=0x40; //选择AVCC参考源 数据右对齐,0通道
ACSR=(1<<ACD); //模拟比较器禁用
ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1); //预分频设置为64
}
void init_devices(void)
{
CLI(); //关中断
port_init();
adc_init();
}
void main(void)
{
OSCCAL=0xaf; //频率校准
init_devices(); //系统初始化
ACSR=0X00; //模拟比较器开启
while(1) //判断AD转换是否结束
{
ADCSRA=(1<<ADEN)|(1<<ADSC);
while(!(ADCSRA&(1<<ADIF)))
;
ADCSRA=(1<<ADIF); //清转换结束标志位
temp2=ADCL; //读AD结果
temp1=ADCH;
delay_nms(1000);
display(temp1,temp2); //显示模拟量所对应的结果
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -