微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于PIC16F877A的简易数字频率计的设计

基于PIC16F877A的简易数字频率计的设计

时间:12-30 来源:互联网 点击:

  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();
  }
  }

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

网站地图

Top