×
单片机 > 单片机程序设计 > 详情

用AVR单片机实现频率计设计

发布时间:2020-08-21 发布时间:
|
//AVR单片机课程设计程序
//名称:频率计
//硬件:ATMEGA16_FHz-QLD100623产品  8MHz 晶振 三位数码管显示
//程序说明:程序初调阶段,可测频率范围1Hz--65KHz 自动换档显示
//编写人:李春起
#include  
#include 

//-------------位拉高--------------------------------------------
#define LED1_H PORTD|=BIT(PD4) 
#define LED2_H PORTD|=BIT(PD5)   
#define LED3_H PORTD|=BIT(PD6)  
#define AT1_H PORTA|=BIT(PA0)  
#define AT2_H PORTA|=BIT(PA1)  
#define AT3_H PORTA|=BIT(PA2) 


//-------------位拉低--------------------------------------------
#define LED1_L PORTD&=~BIT(PD4)  
#define LED2_L PORTD&=~BIT(PD5)    
#define LED3_L PORTD&=~BIT(PD6)   
#define AT1_L PORTA&=~BIT(PA0)    
#define AT2_L PORTA&=~BIT(PA1)  
#define AT3_L PORTA&=~BIT(PA2)  

#define NOP() asm("nop")

#define uchar unsigned char 
#define uint unsigned int
//==================声明全局变量====================================
uint data,F_data=0,F_data10K=0;F_data1M=0;//频率分段储存
uint decimal1,decimal2,decimal3;
//===================数据表==============================================
__flash uchar SEG[]={0X03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
//==================mS延时子程序=========================================
void delayms(uint m)
{
  uint i,j;
  for(i=0;i=65535)
  {
    F_data10K=0;
 if(++F_data1M>=65535)
 {
   F_data1M=0;
 }

  }
}
//=====================定时器T1中断服务==============================
#pragma interrupt_handler Timer1_Interrupt:7
void Timer1_Interrupt(void)
{
  TCNT1 = 0X00;//计数数清0
  F_data = TCNT0;
  F_data |= F_data10K<<8; 
  TCNT0 = 0X00;
  F_data10K = 0;
  if(F_data<1000){decimal3=0;decimal2=0;decimal1=1;
                  data=F_data;LED1_L;LED2_H;LED3_H;}
  if(F_data>=1000){decimal3=0;decimal2=1;decimal1=0;
                   data=(F_data/10);LED1_H;LED2_L;LED3_H;}
  if(F_data>=10000){decimal3=1;decimal2=0;decimal1=0;
                    data=(F_data/100);}
  //if(F_data>=65534){F_data = (F_data>>8);F_data |= F_data1M<<8;
    //                F_data=(F_data/1000);}
}

关键字:AVR  单片机  频率计 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址