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

📄 adc_m8.c

📁 开发环境ICC AVR单片机 用ADC做电压表 (多通道)
💻 C
字号:
/***********************************************
****        用ADC做电压表                    ***

****    目标MCU  :Atmeag 8                   ***
	
****    作者:  XueTwins                     ***

****  	时间	 2006.11.2                   ***
***********************************************/
#include <iom8v.h>
#include <macros.h>

#pragma data:code
const unsigned letter_u[]={0x3E};//显示字母U
const unsigned tabs[]=
{        //无小数点
  0x3F,//0
  0x06,//1
  0x5B,//2
  0x4F,//3
  0x66,//4
  0x6D,//5
  0x7D,//6
  0x07,//7
  0x7F,//8
  0x6F//9
};
const unsigned tabs_point[]=
{         //有小数点
  0xBF,//0.
  0x86,//1.
  0xDB,//2.
  0xCF,//3.
  0xE6,//4.
  0xED,//5.
  0xFD,//6.
  0x87,//7.
  0xFF,//8.
  0xEF//9.
};

#pragma data:data
static unsigned char ledbuf[4];
unsigned int adc_rel;//AD转换结果,注意是int型
unsigned char adc_mux;//通道号
/**************************************************
            延时函数  1M系统时钟
*************************************************/
void delay_1ms(void)     //1ms延时函数
{
  unsigned int i;
  for (i=0;i<141;i++)
  {}
}

void delay(unsigned int n)            //延时n毫秒
{
  unsigned int i;
  for (i=0;i<n;i++)                   //执行n次1毫秒延时
  delay_1ms();
}

/*------------------------------------------------------
       LED动态扫描程序
------------------------------------------------------*/
void led_scan(void)
{
   unsigned char i;
   for(i=0;i<4;i++)
   {
      PORTB=ledbuf[i];
	  PORTD=~(0x08>>i);
	  delay(2);	 
	  PORTD|=(0x08>>i);
   }
}
/**************************************************
           ADC初始化函数
*************************************************/
void adc_init(void)
{
    DDRC=0x00;//C口设置为高阻输入
	PORTC=0x00;
	ADCSRA=0x00;
	ADMUX=(1<<REFS0)|(adc_mux&0x3FF);//选择AVCC,AREF
	ACSR=0x80;//关闭模拟比较器,上升,下降沿中断
	ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1);
	//0b1100 1110ADC使能,ADC开始转换,中断允许, 64分频
 }
/**************************************************
           ADC完成中断服务程序
*************************************************/
#pragma interrupt_handler adc_isr:15     
void adc_isr(void)
{
   adc_rel=ADC&0x3ff;
   ADCSRA=0x00;
   ADMUX=(1<<REFS0)|(adc_mux&0x3FF);//选择AVCC,AREF为基准
   ADCSRA=0x40;//ADCSRA|=(1<<ADSC); 启动AD转换

⌨️ 快捷键说明

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