51单片机制作频率计,测周法如何测量(用T0和T1两个就可以了吗),求大虾帮忙啊,最好详细点

51单片机制作频率计,测周法如何测量(用T0和T1两个就可以了吗),求大虾帮忙啊,最好详细点,第1张

#include <REG51.H>

#define U8 unsigned char

U8 code tab[]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28}

U8 code scn[]={0x7f,0xbf,0xdf,0xef}//先点亮左边一个数码管

U8 buf[4]={0,0,0,0}// 显示缓冲区

U8 cnt = 0   // 扫描计数

unsigned int 漏前freq = 0

unsigned int F

void main(void)

{ EA = 1   // 允许中断

TMOD = 0x01 // 设定时器0为模式1(16位)

ET0 = 1   // 定时器0中断允许

TH0 = (65536-5000) / 256 // 晶振12MHz,中断周期5mS

TL0 = (65536-5000) % 256

TR0 = 1  // 开始计数

PX0 = 1  // 外部中断优先级高

EX0 = 1  // 允许外部中氏困断

IT0 = 1  // 外部中断下降沿触发

while(1)

}

void exint0(void) interrupt 0 // 外部中断0 服务程序

{ freq++

}

void timeint(void) interrupt 1 // 定时器0中断服务程序

{ char i

TH0 = (65536-5000) / 256 // 晶振12MHz,中断周期5mS

TL0 = (65536-5000) % 256

i = cnt & 0x03  // 求应点亮的LED号(从左到右依次为 0,1,2,3)

P0 = tab[buf[i]] // 笔划代码送P0口

P2 = scn[i]  // 控制扫描码送P2口

cnt++

if(cnt==200)

{ cnt=0   // 到1秒钟,显示的数字加一

F = freq freq = 0

buf[0] = 歼搜念F / 1000

buf[1] = (F / 100) % 10

buf[2] = (F / 10)  % 10

buf[3] = F % 10

}

}

您好,单片机可以实现对方波频率、占空比的检测。做这个东西你得从以下方面入手:

1、首先测出方波的频率(这个跟占空比无关),利用这个计算出周期T;

2、利用一个独立的外档激部中断,在测量完频率后启动。

(1)先开启中断,并设置为上升边沿触发;

(2)方波从低电平跳变到高电平后,中断触发后,将其设置为下降边沿触槐圆发,同时启动定时器;

(3)第二次触发中断后,停止计时,两次中断之间的间隔修正补偿后,行明袜就是高电平的持续时间Tu。

占空比可以计算出来,就是q=Tu/T*100%,

然后就显示即可。

嗯,先不要求程序,你先搭建电路,方案有漏亮好几种,有一种比较简单的给你参考一下。

压电陶瓷片可以对低频敏感(焊接要注意,棚旁镀层很容易掉,最好用导电胶粘接),可以用于检测心跳,贴在胸口就行,线路引出来,但是这个电压低得很,毫伏级别,你需要找个运算放大器把信号放大,用OP07比较合适,对微弱信号敏感噪声低,经过一级放大后电压可能还低,再找一片OP07做第二级发当,然后后面接一个LM393电压比较,当然你还需要一个电压基准源,超过这个电压则输出1,等于心脏跳了一下,然后你只需要根据两次之间的时间就能算出来一分钟的心跳,链搜橡不需要检测一分钟,时间测定用51的T0定时器就行了。

祝你成功!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12487498.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存