📄 bishe.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 + -