标题:
单片机测NE555N发送方波的频率和周期(即频率计)
[打印本页]
作者:
y晓风残月
时间:
2017-10-18 20:57
标题:
单片机测NE555N发送方波的频率和周期(即频率计)
本人从51hei论坛找了很久,没有找到有合适正确的测频率和周期的程序,特此编写一份,以供大家学习,也希望大家有搞懂的程序,不论难易,都发出来一起学习。
所有资料51hei提供下载:
频率计.zip
(58.53 KB, 下载次数: 125)
2017-10-18 20:56 上传
点击文件名下载附件
程序
下载积分: 黑币 -5
单片机源程序如下:
/***********************************************
**注意:频率测出的单位为Hz,周期单位为us
**初始状态为频率,按下K2进入周期,按下K1进入频率
**********************************************/
#include <STC15F2K60S2.H>
#include <intrins.h>
#include "anjian.h"
sbit a=P2^5;
sbit b=P2^6;
sbit c=P2^7;
sbit beep=P0^6;
sbit K1=P3^0;
sbit K2=P3^1;
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x90,0xbf,0xff};
unsigned int disp[8]={10,10,10,10,10,10,10,10};
unsigned char key_scan();
extern unsigned char key_value;
unsigned int zhuoqi=0;
unsigned int pl1=0;
unsigned char over_flag=0;
unsigned int f,t;
void Timer0init();
void Timer1init();
void Delay300us();
void Delay100ms();
void zhouqidisplay();
void Pldisplay();
void Display();
void zongdisp();
void Bee()
{
a=1;b=0;c=1;
beep=0;
}
void main()
{
Bee();
Delay300us();
Timer0init();
Timer1init();
EA=1;
TR0=1;
TR1=1;
while(1)
{
if(over_flag)
{
ET0=1;
TR0=1;
TR1=1;
over_flag=0;
f=pl1*10;//每1us,f加10
pl1=0;
}
Pldisplay();
Display();
P2=(P2&0x1f)|0xe0;
P0=0xff;
P2=(P2&0x1f)|0xc0;
P0=0xff;
if(K2==0)
Delay100ms();
if(K2==0)
{
while(1)
{
t=1000000/f;
zhouqidisplay();
Display();
P2=(P2&0x1f)|0xe0;
P0=0xff;
P2=(P2&0x1f)|0xc0;
P0=0xff;
if(K1==0)
Delay100ms();
if(K1==0)
break;
}
}
}
}
void Timer0init()//计数器(16位自动重装初始值)
{
AUXR = 0x80;
TMOD=0x04;
TL0=0xff;
TH0=0xff;//1us
ET0=1;
TR0=1;
}
void Timer1init()//50ms
{
AUXR &= 0xBF; //定时器时钟12T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0x00; //设置定时初值
TH1 = 0x4C; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 0; //定时器1开始计时
ET1 = 1; //打开定时器1中断
}
void Timer0_init() interrupt 1
{
pl1++;
}
bit t1=0;
void Timer1_init() interrupt 3
{
if(t1==0)
t1=1;
else
{
t1=0;
ET0=0;
TR0=0;
TR1=0;
//每100ms重新关闭开启定时器0更新数据
over_flag=1;
}
}
void Display()
{
unsigned char i;
for(i=0;i<8;i++)
{
P2=(P2&0x1f)|0xe0;
P0=0xff;
P2&=0x1f;
_nop_();
P2=(P2&0x1f)|0xc0;
P0=0x01<<i;
P2&=0x1f;
_nop_();
P2=(P2&0x1f)|0xe0;
P0=disp[i];
P2&=0x1f;
P0=0Xff;
Delay300us();
}
}
void Delay300us()
{
unsigned char i,j;
_nop_();
_nop_();
i=4;
j=54;
do
{
while(--j);
} while(--i);
}
void Delay100ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 5;
j = 52;
k = 195;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1