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

📄 adc.h

📁 Proteus与AVR应用实例,对初学者很有帮助。
💻 H
字号:
#ifndef __adc_h
#define __adc_h
#include <iom16v.h>  
//#include <iom128v.h> 
#include <macros.h> 
#include <delay.h> 
#include <lcd.h> 
#include <parameter.h> 
//--------------------------查询方式读取ADC 0~31通道--------------------------//   
unsigned int ADC_convert(unsigned char ADC_channel)   
{   
  ADMUX=(1<<REFS1)|(1<<REFS0)|(0<<ADLAR)|(ADC_channel&0x1F); //ADLAR_bit5=0 右对齐  
/* 
  ADMUX (ADC Multiplexer Select Register) 
             bit7  bit6  
             REFS1 REFS0  参考电压选择  
              0     0     AREF,内部Vref关闭  
              0     1     AVCC,AREF引脚外加滤波电容  
              1     0     保留  
              1     1     2.56V的片内基准电压源,AREF引脚外加滤波电容  
             bit5         ADC结果左对齐选择 1=左对齐  0=右对齐 
             bit4~0       选择32通道   

*/ 
  ADCSRA=(1<<ADEN)|(0<<ADSC)|(0<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0); 
/*   
               ADCSRA (ADC Control and Status Register A) 
                bit7   ADEN ADC使能=1 
                bit6   ADSC 启动ADC开始转换=1 
                bit5   ADATE 自己触发使能 
                bit4   ADIF ADC中断标志 
                bit3   ADIE ADC中断使能 
                bit2:0 ADC 预分频选择位 110=64时钟分频 
*/   
  delay_nus(200);    
  ADCSRA|=(1<<ADSC);            //启动ADC开始转换 
  while ((ADCSRA&0x10)!=0x10);  //等待ADC转换结束  
  ADCSRA|=(1<<ADIF);                        //写1清除标志位 
  ADCSRA=0x00;                  //关闭ADC  
  return ((ADC&0x03FF)*25/10+1);                    //ADC=ADCH:ADCL  2.56V的片内基准电压源
} 

//---------------------------16进制转换成ASCII码------------------------------//
void change(unsigned int i,unsigned char *p)		 
{
 p[4]=i%10+48;//个
 p[3]=i/10%10+48;//十
 p[2]=i/100%10+48;//百
 p[1]='.';//.
 p[0]=i/1000%10+48;//千
}

//-----------------channel通道的电压值送lcd显示-------------------------------//
void adcdisplay(void)// 
{
 vol=ADC_convert(channel);//查询方式读取ADC channel通道
 change(vol,Data);//16进制转换成ASCII码
 LCD_write_string(2,0,"CHANNEL:");
 LCD_write_string(1,1,"VOLTAGE:");
 LCD_write_char(11,0,channel+48);//显示通道数
 LCD_write_string(10,1,Data);//显示电压值
 LCD_write_char(15,1,86);//显示'V'
}  

//----------------------------ADC端口初始化-----------------------------------// 
void ADC_int(void)
{
 DDRA=0x00;
 PORTA=0x01;		//A口为不带上拉输入
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -