学习笔记单片机的40个经典实验之27:6 位数显频率计数器
一、 实验任务
利用 AT89S51 单片机的 T0、T1 的定时计数器功能,来完成对输入的信号进行频率计数,计数的频率结果通过 8 位动态数码管显示出来。要求能够对0-250KHZ 的信号频率进行准确计数,计数误差不超过±1HZ。
二、电路原理图
图 4.31.1
三、系统板上硬件连线
(1). 把“单片机系统”区域中的 P0.0-P0.7 与“动态数码显示”区域中的ABCDEFGH 端口用 8 芯排线连接。
(2). 把“单片机系统”区域中的 P2.0-P2.7 与“动态数码显示”区域中的S1S2S3S4S5S6S7S8 端口用 8 芯排线连接。
(3). 把“单片机系统”区域中的 P3.4(T0)端子用导线连接到“频率产生器”区域中的 WAVE 端子上。
四、程序设计内容
(1). 定时/计数器 T0 和 T1 的工作方式设置,由图可知,T0 是工作在计数状态下,对输入的频率信号进行计数,但对工作在计数状态下的 T0,最大计数值为 fOSC/24,由于 fOSC=12MHz,因此:T0 的最大计数频率为250KHz。对于频率的概念就是在一秒只数脉冲的个数,即为频率值。所以 T1 工作在定时状态下,每定时 1 秒中到,就停止 T0 的计数,而从 T0 的计数单元中读取计数的数值,然后进行数据处理。送到数码管显示出来。
(2). T1 工作在定时状态下,最大定时时间为 65ms,达不到 1 秒的定时,所以采用定时 50ms,共定时 20 次,即可完成 1 秒的定时功能。
五、C 语言源程序
#include <AT89X52.H>
unsigned char code
dispbit={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char code dispcode={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
unsigned char dispbuf[8]={0,0,0,0,0,0,10,10};
unsigned char temp[8];
unsigned char dispcount;
unsigned char T0count;
unsigned char timecount;
bit flag;
unsigned long x;
void main(void)
{
unsigned char i;
TMOD=0x15;
TH0=0;
TL0=0;
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
TR1=1;
TR0=1;
ET0=1;
ET1=1;
EA=1;
while(1)
{
if(flag==1)
{
flag=0;
x=T0count*65536+TH0*256+TL0;
for(i=0;i<8;i++)
{
temp[i]=0;
}
i=0;
while(x/10)
{
temp[i]=x%10;
x=x/10;
i++;
}
temp[i]=x;
for(i=0;i<6;i++)
{
dispbuf[i]=temp[i];
}
timecount=0;
T0count=0;
void t0(void) interrupt 1 using 0
{
T0count++;
}
void t1(void) interrupt 3 using 0
timecount++;
if(timecount==250)
{
TR0=0;
timecount=0;
flag=1;
}
P0=dispcode[dispbuf[dispcount]];
P2=dispbit[dispcount];
dispcount++;
if(dispcount==8)
{
dispcount=0;
51单片机项目(2)--基于51单片机的频率计仿真
本设计实现的功能:实现对正弦信号的频率测量,并用一个按键控制对频率的读取。当按键按下时,测量频率并且将其显示在LCD1602屏幕上。测频范围是1-100KHZ。
整体原理图如下:
频率测量的基本方法为 :测频法、测周法、测频与测周结合的方法。我这次的设计采用的是测频法。由于是对正弦信号的测量,所以要对正弦信号整形。因为单片机的管脚所能识别的高电平为3.3V左右。波形整形我所采用的方案是用一个运放构成一个电压比较器,电压比较的反向输入端接地,正向输入端接正弦信号,那么这个输入正弦信号经过电压比较器之后,就会输出同频率的方波信号。整形的波形如下所示:
硬件上的准备工作完成之后,接下来就是软件程序的编写了。测频的思路是:使用外部中断,记录输入脉冲的个数。然后在用一个定时器,读取一段时间内的脉冲个数。通过脉冲个数和产生脉冲所花费的时间,就可以计算出频率了。
部分代码如下:
首先配置定时器的中断时间为50ms,通过在定时器的中断服务函数中对变量t++,当t加到20的时候,说明时间已经过去了1S。此时读取外部中断中的count量,也就是1S内记录到的脉冲个数,所得到的就是外部脉冲的频率了。
完整的工程代码可以进群免费领取。
嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。点击下方链接,0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!
点击这里找小助理0元领取:扫码进群领资料
相关问答
单片机 12m如何产生40k 频率[回答]当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。...采用AT89C51或AT89S51单片...
单片机 常见故障及处理?一些单片机常见问题的解决办法工作和生活中会遇到许许多多的问题,可能让你一时陷于其中,但是总有解决的办法。随时记下遇到的问题,并做好总结,一方面有助于积...
数字万用表怎么用-设计本有问必答1、无源测频法(又可分为谐振法和电桥法),常用于频率粗测,精度在1%左右。2、有源比较法可分为拍频法和差频法,前者是利用两个信号线性叠加以产生拍...
高电平输出怎么转低电平输出?高电平输出转为低电平输出在硬件上实现起来比较简单,可以使用非门、三极管等元器件来实现。使用非门来实现的话需要考虑其驱动能力,比较常用的非门逻辑芯片为74...
单片机 中rel什么作用?-ZOL问答1.晶振的作用是选频,放到振荡电路中,选择特定的频率进行放大,简单点说,为单片机工作提供一个稳定的频率。相连的两个电容是匹配晶振用的,具体的取值根据晶振的...
ic2是什么芯片?IC2是红外接收芯片灵敏度高、增益高、输出波形好,并具有鉴频功能。红外接收管D2接收到40kHz频率的红外脉冲后,转换为电信号。IC2(MAⅩ442)是一个可转换输入口...
radiomastert12遥控器对 频 ?回答radiomastert12遥控器对频方法如下:1、学习码遥控器:常用发射芯片EV,HS,LX。SC(1527/2240),HCS101等。配对的接收为主机内带有程序的存贮IC,单片机...
高清数字解码器怎么用_住范儿家装官网视频解码器,是指一个能够对数字视频进行压缩或者解压缩的程序或者设备。专业级视频解码器IRD2600是一种可根据用户特殊应用而“量身定做的”MPEG-...
怎么使用电灯遥控?3,如果是多个灯不需要同时明、暗的话可以选择遥控分段开关。一种灯具遥控控制器,属控制技术领域,用于解决多套多灯灯具的控制问题。其技术方案是:它的接...
315M发射电路原理。这个电路是一个经典的315MHz无线发射模块电路?无线发射接收模块主要技术指标:1.通讯方式:调幅AM2.工作频率:315MHZ/433MHZ3.频率稳定度:±75KHZ4.发射功率:≤500mW5.静态电流:...当发射电压为3V时,空...