单片机频率计代码,范围10hz到4khz
时间: 2023-08-18 22:04:02 浏览: 62
好的,以下是一个基于单片机的频率计代码,适用于10Hz到4kHz的频率范围:
```
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit Signal = P1^0; // 信号输入引脚
sbit LED = P2^0; // 频率计工作指示灯
uchar count = 0; // 计数器计数值
uchar flag = 0; // 计数器溢出标志
uint freq = 0; // 频率计算值
void main()
{
TMOD = 0x01; // 定时器0工作在模式1
TH0 = 0; // 定时器初始值
TL0 = 0;
TR0 = 1; // 启动定时器0
ET0 = 1; // 允许定时器0中断
EA = 1; // 开启总中断
while(1)
{
if(flag == 1) // 计数器溢出,计算频率
{
flag = 0; // 重置溢出标志
if(count >= 10 && count <= 4000) // 只计算10Hz到4kHz的频率
{
freq = 1000000 / (count * 12); // 计算频率,单位为Hz
}
else
{
freq = 0;
}
count = 0; // 重置计数器
}
if(freq > 0) // 频率大于0,工作指示灯亮
{
LED = 1;
}
else // 频率等于0,工作指示灯灭
{
LED = 0;
}
}
}
void timer0_isr() interrupt 1
{
count++; // 计数器加1
flag = 1; // 标志计数器溢出
TH0 = 0; // 重置定时器值
TL0 = 0;
}
```
这个代码和之前的代码类似,也是通过定时器0来计数。但是这个代码还加入了一个条件判断,只有当计数器计数值在10到4000之间时才会计算频率,因为这个范围内的频率才是我们所需要的。计算频率的公式也做了相应的改变,单位变为Hz。同时,代码还会根据计算出的频率来控制一个指示灯的亮灭。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)