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

📄 adc.c

📁 在keil c51 编译器下实现AD0832转换c源代码!
💻 C
字号:
#include  <reg51.h>                    
#include  <absacc.h>
#include  <intrins.h>

#define  uchar  unsigned  char
#define  uint  unsigned  int
#define  IN0 XBYTE[0x9000]       

#define W_C_GLCD    XBYTE[0xA000]
#define W_D_GLCD    XBYTE[0xA001]
#define R_B_GLCD    XBYTE[0xA002]
#define R_D_GLCD    XBYTE[0xA003]
//---------------------------------------------------
uchar code  DHZTAB1[]={"A/D  197采样结果"};
uchar code  DHZTAB2[]={"频率:        HZ "};
uchar code  DHZTAB3[]={"波峰:    .   V  "};
uchar code  DHZTAB4[]={"波谷:    .   V  "};
//--------------------------------------------------
sbit bflag=ACC^7;
//--------------------------------------------------
void initial_GLCD();
void command_GLCD(uchar ord);
void chkbusy_GLCD();
void write_GLCD(uchar dat);
void delay1();
void displayF(unsigned long t);

void AD197();
void delay0(); 

uint idata a,b;

main()
{
    uchar i=0,p,k;
    uchar j,temp,firs;
    uchar d0,d1,d2;
    unsigned long xx,max,min,min1,count,F,x;
    initial_GLCD();              
		
		
  //-------------------------------------------------------
    temp=0x00;                  
	command_GLCD(temp|0x80);
		
		for(j=0;j<8;j++)
		{
			write_GLCD(DHZTAB1[i]);
			i++;
				
			write_GLCD(DHZTAB1[i]);
			i++;
		}
		i=0;
  //------------------------------------------------------
	temp=0x10;
	command_GLCD(temp|0x80);
		
		for(j=0;j<8;j++)
		{
			write_GLCD(DHZTAB2[i]);
			i++;

			write_GLCD(DHZTAB2[i]);
			i++;
		}
		i=0;
  //------------------------------------------------------
	temp=0x08;                   
	command_GLCD(temp|0x80);
		
		for(j=0;j<8;j++)
		{
			write_GLCD(DHZTAB3[i]);
			i++;
				
			write_GLCD(DHZTAB3[i]);
			i++;
		}
		i=0;

  //------------------------------------------------------
	temp=0x18;                  
	command_GLCD(temp|0x80);
		
		for(j=0;j<8;j++)
		{
			write_GLCD(DHZTAB4[i]);
			i++;
				
			write_GLCD(DHZTAB4[i]);
			i++;
		}
		i=0;
  //-----------------------------------------------------
	
	
	max=0;
	count=0;
	min1=0xFFFF;
    TMOD=0x00;
	TCON=0x00;
	while(1)
    {
	    AD197();			
	    xx=a;
		if(xx==0&&k==0)
		{
			TMOD=0x01;
			TCON=0x10;
			k=1;
		}
		if(xx<2048&&TR0==1)
		{
			if(k==1)
				count--;			
			if(p==0)
				count++;
			p=1;
			k=2;
		}
		if(xx>2048&&TR0==1)
		{
			if(p==1)
				count++;
			p=0;
			k=2;
		}
	    
		if(TF0==1)
		{
			TCON=0x00;
			F=10000000*count/142213.12;
			if(x==0)
				x=F;
			if(F!=x)
			{
				F=(x+F)/2;
				displayF(F);
			}
			else
			{
				count=0;
				k=0;
			}
		}
	    if(xx>=max&&xx<2048)
		{
		    max=xx;
            d0=max*5/2048;
            d1=(max*50/2048)%10;
            d2=(max*500/2048)%10;
		     	   
	        temp=0x0c;                      
	        command_GLCD(temp|0x80);        
	        firs=0x30+d0;
	        write_GLCD(firs);
		     
	        temp=0x0d;                      
	        command_GLCD(temp|0x80);        
	        firs=0x30+d1;
	        write_GLCD(firs);	                                           
                                  
	        firs=0x30+d2;                            
	        write_GLCD(firs);
		}
		if(xx<min1&&xx>=0xF800)
	    {          
		    min1=xx;
			min=0xFFFF-min1+1;			
	        d0=min*5/2048;
            d1=(min*50/2048)%10;
            d2=(min*500/2048)%10;
               
		    temp=0x1b;
            command_GLCD(temp|0x80);
            firs=0x20;
            write_GLCD(firs);
               
            firs=0x2D;
            write_GLCD(firs);
		       
			temp=0x1c;                     
	        command_GLCD(temp|0x80);        
	        firs=0x30+d0;
	        write_GLCD(firs);
		    
	        temp=0x1d;                      
	        command_GLCD(temp|0x80);        
	        firs=0x30+d1;
	        write_GLCD(firs);	                                           
                                  
	        firs=0x30+d2;                            
	        write_GLCD(firs);    
		}

		delay0();

	}
}

//--------------------------------------
void AD197()
{
    uchar xdata *ad_adr;
   
    ad_adr=&IN0;
    *ad_adr=0x4A;   
    delay0();
    a=(uint)*ad_adr;
    ad_adr++;	
    b=(uint)*ad_adr;
    b=b*256;
    a+=b;
}


//-----------------------------------
//           采样延时
//------------------------------------
void delay0()
{
    uchar i;
    for(i=0;i<100;i++)
    {;}
}

//----------------------------------------
//          LCD初始化
//----------------------------------------
void initial_GLCD()
{
    command_GLCD(0x30);   
    delay1();

    command_GLCD(0x30);   
    delay1();

    command_GLCD(0x30);   
    delay1();

    command_GLCD(0x06);    //显示器控制:游标不显示;
    delay1();

    command_GLCD(0x01);    //清屏幕
    delay1();

    command_GLCD(0x0c);    //进入模式设定
    delay1();
}

//--------------------------------------
//         写命令到GLCD
//--------------------------------------
void command_GLCD(uchar ord)
{
    chkbusy_GLCD();
    W_C_GLCD=ord;
}

//-----------------------------------
//        检查LCD忙标志
//-----------------------------------
void chkbusy_GLCD()
{
    do{ACC=R_B_GLCD;}
    while(bflag==1);
}

//----------------------------------
//        写数据到GLCD
//----------------------------------
void write_GLCD(uchar dat)
{
    chkbusy_GLCD();
    W_D_GLCD=dat;
}

//---------------------------------=
//         延时子程序
//----------------------------------
void delay1()
{
    uchar i;
    for(i=0;i<25;i++)
    {;}
}

void displayF(unsigned long F)
{
    uchar temp,firs;
    uchar d0,d1,d2,d3;
	d0=F/1000;
	d1=(F/100)%10;
	d2=(F/10)%10;
	d3=F%10;

	temp=0x13;
	command_GLCD(temp|0x80);
	firs=0x20;
	write_GLCD(firs);

	if(d0==0)
		firs=0x20;
	else
		firs=0x30+d0;
	write_GLCD(firs);

	temp=0x14;
   	command_GLCD(temp|0x80);        
	firs=0x30+d1;
	write_GLCD(firs);
			    
	firs=0x30+d2;
	write_GLCD(firs);	        
			
	temp=0x15;                      
	command_GLCD(temp|0x80);        
	firs=0x2E;
	write_GLCD(firs);                       
			                                  
	firs=0x30+d3;                            
	write_GLCD(firs);
}

⌨️ 快捷键说明

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