基于PIC16F877A的简易数字频率计的设计
while(1) {
ccpint(); //CCP模块工作于捕捉方式初始化
initial(); //系统其它部分初始化
if(FLAG2==0) {
s[0]=COUNTER; //第一个存储COUNTER的值
s[1]=0X0A;
s[2]=0X0A;
s[3]=0X0A; //后面的LED将显示"DARK"
}
display( ); //调用显示子程序
keyscan(); //键盘扫描
data=0x00; //存储数组指针赋初值
TMR1H=0;
TMR1L=0; //定时器1清0
CCP1IF=0; //清除CCP1的中断标志,以免中断一打开就进入
//中断
ei( ); //中断允许
TMR1ON=1; //定时器1开
while(1){
if(COUNT==0)break;
} //等待中断次数结束
di(); //禁止中断
TMR1ON=0; //关闭定时器
keyscan(); //键盘扫描
if(FLAG1==1) keyserve() ; //若确实有键按下,则调用键服务程序
if(FLAG2==0) continue; //如果没有按下确定键,则终止此次循环,
//继续进行测量
//如果按下了确定键,则进行下面的数值转换和显示工作
if(COUNTER==0x01) FREQUENCY(); //COUNTER=1,则需要进行频率处理
if(COUNTER==0x02) PERIOD(); //COUNTER=2,则需要进行周期处理
if(COUNTER==0x03) OCCUPATIONAL();//COUNTER=3,则需要进行占空比处理
if(COUNTER==0x04) PULSE(); //COUNTER=4,则需要进行脉宽处理
k=5;
if(RE51){
RE5=RE5*1000; //若RE51,则乘以1 000,保证小数点的精度
k=0x00;
}
else if(RE510){
RE5=RE5*1000; //若RE510,则乘以1 000,保证小数点的精度
k=0x00;
}
else if(RE5100){
RE5=RE5*100; //若RE5100,则乘以100,保证小数点的精度
k=0x01;
}
else if(RE51000){
RE5=RE5*10; //若RE51000,则乘以10,保证小数点的精度
k=0x02;
}
else RE5=RE5 ;
uo=(int)RE5;
sprintf(s,"%4d",uo); //把需要显示的数据转换成4位ASII码,且放入数
//组S中
display();
}
}
- 基于DSP的光纤高温测量仪的软件设计 (04-08)
- 基于DSP处理器的光纤高温测量仪的设计方案(05-08)
- 用DSP实现抖动(Jitter)测量的方法(04-28)
- 基于dsPIC30F2010的土壤水分测量仪的设计研究(08-27)
- 用DSP实现增量式光电编码器的细分(01-01)
- MSP430在电力测控保护产品中的应用(01-15)