基于PIC16F877A的簡(jiǎn)易數(shù)字頻率計(jì)
while(1) {
ccpint(); //CCP模塊工作于捕捉方式初始化
initial(); //系統(tǒng)其它部分初始化
if(FLAG2==0) {
s[0]=COUNTER; //第一個(gè)存儲(chǔ)COUNTER的值
s[1]=0X0A;
s[2]=0X0A;
s[3]=0X0A; //后面的LED將顯示DARK
}
display( ); //調(diào)用顯示子程序
keyscan(); //鍵盤掃描
data=0x00; //存儲(chǔ)數(shù)組指針賦初值
TMR1H=0;
TMR1L=0; //定時(shí)器1清0
CCP1IF=0; //清除CCP1的中斷標(biāo)志,以免中斷一打開(kāi)就進(jìn)入
//中斷
ei( ); //中斷允許
TMR1ON=1; //定時(shí)器1開(kāi)
while(1){
if(COUNT==0)break;
} //等待中斷次數(shù)結(jié)束
di(); //禁止中斷
TMR1ON=0; //關(guān)閉定時(shí)器
keyscan(); //鍵盤掃描
if(FLAG1==1) keyserve() ; //若確實(shí)有鍵按下,則調(diào)用鍵服務(wù)程序
if(FLAG2==0) continue; //如果沒(méi)有按下確定鍵,則終止此次循環(huán),
//繼續(xù)進(jìn)行測(cè)量
//如果按下了確定鍵,則進(jìn)行下面的數(shù)值轉(zhuǎn)換和顯示工作
if(COUNTER==0x01) FREQUENCY(); //COUNTER=1,則需要進(jìn)行頻率處理
if(COUNTER==0x02) PERIOD(); //COUNTER=2,則需要進(jìn)行周期處理
if(COUNTER==0x03) OCCUPATIONAL();//COUNTER=3,則需要進(jìn)行占空比處理
if(COUNTER==0x04) PULSE(); //COUNTER=4,則需要進(jìn)行脈寬處理
k=5;
if(RE51){
RE5=RE5*1000; //若RE51,則乘以1 000,保證小數(shù)點(diǎn)的精度
k=0x00;
}
else if(RE510){
RE5=RE5*1000; //若RE510,則乘以1 000,保證小數(shù)點(diǎn)的精度
k=0x00;
}
else if(RE5100){
RE5=RE5*100; //若RE5100,則乘以100,保證小數(shù)點(diǎn)的精度
k=0x01;
}
else if(RE51000){
RE5=RE5*10; //若RE51000,則乘以10,保證小數(shù)點(diǎn)的精度
k=0x02;
}
else RE5=RE5 ;
uo=(int)RE5;
sprintf(s,%4d,uo); //把需要顯示的數(shù)據(jù)轉(zhuǎn)換成4位ASII碼,且放入數(shù)
//組S中
display();
}
}本文引用地址:http://m.butianyuan.cn/article/173039.htm
評(píng)論