蓝桥杯单片机必备知识—–(8)NE555测频
NE555测频原理
很多人不知道NE555测频怎么搞,其实很简单。
已经使用跳线帽将P34和NE555的输出端接在一起了,关乎NE555,有些许数电基础的都明白,NE555就是改变RB3,改变负载电阻,使其输出方波的频率发生改变,其中并不涉及任何对NE555的编程,当然你也没法对其编程。
官方的CT107D的NE555输出频率范围是50-20K赫兹(以上)。
那么我们怎么测频呢。
P34对应的是单片机的定时器0的脉冲输入口,那么我们可以把定时器0设置为计数模式,每接收到NE555的一个脉冲,定时器0计数值就加1,然后500ms读取一次定时器0的计数值,再乘以2大约就是1s内的脉冲,不就是NE555输出的方波的频率吗。
然后按键、LED、数码管等等其余需要使用定时器的就使用定时器1来完成。
主要代码:
//记500ms,乘以2就是频率
if(f_flag) //500ms
{
f_flag = 0;
TR0 = 0; //关闭定时器0
FRE = TH0 * 256 + TL0; //二进制转十进制
FRE *= 2; //乘2就为频率
TH0 = TL0 = 0; //将计数器的高低位置0
TR0 = 1; //打开定时器0
}
测试结果:
但是自己的显示结果肯定是不够的的,需要结合示波器来判断自己测量是否准确;我的测试结果之前在学校实验室校对过。
完整代码粘贴:
#include <stc15f2k60s2.h>
#define uchar unsigned char
#define uint unsigned int
uchar tab[] = {
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
uchar dspbuf[] = {
10,10,10,10,10,10,10,10};
long int FRE;
uchar f_flag;
void load();
void display();
void cls()
{
P2 = (P2 & 0x1f) | 0x80;
P0 = 0xff;
P2 = 0x1f;
P2 = (P2 & 0x1f) | 0xa0;
P0 = 0x00;
P2 = 0x1f;
}
void main()
{
cls();
AUXR = 0xc0;
TMOD = 0x04;
TL1 = 0xcd;
TH1 = 0xd4;
TL0 = TH0 = 0;
TR0 = 1;
TR1 = 1;
ET1 = 1;
EA = 1;
while(1)
{
if(f_flag)
{
f_flag = 0;
TR0 = 0;
FRE = TH0 * 256 + TL0;
FRE *= 2;
TH0 = TL0 = 0;
TR0 = 1;
}
}
}
void time1() interrupt 3
{
static unsigned int intr = 0;
if(++intr == 500){
intr = 0;f_flag = 1;}
display();
}
void load()
{
dspbuf[7] = FRE % 10;
dspbuf[4] = FRE / 1000;
dspbuf[5] = FRE / 100 - dspbuf[4] * 10;
dspbuf[6] = FRE / 10 - dspbuf[4] * 100 - dspbuf[5] * 10;
}
void display()
{
static unsigned char dspcom = 0;
load();
P2 = (P2 & 0x1f) | 0xe0;
P0 = 0xff;
P2 = 0x1f;
P2 = (P2 & 0x1f) | 0xc0;
P0 = 1<<dspcom;
P2 = 0x1f;
P2 = (P2 & 0x1f) | 0xe0;
P0 = tab[dspbuf[dspcom]];
P2 = 0x1f;
if(++dspcom == 8) dspcom = 0;
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/100130.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...