您的位置 首页 FPGA

avr atmega16做的频率计 使用输入捕获功用

/******************************************基于频率计程序设计**功能:频率计**时钟频率:内部8M*频率计最大频率…

/*****************************************
* 根据频率计程序设计 *
* 功 能:频率计 *
* 时钟频率:内部8M *
频率计最大频率规模。proteus测的65K 左右
MADE BY LYQ
*****************************************/
#include
#include
#include “1602.c”
#define uint unsigned int
#define uchar unsigned char
#pragma interrupt_handler timer1_capture:6
#pragma interrupt_handler timer1_over:9
uint Freq=0;
uint i;
uchar a=0;
uchar data[6]={0,0,0,0,0,0};//显现初值,最终一个0是结束符,便利液晶显现

void timer1_init()
{
TIMSK=(1<ICIE1)|(1<TCCR1B=(1<<ICNC1)|(1<<ICES1)|(1<TCNT1=0X85ed;// ###守时1s#########
TIFR=(1<<%&&&&&%F1)|(1<//SREG=SREG&0x7f;
}
void hz(uint i,uchar *p) //显现处理,+48(0x30) 0的ASCII码。。是因为液晶显现的是ASCII码
{

p[4]=i%10+48;//个
p[3]=i/10%10+48;//十
p[2]=i/100%10+48;//百
p[1]=i/1000%10+48;//千
p[0]=i/10000%10+48;//万
}

void main()
{
timer1_init();
init_1602();//液晶初始化

DDRD=0x00;
PORTD=0xff;//设置D口为带上拉电阻输入
SREG|=0x80;
LCD_write_string(3,0,”MADE BY LYQ”);
LCD_write_string(11,1,”Hz”);
while(1)
{
if(a)
{
a=0;
hz(i,data);
LCD_write_string(6,1,data); //显现

}
}
}

void timer1_capture()//发生捕获中止
{
Freq++;
}

void timer1_over()//每秒发生中止一次
{
TCNT1=0X85ed;//
i=Freq;
a=1;
Freq=0;
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/272928.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部