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

📄 采交流.txt

📁 这是关于AD采样的源代码
💻 TXT
字号:
      //   问题采直流是总是闪烁,显示有问题,改了几次都不怎么成功//
//********************时间 11.8号修改**************************************//显示有缺陷
#include<iom16v.h>
#include <macros.h>
 float AD[180];

unsigned int b;
float cc,ad,max;

unsigned char flag2,k=0;
unsigned char flag1=0;
unsigned char time0;
unsigned char led_buff[4]={0,0,0,0};
unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
   0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

 void delay(unsigned int t )
  {  unsigned int i;
    for(i=0;i<t;i++)
      {;;}
   }
   void delay_nus(int time)
	 {     
  	   do
	  	 {
		 time--;
		  }	
  	  while (time>1);
	 }	  
/*	  		    毫秒级延时程序			*/	 
void delay_nms(unsigned int time)
	 {
	  while(time!=0)
	  	  {		
		   delay_nus(1000);
		   time--;
		  }
	 }	


void time_init()
   {
     TCCR0=0;
	 SREG=0X80;
	 TIMSK=0x01;//溢出中断允许
     ASSR=0;
     TCNT0=200;
     TCCR0=0x02;//系统时钟8分频             
   }
#pragma interrupt_handler time0_yichu:10
   void time0_yichu()
       {
          TCNT0=200;
          time0=1;
          flag1=1;	
        }
 
void initial_ADC( void)
    { 
      ADCSRA = 0x00;
       SREG=0X80;     //开中断
       ADMUX=0X40;   //AVCC,AREF为5V电压,0通道
       ADCSRA=0XCE;//64分频,开AD使能,启动ADSC,表示开始转换,开中断使能                   
	   flag1=0;
					
     }
/*************************************/ 
 #pragma interrupt_handler  ADC16:15
   void ADC16(void)
   {  
      ad=(float)ADC*500/1024;
      AD[k]=ad;
      flag2=1;
    }
void caidi()
  {
    unsigned char i;
    for(i=0;i<180;i++)
       {
          time_init();
          while(flag1==0) ;
          initial_ADC();
          while(flag2!=1) ;
          k++;
		  flag2=0;
		
        }
     }

 void display(void)
	 {
	  unsigned char i;
	  DDRB=0xff;
	  PORTB=0xff;
	  DDRD|=0xf0;//PD2,PD3分别为外部中断0和1;
	  PORTD|=0xf0;
	  for(i=0;i<4;i++)
	  	 {		  
		  PORTB=led_buff[i];
		  PORTD&=~(1<<(i+4));//注意位运算符&,不是|
		  delay_nms(1);
		  PORTD|=0xf0;//每扫描一位,全部置高
		  }
        }
 void maxtoBCD(void)
 {  
  unsigned char i;
  for(i=0;i<4;i++)
 { 
  led_buff[i]=table[(int)max%10];
     max=(int)max/10; 
   }
       
   }
		 
 void zuida()
   {
      unsigned char i;
      
	   max=AD[0];
	for(i=0;i<180;i++)
	  {
	    if(AD[i]>max)max=AD[i];
		else
		   i++;
      }
  }
void main() 
  { 
        
    while(1)
      {caidi();
		 delay_nus(1000);
        zuida();
		 delay_nms(10);
	     maxtoBCD();
		 delay_nus(100);
	   display();
        }
   }

⌨️ 快捷键说明

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