微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > c51写的测转速源程序

c51写的测转速源程序

时间:11-18 来源:互联网 点击:

ucharx24c02_read(ucharaddr)
{
uchari;
start();
writex(0xa0);
ack();
writex(addr);
ack();
start();
writex(0xa1);
ack();
i=readx();
nack();
stop();
delay(10);
return(i);
}
voidx24c02_write(ucharaddr,ucharinfo)
{
//EA=0;//中断总禁止
start();
writex(0xa0);
ack();
writex(addr);
ack();
writex(info);
ack();
stop();
//EA=1;//中断开//设置状态禁止所有外部中断
}
voidgetdate(void)
{ucharda5,da4,da3,da2,da1,da0;
x24c02_init();
da0=(x24c02_read(0x00)%10);
da1=(x24c02_read(0x01)%10);
da2=(x24c02_read(0x02)%10);
da3=(x24c02_read(0x03)%10);
da4=(x24c02_read(0x04)%10);
da5=(x24c02_read(0x05)%10);
ltj=(x24c02_read(0x06)%10);
count=da3*1000+da2*100+da1*10+da0;
bh=da5*10+da4;
if(bh>99){bh=0;}
if(count>6000){count=6000;}
if(ltj>1){ltj=1;}

}
voidsavedate(void)
{ucharda5,da4,da3,da2,da1,da0;
da5=bh/10;
da4=bh%10;
da3=count/1000;
da2=(count%1000)/100;
da1=(count%100)/10;
da0=count%10;
dsp();
x24c02_init();
x24c02_write(0x00,da0);
x24c02_write(0x00,da0);
dsp();
x24c02_write(0x01,da1);
x24c02_write(0x01,da1);
dsp();
x24c02_write(0x02,da2);
x24c02_write(0x02,da2);
dsp();
x24c02_write(0x03,da3);
x24c02_write(0x03,da3);
dsp();
x24c02_write(0x04,da4);
x24c02_write(0x04,da4);
dsp();
x24c02_write(0x05,da5);
x24c02_write(0x05,da5);
dsp();
x24c02_write(0x06,ltj);
x24c02_write(0x06,ltj);
dsp();
}
//动态显示
voiddsp(void)
{
P2=ascled[disp[0]];led0=0;delay(50);led0=1;//led0=0显示,=1不显示
P2=ascled[disp[1]];led1=0;delay(50);led1=1;
P2=ascled[disp[2]];led2=0;delay(50);led2=1;
P2=ascled[disp[3]];led3=0;delay(50);led3=1;
}

//闪烁动态显示有效
voiden_dsp(void)
{disp_j=0;
disp_i[0]=0x0;//显示闪动标志0显示
disp_i[1]=0x0;
disp_i[2]=0x0;
disp_i[3]=0x0;
}
//闪烁动态显示
voiddsp_flash(void)
{
disp_j++;
if(disp_j>240)
{disp_j=0;
disp_i[disp_c]=!(disp_i[disp_c]&0x01);
}
P2=ascled[disp[0]];led0=disp_i[0];delay(50);led0=1;//led0=0显示,=1不显示
P2=ascled[disp[1]];led1=disp_i[1];delay(50);led1=1;
P2=ascled[disp[2]];led2=disp_i[2];delay(50);led2=1;
P2=ascled[disp[3]];led3=disp_i[3];delay(50);led3=1;
}

voiddisplay(void)
{
//设定状态时如果有键按下就不闪烁
if((ss==0)││(ktemp!=0x1b))
{
dsp();
}
else
{
dsp_flash();
}
}

voidkbscan(void)//键盘扫描
{uchartemp,i;//0
temp=P3;
ktemp=temp&0x1b;//检查key0,key1,key2,key300011011
if(ktemp!=0x1b)
{//1
for(i=0;i<250;i++){display();}
temp=P3;
if(ktemp==(temp&ktemp))
{//2
//keyval=ktemp;//记录键值
if(key_set==1)
{//3
switch(ktemp){
case0x1a://key0
{
/////////////////
m++;
if(m>2){m=1;}
switch(m){
case1:////显示参数名称
ss=0;disp_c=0;en_dsp();
switch(mi){
case0:
disp[3]=11;////显示设定参数mi=0显示预设报警值,1显示保护检测时间
disp[2]=11;
disp[1]=10;
disp[0]=1;
dsp();
break;
case1:
disp[3]=11;////显示设定参数mi=0显示预设报警值,1显示保护检测时间
disp[2]=11;
disp[1]=10;
disp[0]=2;
dsp();
break;
case2:
disp[3]=11;////显示设定参数mi=0显示预设报警值,1显示保护检测时间,2显示高低转速测量
disp[2]=11;
disp[1]=10;
disp[0]=3;
dsp();
break;
}
break;
case2:////显示参数
ss=1;en_dsp();
switch(mi){//显示设定参数mi=0显示预设报警值,1显示保护检测时间
case0:
disp[3]=count/1000;
disp[2]=(count%1000)/100;
disp[1]=(count%100)/10;
disp[0]=count%10;
for(i=0;i<150;i++){dsp();}
break;
case1:
disp[3]=11;
disp[2]=11;
disp[1]=bh/10;
disp[0]=bh%10;
for(i=0;i<150;i++){dsp();}
break;
case2:
disp[3]=11;
disp[2]=11;
disp[1]=11;
disp[0]=ltj;
for(i=0;i<150;i++){dsp();}
break;
}
break;
}
/////////////////
}
case0x19://key1
{
break;
}
case0x13://key2
{
//闪动位移
if(ss==1)
{
switch(mi){
case0:
en_dsp();////预设转速4位显示
disp_c++;
if(disp_c>3){disp_c=0;}
break;
case1:
en_dsp();////输出保护时间2位显示
disp_c++;
if(disp_c>1){disp_c=0;}
break;
case2:
break;
}
}
if(m==1)
{//保存数据退出设置状态
savedate();
//借用后恢复
//bjing=0;
m=0;
mi=0;
key_set=0;
ss=0;
en_dsp();
disp[0]=0;
disp[1]=0;
disp[2]=0;
disp[3]=0;
for(i=0;i<150;i++){dsp();}
if(ltj==1)
{
TMOD=0x11;TL0=0xaf;TH0=0x3c;TL1=0xaf;TH1=0x3c;ET0=1;ET1=1;TR0=1;TR1=1;
}
EA=1;//数据保存允许中断
}
break;
}
case0x0b://key3
{
/////////////////
if(m==1)
{disp_c=0;
mi++;if(mi>2){mi=0;}
switch(mi){
case0:
disp[3]=11;////显示设定参数mi=0显示预设报警值,1显示保护检测时间
disp[2]=11;
disp[1]=10;
disp[0]=1;
dsp();
break;
case1:
disp[3]=11;////显示设定参数mi=0显示预设报警值,1显示保护检测时间
disp[2]=11;
disp[1]=10;
disp[0]=2;
dsp();
break;
case2:
disp[3]=11;////显示设定参数mi=0显示预设报警值,1显示保护检测时间
disp[2]=11;
disp[1]=10;
disp[0]=3;
dsp();
break;
}
}
else
{
m=0;
switch(mi){
case0:
disp[disp_c]++;
if(disp[disp_c]>9){disp[disp_c]=0;}
if((disp[3]*1000+disp[2]*100+disp[1]*10+disp[0])>6000)
{//如果超出设定范围
disp[3]=0;disp[2]=0;disp[1]=0;disp[0]=0;
}
count=disp[3]*1000+disp[2]*100+disp[1]*10+disp[0];
dsp_flash();
break;
case1:
disp[disp_c]++;
if(disp[disp_c]>9){disp[disp_c]=0;}
bh=disp[1]*10+disp[0];
dsp_flash();
break;
case2:
disp[disp_c]++;
if(disp[disp_c]>1){disp[disp_c]=0;}
ltj=disp[0];
dsp_flash();
break;
}
}
break;
}
}
}//3
else
{//4
switch(ktemp){
case0x1a://key0
{
////////////////
//禁止测转速
EA=0;
key_set=1;
en_bj=0;//如果设定状态允许报警标志0
out=0;//
/////
//bjing=0;
///disp_c=0;//time0
/////
m=1;
disp[3]=11;////显示设定参数mi=0显示预设报警值,1显示保护检测时间
disp[2]=11;
disp[1]=10;
disp[0]=1;
for(i=0;i<150;i++){dsp();}

break;
}
case0x19://key1
{
//允许报警
en_bj=1;
break;
}
}
}//4
}//2
}//1
}//0

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top