#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定时器就行了。
祝你成功!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)