📄 phase.c
字号:
Out_data2_com(Add,0x00,0x24);
Out_com(0xb0);
Out_data(0x80+4*Num_chn);
Out_com(0xb2);
Add=16*(Y_chn+1)+X_chn;
Out_data2_com(Add,0x00,0x24);
Out_com(0xb0);
Out_data(0x80+4*Num_chn+1);
Out_com(0xb2);
Add=16*Y_chn+X_chn+1;
Out_data2_com(Add,0x00,0x24);
Out_com(0xb0);
Out_data(0x80+4*Num_chn+2);
Out_com(0xb2);
Add=16*(Y_chn+1)+X_chn+1;
Out_data2_com(Add,0x00,0x24);
Out_com(0xb0);
Out_data(0x80+4*Num_chn+3);
Out_com(0xb2);
}
/***********================液晶结束====================*************/
/****** 上面不可改动 ********/
/*****************************以上为系统函数***************************************/
/*****************************以下为功能函数***************************************/
zhuanhuan(bit biao ,float shu)
{long int temp;
if(biao)
{ temp=shu;
if(qianhou)
f[8]='+';
else
f[8]='-';
f[9]=temp/100+'0';f[10]=temp/10%10+'0';
f[11]='.';
f[12]=temp%10+'0';
}
else
{if(shu>=1000)
{temp=shu; f[6]='K';
if(shu>=100000)
{f[1]=temp/100000+'0'; temp%=100000;
f[2]=temp/10000+'0'; temp%=10000;
f[3]=temp/1000+'0';
f[4]='.';
f[5]=temp%1000/100+'0';
}
else if(shu>=10000)
{ f[1]=temp/10000+'0';
f[2]=temp/1000%10+'0';
f[3]='.';
f[4]=temp/100%10+'0';
f[5]=temp/10%10+'0';
}
else
{ f[1]=temp/1000+'0';
f[3]=temp/100%10+'0';
f[2]='.';
f[4]=temp/1000%10+'0';
f[5]=temp%10+'0';
}
}
else if(shu>=1)
{ f[6]='H';
if(shu>=100)
{temp=shu*10;
f[1]=temp/1000+'0'; temp%=1000;
f[2]=temp/100+'0'; temp%=100;
f[4]='.';
f[3]=temp/10+'0';
f[5]=temp%10+'0';
}
else if(shu>=10)
{temp=shu*100;
f[1]=temp/1000+'0'; temp%=1000;
f[2]=temp/100+'0'; temp%=100;
f[3]='.';
f[4]=temp/10+'0';
f[5]=temp%10+'0';
}
else
{temp=shu*1000;
f[1]=temp/1000+'0'; temp%=1000;
f[3]=temp/100+'0'; temp%=100;
f[2]='.';
f[4]=temp/10+'0';
f[5]=temp%10+'0';
}
}
else
{f[6]='H';
temp=shu*1000;
f[1]='0';
f[3]=temp/100+'0'; temp%=100;
f[2]='.';
f[4]=temp%100/10+'0';
f[5]=temp%10+'0';
}
}
}
/************回车确定函数*************/
void enter()
{ Cursor=0;
hk=0;
}
/**********显示缓冲区赋值函数***********/
void sent_num(bit i,uchar j)
{ if(Cursor==5)
{Cursor=0;enter(); } //输入满5个数字,自动回车退出
else
{ f[Cursor+8]=j;
Cursor++;
/*if(state==1)
{ v[Cursor+8]=j;}
else
{f[Cursor+8]=j;}
Cursor++; //Cursor为5位数据 */
}
}
/*********键值中断处理程序*************/
void int1(void) interrupt 2
{ uchar Key_Temp=0,m_Key=0;
Key_Temp=KEY; //读取键值
Delay(10000); //软件去抖动
m_Key=KEY;
anjian=~anjian;
EA=0; //防止其他中断进入
if(Key_Temp==m_Key)
{ if(m_Key==0) sent_num(0,'1'); //定义数字键1
else if(m_Key==1) sent_num(0,'2'); //定义数字键2
else if(m_Key==2) sent_num(0,'3'); //定义数字键3
else if(m_Key==6) sent_num(0,'4'); //定义数字键4
else if(m_Key==7) sent_num(0,'5'); //定义数字键5
else if(m_Key==8) sent_num(0,'6'); //定义数字键6
else if(m_Key==12) sent_num(0,'7'); //定义数字键7
else if(m_Key==13) sent_num(0,'8'); //定义数字键8
else if(m_Key==14) sent_num(0,'9'); //定义数字键9
else if(m_Key==15) sent_num(0,'0'); //定义数字键0
else if(m_Key==9) sent_num(0,'.'); //定义小数点
else if(m_Key==16)enter(); //定义回车键,不显示光标
else if(m_Key==3)
{ P16=~P16;
change2=~change2;
}
else if(m_Key==10)
{
}
else if(m_Key==5)
{change=~change;
}
else if(m_Key==4) {if(Cursor!=0){hk=1;enter();}} //KHz
else if(m_Key==11)
{ fine=0; }
else if(m_Key==17)
{ if(state==0)
{ state=1;
Chars_dis(" Dian Ya Chu Li ");
Dis_line(6);
}
else
{ state=0;
Chars_dis(" Ping Li Chu Li ");
Dis_line(6);
}
} //定义频率状态0,电压状态1
}
EA=1; //开启中断
}
void sendfre(uchar b)
{ clear=0;
CE=1;
CE=0;
Delay(120); //等待上升沿清零
clear=1;
send_fre=b; //输出频率f=F/256*N =39062.5*N
outfre=39062.5*b;
}
void convent()
{uchar MAX1,MIN1,MAX2,MIN2,temp1,temp2;
int i,j;
//bit d1you=0,g1you=0,d2you=0,g2you=0,bzhi=0; //清标志位
gu1=0;feng1=0;gu2=0;feng2=0;
Addr=0xb000;Addr2=0xb800; //把两个5510的地址付给 Addr
MAX1=*Addr;MIN1=*Addr;MAX2=*Addr2; MIN2=*Addr2; //
for(i=0;i<storge;i++)
{ temp1=*Addr; temp2=*Addr2;
if((temp1>MAX1)&&(temp1-MAX1<8)) //8
MAX1=*Addr;
else if((temp1<MIN1)&&(MIN1-temp1<12)) //12
MIN1=*Addr;
if((temp2>MAX2)&&(temp2-MAX2<8)) //8
MAX2=*Addr2;
else if((temp2<MIN2)&&(MIN2-temp2<12))//12
MIN2=*Addr2;
Addr++; Addr2++;
} //找出波峰波谷
Addr=0xb000;Addr2=0xb800;
for(i=0;i<storge;i++)
{ temp1=*Addr; temp2=*Addr2;
if(temp1==MAX1)
{ if(!feng1) //没有波峰,只存储一次存储
{gao1=i;feng1=1;}
}
else if(temp1==MIN1)
{ if(!gu1)
{di1=i;gu1=1;}
}
if(temp2==MAX2)
{ if(!feng2) //没有波峰,存储
{feng2=1;gao2=i;}
}
else if(temp2==MIN2)
{if(!gu2) //有波谷,存储
{gu2=1;di2=i;}
}
Addr++; Addr2++;
}
//以上为判断峰谷状态
if(gao1<gao2)
{ qianhou=1; //滞后
i=gao2-gao1;
if(di1>gao1)
gao1=di1-gao1;
else
gao1=gao1-di1;
if(di2>gao2)
gao2=di2-gao2;
else
gao2=gao2-di2;
gao1=gao1+gao2;
realfre=outfre/gao1*1.068;
xiang=i*3600.0/gao1;
if(gao1>i)
fine=1;
Delay(1);
}
else if(gao2>gao1)
{ gao2=di2-di1;
if(di1>gao1)
gao1=di1-gao1;
else
gao1=gao1-di1;
realfre=outfre/gao1/2;
xiang=gao2*1800.0/gao1;
if(xiang>0&&xiang<900)
fine=1;
}
if(fine)
{ Chars_dis("Haven Convented ");
Dis_line(7);
L_delay(1);
zhuanhuan(1,xiang);
zhuanhuan(0,realfre);
}
}
void cepin()
{ long int t;
uchar temp1,temp2,temp3;
clr=0;
Delay(500);
clr=1; //清零
Delay(500);
temp1=fo_h;
temp2=fo_m;
temp3=fo_l;
t=temp1*256*256+temp2*256+temp3; //(long int)temp1*256*256+
realfre=1.0/t*20000000;
}
/*========================================主函数====================================*/
void main(void)
{ uchar temp;
uint i;
Init_Int(); //中断初始化
Init_time(); //时间初始化
//Init_Serial(); //串口初始化
Init_Dian();
Clear_Dian(0);
Clear_Dian(1);
Init_Dian();
Clear_Dian(0);
Clear_Dian(1);
Chn_Create(); //汉字生成程序
Chn_dis(8,0,0);
Chn_dis(10,0,1);
Chn_dis(12,0,2);
Chn_dis(14,0,3);
Chn_dis(0,0,4);
Chn_dis(2,0,5);
Chn_dis(4,0,6);
Chn_dis(6,0,7); //武汉大学电子设计
Chn_dis(3,2,8);
Chn_dis(6,2,9);
Chn_dis(9,2,10);
Chn_dis(12,2,11); //高速测量
game=1;
change=1;
P16=0;
//boxing();
while(1)
{ Chars_dis(f); // 取频率数据
Dis_line(5);
//cepin();
if(!fine)
{ Chars_dis(" Conventionning ");
Dis_line(7);
L_delay(3);
sendfre(leijia); //开始存储
while(P15);
convent();
}
while(change2)
{ if(!change)
{Addr=0xb000;
for(i=0;i<storge;i++)
{temp=*Addr;Addr++;} //显示存储波形1
}
else
{Addr=0xb800;
for(i=0;i<storge;i++)
{temp=*Addr;Addr++;} //显示存储波形2
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -