简易数字频率计程序(2)

2020-02-21 20:50

}

if (flag1==0){while (flag2==0);

if (count1>4){flag1=2;flag2=0;count1=0;}/*flag1=2,1khz~10khz*/ }/*如果第一次就测出来,flag1就不为0,然后往下运行*/

while (flag1==0){ t1init(); count1=0; TH1=55536/256; TL1=55536%6; flag2=0; if (P1_0==0){TR1=1;

while(P1_0==0){if(flag2==1){ TH1=35536/256; TL1=35536%6;flag2=3;TR1=1;i+=1;} if(i<=5) continue; flag2=2;i=0;TR1=0;break; } if(flag2==0){ TH1=35536/256; TL1=35536%6;TR1=1;

while(P1_0==1){if(flag2==1){ TH1=35536/256; TL1=35536%6;flag2=3;TR1=1;i+=1;} if(i<=5) continue; flag2=2;i=0;TR1=0;break; } if(flag2==0){flag1=2;flag2=0;TR1=0;} }/**/ if(flag2==3){flag1=3;flag2=0;TR1=0;} if(flag2==2){flag1=4;flag2=0;TR1=0;} } if(flag1==0){TR1=1;

while(P1_0==1){if(flag2==1){ TH1=35536/256; TL1=35536%6;flag2=3;TR1=1;i+=1;} if(i<=5) continue; flag2=2;i=0;TR1=0;break; } if(flag2==0){ TH1=35536/256; TL1=35536%6;TR1=1;

while(P1_0==0){if(flag2==1){ TH1=35536/256; TL1=35536%6;flag2=3;TR1=1;i+=1;} if(i<=5) continue; flag2=2;i=0;TR1=0;break; }

if(flag2==0){flag1=2;flag2=0;TR1=0;} }/**/ if(flag2==3){flag1=3;flag2=0;TR1=0;} if(flag2==2){flag1=4;flag2=0;TR1=0;}

} }/*已经粗测完*/ TR1=0; }

/******************************************************/ /* 高频部分的精测 */ unsigned long jingce() {

unsigned long b,a; unsigned long c=0; t2init(); t2cx();

while(flag2==0); a=RCAP2L; b=RCAP2H;

while(flag2==1);/*等待第二次下降沿的到来*/ while(RCAP2H<200);/*判断待测周期是不是超过10ms,不是就接着等待,这是为了防止单片机最小工作时间1us这个误差而设的*/ TR2=0;

a=RCAP2L-a; b=RCAP2H-b;

c=b*256+a;/*这里还没除去周期个数,转换函数里转换*/ count2=0; count3=0; return (c); }

/******************************************************/ /* 低频部分的精测 */ unsigned long jingche() {unsigned long c; unsigned char i,j; t0init();

if(flag1==3){j=10;} if(flag1==4){j=1;} while(P1_1==1); TR0=1;

for (i=j;i>0;i--){while(P1_0==1);

while(P1_0==0); } while(P1_1==1); P1_7=0; TR0=0;

c=count4*250+(TL0-6);/*计数模式,每250个溢出一次*/ TR0=0; count1=0; count4=0; return (c); }

/******************************************************/ /* 转换函数 */

/******************************************************/ void zhuanhuan(unsigned long b, unsigned long a,unsigned char d) { unsigned long f=0; unsigned long e=0; unsigned char i,j=0; a=a-1;

if(d==1) { e=b/a;

if(flag1==1|flag1==2){if(e<1000) {e=(b*1000)/a;} if(e<10000){e=(b*100)/a;}/*还要考虑到a的大小的会有影响,因为a越大,误差越大,所以放大原来的数进行运算*/ if(e<100000){e=(b*10)/a;}

for(i=0;i<=4;i++){m[i]=e/100000;e=(e0000)*10;}/*测周期的*/ f=1; if(flag1==1) f=100; /*判断是几分频,补回来*/

e=b/a; e=e/f; j=1;

if(e>10)j=2;/*这个是用来判断实际的数值到底多大,来确定该在第几个数值后加小数点*/

if(e>100)j=3; if(e>1000) j=4; if(e>10000) j=5;

for(i=5;i>j;i--){m[i]=m[i-1];}/*小数点前的数据移位,空出一位给小数点*/

m[i]=0x2e; m[6]=0; m[7]=0x75; m[8]=0x73;

}/*小数点,单位是us*/ if(flag1==3|flag1==4){ if(e<100000) e=b*2; if(e>=100000) e=b*2/10; for(i=0;i<=4;i++){m[i]=e/10000;e=(e000)*10;}

f=1; if (flag1==3) f=10; e=b*2/f; j=5; if(e<=1000000) j=4; if(e<=100000) j=3; if(e<10000) j=2;

for(i=5;i>j;i--){m[i]=m[i-1];} m[i]=0x2e; m[6]=0; m[7]=0x6d; m[8]=0x73; }/*测周期的*/ }

if(d==2) { e=b/a;

if( flag1==1|flag1==2) { if(e<100) e=(b*1000)/a; if(e<1000) e=(b*100)/a; if(e<10000) e=(b*10)/a; if(e>100000) {e=b/a;e=e/10;} e=100000000/e;

for(i=0;i<=4;i++){m[i]=e/1000;e=(e00)*10;/*测频率的*/

} f=1;

if(flag1==1)f=100; e=b/a; e=e/f; // if(e<100)j=2;/*超出量程了*/ j=3;

if(e>10)j=2;/*大于100khz,这个是用来判断实际的数值到底多大,来确定该在第几个数值后加小数点*/

if(e>100) j=1;/*大于10khz*/ if(e>1000) j=4; /*小于1khz*/ if(e>10000) j=5; if(j<4){ for(i=5;i>j;i--){ m[i]=m[i-1];}/*小数点前的数据移位,空出一位给小数点*/

m[i]=0x2e;

m[6]=0x4b; m[7]=0x48; m[8]=0x7a; } if(j==4){ for(i=5;i>=j;i--){ m[i]=m[i-1];}/*小数点前的数据移位,空出一位给小数点*/

m[i]=0x2e; m[7]=0x48; m[8]=0x7a;} if(j==5){ j=3; for(i=5;i>=j;i--) { m[i]=m[i-1];}/*小数点前的数据移位,空出一位给小数点*/

m[i]=0x2e; m[7]=0x48; m[8]=0x7a;}

} if( flag1==3|flag1==4) { j=0; if(e<10000) {e=b*200;j=2;} else if(e<100000) {e=b*20;j=1;} else {e=b*2;} for(i=0;i<=4;i++){m[i]=1000000/e;e=(1000000%e)*10;} if(flag1==3) j=j+1;

for(i=5;i>j;i--) m[i]=m[i-1];/*小数点前的数据移位,空出一位给小数点*/ if(j==0) { for(i=6;i>0;i--) m[i]=m[i-1];m[0]=0;m[1]=0x2e; m[7]=0x48; m[8]=0x7a; }

else { m[j]=0x2e; m[6]=0x48; m[7]=0x7a; }

} }/*小数点*/ }

/******************************************************/ /*数组转换为液晶显示里的数值*/

/******************************************************/ unsigned char xianshi (unsigned char a) {unsigned char b; switch (m[a]) { case 0:{b=0x30;}break;


简易数字频率计程序(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:金融管理与实务专业毕业设计方案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: