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

📄 bishe.c

📁 这里面包括涡流测厚仪的全部程序
💻 C
字号:
/*涡流测厚仪*/
#include<AT89X51.H>
#include"lcd.h"
/*********************************************************************************
管脚定义
*********************************************************************************/
sbit  CS=P0^4;//AD部分
sbit  LOAD=P0^3;
sbit  DINA=P0^2;
sbit  SCLK=P0^1;
sbit  DOUT=P0^0;
 uchar bdata a;
uchar bdata b;
sbit a0=a^0;
sbit b0=b^0;
/*******************************************************************************
全局变量定义和数组定义
*******************************************************************************/


uchar code table1[]={"0123456789"};
uchar code table2[]={"calibration "};
uchar code table3[]={"please insert al"};
uchar code table4[]={"and press enter"};
uchar code table5[]={"please input num"};
uchar code table8[]={"slab is :"};
uchar table6[20];
uchar table7[6];
int error;
int n;
uchar counter;
bit scan=0;
bit enabledis=0;

/*///////////////////////////////////////////////////////////////////////
 函数名: 定时器中断服务函数
 功能:   产生50ms的时钟延时 
 返回值: 无
 注意:	  无

//////////////////////////////////////////////////////////////////////*/

void timer0(void) interrupt 1 using 2
{TL0=(65535-50000)%256;
 TH0=(65535-50000)/256;
 scan=1;
 counter++;
 if(counter==20)
  {counter=0;
  enabledis=1;
  }
}

void init(void)
{TMOD=0x01;   //16位定时器
 EA=1;
 ET0=1;
 TH0=(65535-50000)/256;
 TL0=(65535-50000)%256;
 
		}


/*///////////////////////////////////////////////////////////////////////
 函数名:  AD芯片接口函数
 功能:    负责读取AD芯片的数据并返回转换后的值
 返回值:  返回一个16位的数据
 注意:		无

//////////////////////////////////////////////////////////////////////*/
uint ADC(void)
{uint c;
uchar ADS,n=0;
 char i,j;
  SCLK=0;
   CS=0;
   i=0;
 while(i<16)
{   
if(i<8)
        ADS=0x00;
else 
        ADS=0x00;
  for(j=8;j>=1;j--)
{   
    DINA=ADS&0x80;
    ADS<<=1;
    //CLK=0;
  //_nop_();
   SCLK=0;
   SCLK=1;
}
    i=i+8;
}
  // CS=1;
    SCLK=0;

 //while(EOC==1);
// _nop_();
while(n<16)
{   
 if(n<8)
  for(i=1;i<=8;i++)
   { a<<=1;
   SCLK=1;
    a0=DOUT;
//	SCLK=1;
    SCLK=0;
   //  a<<=1;             
   }
 else 
  for(i=1;i<=8;i++)
   { b<<=1;
   SCLK=1;
    b0=DOUT;
	//SCLK=1;
    SCLK=0;
   // b<<=1;
   }
    n=n+8;
 }
 CS=1;
 c=a*256+b;
 return(c);
}

/*///////////////////////////////////////////////////////////////////////
 函数名: 数字选择函数
 功能:    
 返回值: 无
 注意:	  返回具体键位地址

//////////////////////////////////////////////////////////////////////*/
select(uchar x)
{
 n=n*10+x;}
/*///////////////////////////////////////////////////////////////////////
 函数名: 键盘扫描函数
 功能:    
 返回值: 无
 注意:	  返回具体键位地址

//////////////////////////////////////////////////////////////////////*/
uchar key(void)    //键盘扫描
{uchar sccode,recode;
P1=0xf0;
if((P1&0xf0)!=0xf0)
{delay(10);
if((P1&0xf0)!=0xf0)
{delay(100);
if((P1&0xf0)==0xf0)
sccode=0xfe;
while((sccode&0x10)!=0)
{P1=sccode;
if((P1&0xf0)!=0xf0)
{recode=(P1&0xf0)|0x0f;
P1=0xf0;
return((~sccode)+(~recode));
    }
 else
 sccode=(sccode<<1)|0x01;
 }
     }
        }
P1=0xf0;
	return(0);
	}
/*///////////////////////////////////////////////////////////////////////
 函数名: 键位对应函数
 功能:    
 返回值: 无
 注意:	  无

//////////////////////////////////////////////////////////////////////*/
sweep()
{uchar i;
i=key();
//if(l==1)
{
switch(i)
{
case 0x11:select(1);break;  //表值对应
case 0x21:select(2);break;
case 0x41:select(3);break;
//case 0x81:check();  break;
case 0x12:select(4);break;
case 0x22:select(5);break;
case 0x42:select(6);break;
//case 0x82:normal(); break;
case 0x14:select(7);break;
case 0x24:select(8);break;
case 0x44:select(9);break;
//case 0x84:set();    break;
//case 0x18:enter();  break;
case 0x28:select(0);break;
//case 0x48:warn();   break;
//case 0x88:broken(); break;
}
  
    }}

asc_change(int f) 
 {
 table7[5]=0x00;
 table7[4]=f%10+0x30;
 table7[3]='.';
 table7[2]=f/10%10+0x30;
 table7[1]=f/100%10+0x30;
 table7[0]=f/1000+0x30;
 
 }

/*///////////////////////////////////////////////////////////////////////
 函数名: 主函数
 功能:    
 返回值: 无
 注意:	  无

//////////////////////////////////////////////////////////////////////*/
 main()
{int a,k=0;
 init();
 lcdinit();
 lcd_dis(table3,0x80);
 lcd_dis(table4,0xc0);
 while(key()!=0x18);
 a=ADC();
 lcd_dis(table5,0x80);
 while(key()!=0x18)
 {sweep();}
 error=a-n;
 a=0;
 TR0=1;//开定时器0
 lcd_com(0x01);   //清屏
 lcd_dis(table8,0x80);
 while(1);
 {if(scan==1)
    {table6[k]=ADC();
	a+=(table6[k]+error);
    k++;
    if(k==19)
    k=0;
    }
  if(enabledis==1)
  {a=a/20;
  a=a*2500;
  a=a>>15;
  asc_change(a);
  lcd_dis(table7,0xc0);
  }
 
  }

}

⌨️ 快捷键说明

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