?? inducetor.c
字號:
#include <REG52.H>
unsigned long temp,inducetor,total_count,BN[5],BUF[2];
unsigned char T0count,timecount;
unsigned char idata led[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
char temp1,temp2,temp3;
int flag,flag1,flag2,flag3;
sbit P27=P2^7;
sbit P25=P2^5;
sbit P24=P2^4;
void jishu(void);
void qvzhi(int);
void chushicanshu(void);
void inttime(void);
void inttime(void)
{
TMOD=0x15;
IP=0x08;
TH0=0;
TL0=0;
TH1=-50000/256;
TL1=-50000%256;
ET0=1;
ET1=1;
timecount=0;
/*
SCON=0x40;//0101,0000 8位數據位,無奇偶校驗
T2CON=0x34;//0011,0100,由T2作為波特率發生器
TH2=0xFF;
TL2=0xD9;
RCAP2H=0xFF;//時鐘12MHz,9600 波特率
RCAP2L=0xD9;//9600波特率RCAP2H=0xFF;RCAP2L=0xD9;
*/
EA=1;
}
void main(void)
{
int i,j,count,change_time,change_time1;
count=change_time=change_time1=0;
flag3=0;
P2=0xff;
P1=0xff;
inttime();
chushicanshu();
P1=led[0];
P2=0x00;
for(;;)
{
flag1=1;
while(flag1)
{
qvzhi(1);
if(flag2==1)
{
flag2=0;
if(flag3==0)
{
if(BUF[0]>temp)
{
change_time=change_time1=0;
flag3=1;
}
}
else
{
if(BUF[0]<temp)
{
change_time=change_time1=0;
flag3=0;
}
}
BUF[0]=temp;
if(temp<=inducetor)
{
if((inducetor-temp)>200)
{
change_time1=0;
BN[change_time]=temp;
change_time++;
}
if(change_time==3)
{
change_time=0;
for(i=0;i<3;i++)
{
for(j=i;j<3;j++)
{
if(BN[j]<BN[i])
{
BN[i]=BN[j];
}
}
}
if((inducetor-BN[0])>400)
{
P27=0;
inducetor=BN[0];
P1=led[count];
count++;
if(count==10)
{
count=0;
}
/*
TI=0;
SBUF=0x00;
while(!TI)
TI=0;
*/
}
else
{
inducetor=inducetor-150;
}
}
}
else
{
if((temp-inducetor)>200)
{
change_time=0;
BN[change_time1]=temp;
change_time1++;
}
if(change_time1==3)
{
change_time1=0;
for(i=0;i<3;i++)
{
for(j=i;j<3;j++)
{
if(BN[j]>BN[i])
{
BN[i]=BN[j];
}
}
}
if((BN[0]-inducetor)>400)
{
P27=1;
inducetor=BN[0];
P1=led[count];
count++;
if(count==10)
{
count=0;
}
/*
TI=0;
SBUF=0x01;
while(!TI)
TI=0;
*/
}
else
{
inducetor=inducetor+150;
}
}
}
}
}
}
}
timer0() interrupt 1 using 1
{
T0count++;
}
timer1() interrupt 3 using 1
{
TH1=-50000/256;
TL1=-50000%256;
timecount++;
if(timecount==5)
{
TR0=0;
TR1=0;
timecount=0;
flag=1;
temp=(T0count*65536+TH0*256+TL0)*4;
temp1=TL0;
temp2=TH0;
temp3=T0count;
T0count=0;
TH0=0;
TL0=0;
TR1=1;
TR0=1;
}
}
void jishu(void)
{
flag1=1;
while(flag1)
if(flag==1)
{
flag=0;
flag1=0;
flag2=1;
}
}
void qvzhi(n)
{
int i;
TR1=1;
TR0=1;
for(i=0;i<n;i++)
{
jishu();
BN[i]=temp;
}
}
void chushicanshu(void)
{
int i,j;
unsigned char k;
qvzhi(5);
TR0=0;
TR1=0;
total_count=0;
for(i=0;i<5;i++)
{
for(j=i;j<5;j++)
{
if(BN[i]>BN[j])
{
BN[i]=BN[j];
}
}
}
for(i=0;i<5;i++)
{
k=BN[i]-BN[0];
if(0<=k<2000)
{
BN[i]=BN[0];
}
else
{
if(k>5000)
{
BN[i-1]=BN[i-2]=BN[i-3]=BN[i-4]=BN[i];
}
}
total_count=total_count+BN[i];
}
inducetor=total_count/5;
BUF[0]=inducetor;
if(inducetor<160000)
{
P27=0;
flag3=0;
}
else
{
P27=1;
flag3=1;
}
TR1=1;
TR0=1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -