ad_finish.c

来自「avr16的ad采样程序」· C语言 代码 · 共 72 行

C
72
字号
#include <macros.h>
#include <iom16v.h>
#include <math.h>

/*****1_ms延时程序*****/
void delay_1ms(void)
{	 
	 unsigned int i;
	 for(i=0;i<1142;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=0x00;
	 DDRD=0xff;              //D口输出为1
	 PORTD=0x00;
}
/***AD初始化,对内部ADC进行相应设置***/
void adc_init(void)
{	 
	 CLI();
	 ADCSRA=0x00;//设置ADC之前禁止ADC
	 ADMUX=0x40;
	 ADCSRA|=(1<<ADEN)|(1<<ADIE)|(1<<ADSC); 
	 SEI();
}
/**功能:电压值(mV)显示;例如显示3432即为3432mv**/
void ad_change(unsigned int data)
{	 
	 unsigned long v;
	 unsigned char th,h,te,g;
	 v=data;
	 v=(v*5000)/1024;
	 th=v/1000;
	 h=(v%1000)/100;
	 te=(v%100)/10;
	 g=v%10;
	 PORTD=h*16+th;
	 PORTB=g*16+te;
}
/*****中断*****/
#pragma interrupt_handler ad_f:15
void ad_f(void)
{	 
	 unsigned int d;
	 d=ADC;
	 ad_change(d);
	 delay_nms(200);
	 ADCSRA|=(1<<ADSC);
} 
	 
/*****主函数*****/
void main(void)
{	 
	 port_init();		//端口设置
	 adc_init(); 	     //ADC设置
	 while(1)
	 ;
}

⌨️ 快捷键说明

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