⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad.c

📁 利用PA口的第二功能将PA0口(即ADC的0通道)输入的模拟量转变为数字量
💻 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 + -