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

📄 ad.c

📁 AD转化程序
💻 C
字号:
/**************************************************
*******************功能: AD转化并用数码管显示******
*******************单片机型号:M16   **************
*******************晶振: 内部8M     **************
*******************作者:汝正阳      **************
*******************编程时间:09年5月9日0:55*******
***************************************************
*******************说明:AVCC做基准,使用AD0*******
*******************       PD0 df     **************
*******************       PD1—7 g—a**************
***************************************************/


#include <iom16v.h>
#include <macros.h>
#define  uchar unsigned char
#define  uint  unsigned int
const unsigned char show[]={0b11111100,0b01100000,0b11011010,0b11110010,0b01100110,0b10110110,
                                     0b10111110,0b11100000,0b11111110, 0b11110110, 0b00000001};
const unsigned char position[]={0b00000100,0b000001000,0b000010000,0b000100000,0b0010000,0b01000000};
uint compare(uint receive_y[10]);
void delay(unsigned int ms);              
int abs(int Number);
uint mega16_ad(void);
void main()
{
   uint ada,i,ad[4],m,ad_last,receive_y[10],count_y=0;
   int j;
   DDRB=0xff;
   DDRD=0xff;
   DDRC=0xff;
   while(1)
   {
      ada=mega16_ad();
	   for(i=0;i<10;i++)
	       {
		    ada=mega16_ad();
			receive_y[i]=ada;
           }
	  ada=compare(receive_y);
	  j=ada-ad_last;
	  j=abs(j);
	  ad_last=ada;
	  if(j<25)
	  {
	  PORTC=0x00;
	  count_y++;
	  }
	  else
	  {
	  count_y=0;
	  }
	  if(count_y>200)
	  {
	  PORTC=0x00;
	  }
	  else
	  {
	  PORTC=0xff;
	  }
	  for(i=0;i<4;i++)
	  {
	    ad[3-i]=j%10;
	    j=j/10;
	  }
	  
	  for(i=0;i<4;i++)
	  {
	     PORTD=show[ad[i]];
		 PORTB=position[i];
	     delay(5);
	  }
   }
}

uint mega16_ad(void)
{
     uint addata;  	  	  	 	 					//定义一个变量用于保存AD转化后的结果
	 DDRA&=~BIT(PA0);							    //将PA口设置为输入								
	 PORTA&=~BIT(PA0);								//取消PA口上拉电阻																	
	 ADMUX=0x40;								    //使用外部基准,结果使用10位精度,单端输入
	 ADCSR=0X80;									//ADC使能
	 ADCSR|=BIT(ADSC);								//开始转化
	 while(!(ADCSR&(BIT(ADIF))));					//等待转化结束
     addata=ADCL;								
	 addata=addata+ADCH*256;						//处理下等到数值,将高位和低位合并
	 return addata;
}

int abs(int Number)
{
 if(Number < 0)
 {
  Number=-Number;
 }
 else
 {
  Number=Number;
 }
 return Number;
}

uint compare(uint receive_y[10])
{uint sum;
 uint i,aver;
 sum=receive_y[0];
 for(i=0;i<10;i++)
    sum=sum+receive_y[i];
	aver=sum/10;
	return(aver);
}


void delay(unsigned int ms)//定义过后可用uint
{
        unsigned int i,j;
	for(i=0;i<ms;i++)
	   {
	   for(j=0;j<1141;j++);
       }
}

⌨️ 快捷键说明

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