⑴ 用51单片机做的简易频率计为什么在高频段数码管就开始闪了
在使用51单片机实现简易频率计的过程中,如果在高频段数码管开始闪烁,这通常意味着程序中的时间管理出现了问题。具体来说,在中断处理函数void t1(void) interrupt 3中,当计时达到1秒后,进行取模运算的时间消耗较大,导致无法及时调用display();函数,从而产生闪烁现象。
为了解决这个问题,可以考虑优化程序的效率。例如,可以减少取模运算的频率,或者使用更高效的时间管理方法。一种可能的改进方案是在中断处理中只更新必要的数据,而在主循环中调用display();函数。这样可以确保每次调用display();时,数码管能够准确地显示最新的频率信息。
另一种解决方案是采用定时器中断来精确控制显示更新的时间间隔。通过调整定时器的配置,可以确保在固定的时间间隔内执行display();函数,从而避免闪烁问题。具体实现时,可以设置一个较小的定时器中断周期,例如10毫秒或20毫秒,这样可以在保证显示刷新频率的同时,减少时间消耗。
此外,还可以考虑使用硬件辅助来提高系统的响应速度。例如,利用外部计数器来记录事件发生次数,这样可以减轻单片机的负担,提高处理效率。同时,也可以优化数码管的驱动电路,确保其在高频段也能稳定工作。
总之,解决高频段数码管闪烁的问题需要从程序优化和硬件设计两个方面入手。通过合理调整中断处理逻辑和使用高效的时间管理方法,可以有效避免闪烁现象,提升系统的稳定性和性能。
⑵ 设计一个以单片机为核心的频率测量装置。求大神给写一下程序。
单片机频率计仿真。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit p0=P1^0;
bit tb0,tb1;
uchar tt0,tt1,tt2,tt3;
uchar code led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void main()
{
TMOD=0x11;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1;
ET0=1; //开定时器0中断
ET1=1; //开定时器1中断
TR0=1; //启动定时器0
TR1=1; //启动定时器1
while(1)
{
if(TR1==0)
{
// tt3=65536*tt2+266*TH1+TL1
TH1=0x00;TL1=0x00;
tt1=0x00;tt2=0x00;
tb1=1;
led[0]=tt3/1000000;
led[1]=tt3/100000%10;
led[2]=tt3/100000%10;
led[3]=tt3/10000%10;
led[4]=tt3/1000%10;
led[5]=tt3/100%10;
led[6]=tt3/10%10;
led[7]=tt3%10;
}
if(tt0==1 && tb0=1)
{
tb0=1;P0==0xff;
P2=led[0];P0=0xfe
}
if(tt0==2 && tb0=1)
{
tb0=1;P0==0xff;
P2=led[1];P0=0xfd
}
if(tt0==3 && tb0=1)
{
tb0=1;P0==0xff;
P2=led[2];P0=0xfb
}
if(tt0==4 && tb0=1)
{
tb0=1;P0==0xff;
P2=led[3];P0=0xf7
}
if(tt0==5 && tb0=1)
{
tb0=1;P0==0xff;
P2=led[4];P0=0xef
}
if(tt0==6 && tb0=1)
{
tb0=1;P0==0xff;
P2=led[5];P0=0xdf
}
if(tt0==7 && tb0=1)
{
tb0=1;P0==0xff;
P2=led[6];P0=0xbf
}
if(tt0==8 && tb0=1)
{
tb0=1;P0==0xff;
P2=led[7];P0=0x7f
tt0=0;
}
}
}
void timer0() interrupt 1
{
TH0=(65535-2000)/256;
TL0=(65535-2000)%256;
tt1++;
if(tt1==500)
{
TR1=0; //启动定时器1
tb1=0
}
tt0++;tb0=1;
if(tb1==1 && TR1==0)TR1=1;
}
void timer1() interrupt 3
{
tt2++;
}
⑶ 做用51单片机做一个频率计,测量范围为0.1Hz~10kHz
在不改变定时时间的前提下,也就是0.5秒定时,是不能实现0.1~2Hz频率的测量的。
你所谓2Hz~10KHz易实现也是基于这个道理。但这个也是理论情况。
当你0.5s内刚好检测到一个脉冲,你认为这个时候是2Hz而不是2.5hz或者3.9hz?
这中间存在一个测量精度的问题。实际上你所测到的信号是在2hz到4hz之间。
实际上我们在测量信号的时候,低频一般会采用测周期,高频用测频才能提高测量的准确性。
至于高低频的临界点,跟你的计数频率有关,感兴趣的话可以去看《电子测量原理》。
下面我来讲下测周实现的方法,可以使用边沿触发的D触发器输出作为单片机的外部定时控制,测量信号作为触发时钟,计数值作为该信号的周期。
⑷ 51单片机的数字频率计
本应用系统设计的目的是通过在“单片机原理及应用”课堂上学习的知识,以及查阅资料,培养一种自学的能力。并且引导一种创新的思维,把学到的知识应用到日常生活当中。在设计的过程中,不断的学习,思考和同学间的相互讨论,运用科学的分析问题的方法解决遇到的困难,掌握单片机系统一般的开发流程,学会对常见问题的处理方法,积累设计系统的经验,充分发挥教学与实践的结合。全能提高个人系统开发的综合能力,开拓了思维,为今后能在相应工作岗位上的工作打下了坚实的基础。
1.1数字频率计概述
数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。它是一种用十进制数字显示被测信号频率的数字测量仪器。它的基本功能是测量正弦信号,方波信号及其他各种单位时间内变化的物理量。在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精确度高,显示直观,经常要用到频率计。
本数字频率计将采用定时、计数的方法测量频率,采用一个1602A LCD显示器动态显示6位数。测量范围从1Hz—10kHz的正弦波、方波、三角波,时基宽度为1us,10us,100us,1ms。用单片机实现自动测量功能。
基本设计原理是直接用十进制数字显示被测信号频率的一种测量装置。它以测量周期的方法对正弦波、方波、三角波的频率进行自动的测量。
点击重新加载
1.2频率测量仪的设计思路与频率的计算
图1 频率测量原理图
频率测量仪的设计思路主要是:对信号分频,测量一个或几个被测量信号周期中已知标准频率信号的周期个数,进而测量出该信号频率的大小,其原理如右图1所示。
若被测量信号的周期为,分频数m1,分频后信号的周期为T,则:T=m1Tx 。由图可知: T=NTo
(注:To为标准信号的周期,所以T为分频后信号的周期,则可以算出被测量信号的频率f。)
由于单片机系统的标准频率比较稳定,而是系统标准信号频率的误差,通常情况下很小;而系统的量化误差小于1,所以由式T=NTo可知,频率测量的误差主要取决于N值的大小,N值越大,误差越小,测量的精度越高。
1.3 基本设计原理
基本设计原理是直接用十进制数字显示被测信号频率的一种测量装置。它以测量周期的方法对正弦波、方波、三角波的频率进行自动的测量。
所谓“频率”,就是周期性信号在单位时间(1s)内
⑸ 求51单片机设计数字频率计,附带Proteus仿真和程序
刚刚下了一楼传的附件,测试后发现精度和测量范围都比较差。如果单从测频的角度来说,51的频率计是很简单的。恰好几年前我写过类似的程序,是用来测频率和占空比的。
理论上单用C52这单片机测频率最高为:12M/12/2=500KHZ。我写的这个程序可以同时测频率和脉宽,仿真下大概可以测到350KHZ;测脉宽好像10KHZ左右,再高的话脉宽的精度就会下降。测频精度在100KHZ以内,基本是2HZ;200K是5HZ;350KHZ以内是10HZ;最低测量频率1HZ。
仿真比较慢,数据要3秒后才会稳定,有兴趣的话自测吧。
50KHZ测量