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

📄 ads1230_1.c

📁 ads1230驱动程序
💻 C
字号:
#include<AT89X51.H>
#include<INTRINS.H>
#include<math.h>
 
#define uint unsigned int
#define ulong unsigned long

#define uchar unsigned char
uchar dispcnt;
uchar tmscnt;
uint cnt;
 
sbit dout=P3^4;	
sbit sclk=P3^5;	

               //     0     1    2    3	   4    5	 6	  7
code uchar duanma[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,
			  //       8    9    U	  P    -    0.  
					 0xfe,0xf6,0x7c,0xce,0x02,0xfd,0x00};      
					 
code uchar dispbitcode[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};

data uchar vlog[8]={14,14,0,0,0,0,0,0};

ulong sum[2]={0,0};//滑动滤波值的存储

void delay1ms(void);

ulong adcover(void);

ulong filter(ulong ad);

ulong filter1(ulong ad);

void zijian(void);

void jieguo(void);
/****************主程序*********************/
void main()

{ uint i;
  TMOD=0x01;	  //100/0.5425=184;256-184=72=0x48;定时100us
  TH0=(65536-1840)/256;
  TL0=(65536-1840)%256;
  TR0=1;
  ET0=1;
  EA=1;
  P3_2=0;
  zijian();
  while(1)
 { 	
  jieguo();

  for(i=0;i<50;i++)//改显示延时
     {
 delay1ms();
	 }
 }

}
 
/************延时1ms子程序***************************/
 void delay1ms(void)  //延时1ms
{
  uint i;
  for(i=0;i<922;i++) //0.5425*2*922
  {  _nop_();
  }
}
/***************开机自检程序***************************/

  void zijian(void)
{
  uint i,j,k;
  vlog[0]=12;
  vlog[1]=12;
  vlog[2]=12;
  vlog[3]=10;
  vlog[4]=11;
  vlog[5]=12;
  vlog[6]=13;
  vlog[7]=1;
 
  for(i=0;i<500;i++)		 //显示---UP-0.1后延时一秒
  {
  delay1ms();

  }
  for(i=0;i<10;i++)			 //显示数字0---9;
  {
    for(j=0;j<8;j++)
	   {
	    vlog[j]=i;
	   }
	 
	 for(k=0;k<250;k++)
	   {	 
	    delay1ms();
	   }
   }

	for(i=0;i<8;i++)
	{
	  vlog[i]=14;
	}

}
/**************AD转换程序**********************/

ulong adcover(void)
{
 ulong result;
// ulong result1;
  uint rice=0;   
  uchar i;
  uchar rice1=0; 
  
 sclk=0;
 _nop_();
 _nop_();
 
if(dout==0)		  //dout为低,开始读取数据
{ 
 //	EA=0;//关显示中断
  for(i=0;i<4;i++)
    { 
      _nop_();
	  _nop_();
	 }

  for(i=0;i<12;i++)			 //高12位
  { sclk=1;
    _nop_();
	_nop_();
	sclk=0; 
     if(dout==1) 
      rice=(rice<<1)|0x0001;
       
	 else   
      rice=rice<<1;
	 _nop_();
	 _nop_();	

   }

   for(i=0;i<8;i++)		  //低八位
   { 
    sclk=1;
    _nop_();
	_nop_();
	sclk=0; 
     if(dout==1) 
      rice1=(rice1<<1)|0x01;
       
	 else   
      rice1=rice1<<1;
	 _nop_();
	 _nop_();	

    }
   	dout=1; 
    for(i=0;i<2;i++)
	{ 
	  _nop_();
	  _nop_();
 	 }
 // EA=1;
}   
// EA=0;
result=0;

result=(ulong)rice*256+(ulong)rice1;

if(result>524287)
    { 
    result=1048576-result;
    }
 //result1=(float)result*0.0308166;
 //result=(ulong)result1;

 return result;
  //EA=1;
  
}
/************滑动平均法数字滤波**************************/
ulong filter(ulong ad)
{
 static ulong buff[9]={0,0,0,0,0,0,0,0,0}; //滤波缓冲区的大小,改的话6可以改,下面也要改,3个要改动
 static uchar in=0;
 static ulong total=0;

 total-=buff[in];
 buff[in]=ad;
    in++;
   if(in==9)
   {
    in=0;
	}
    total+=ad;

 return (total/9);
}
/*************算术平均值滤波***************************
ulong filter1(ulong ad)
{
 ulong total=0;
 uchar i;
 for(i=0;i<3;i++)
 {
  total+=ad;
  }
  return(total/3);
}
/****************显示锁定**************************/
/***************写缓冲区**********************/
void jieguo(void)
{   
  ulong temp;
  ulong sum1;
  ulong sum2;
   EA=0;
 temp=sum[0];
 sum[0]=sum[1];
 sum[1]=filter(adcover()); //判断sum[0]与sum[1]的大小
 if(abs(sum[0]-sum[1])<=14)	//如果小于给定,则sum[1]内容不变,100是内码的变化量,可调这个
   {
   sum[1]=sum[0];
   }
   sum2=sum[1];
   sum1=(float)sum2*0.034518;
   sum1=(ulong)sum1;
    
    //vlog[2]=(sum1%1000000)/100000;
    vlog[3]=(sum1%100000)/10000;
    vlog[4]=(sum1%10000)/1000;
    vlog[5]=(sum1%1000)/100;
    vlog[6]=(sum1%100)/10;
    vlog[7]=sum1%10;
	EA=1;
}

/*************中断显示程序*************************/
 void t0() interrupt 1 using 0		 //每周期的时间为0.545s	定时时间为100us
{ 
  TH0=(65536-1840)/256;			//1ms
  TL0=(65536-1840)%256;
  tmscnt++;
  //if(tmscnt==1) //1ms
 // {
 //   tmscnt=0;
	P0=0x00;
    P2=duanma[vlog[dispcnt]];
    P0=dispbitcode[dispcnt];
      dispcnt++;
     if(dispcnt==8)
      {
	  dispcnt=0;
      }
	}		
//}

⌨️ 快捷键说明

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