?? 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 + -