① 基于51单片机的数字频率计设计资料。要C语言的,谢谢。
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define NOP() _nop_()
sbit key1=P1^0;//key1 按此按键输出1000Hz
sbit key2=P1^1;//key2 按此按键输出100Hz
sbit key3=P1^2;//key3 按此按键输出1Hz 1Hz是采用纯粹软件延时
sbit square=P2^7;//方波输出引脚
sbit fenpin=P2^6;//分频后信号输出引脚
uchar TMRH,TMRL;//定时器T1初值寄存器
uchar square_delay;//延时产生方波标志
struct
{
uchar value;//当前键值
uchar backvalue;//上次键值
uchar done;//按键是否响应 1为已经响应
} key;
uchar KeyScan(void); //按键扫描 获取键值
void KeyProc(void);//按键处理
void KeyAction(void);//按键散转 转向需要执行的程序
void delay500ms(void);//500ms延时程序 用于产生1Hz方波
void timer0() interrupt 1 using 1 //12M晶振 20ms中断 用于按键扫描 T0中断
{
TH0=0xB1;
TL0=0xE0;
KeyProc(); //避免按键在纯粹软件延时的时候不响应
}
void timer1() interrupt 3 using 1 //T1中断
{
TH1=TMRH;
TL1=TMRL;
square=~square;
if(square==1)
EX1=1;
}
void EXT_INT1() interrupt 2 using 1 //外部INT1中断 低电平触发
{
EX1=0;
fenpin=~fenpin;
}
void main()
{
TMRH=0xFE;
TMRL=0x0C;
TCON=0x00;
EX1=1; //允许INT1中断
TMOD=0x11; //定时器T0,T1工作在方式1
TH0=0xB1;
TL0=0xE0;
TH1=TMRH;
TL1=TMRL;
ET0=1; //允许T0溢出中断
ET1=1; //允许T1溢出中断
TR0=1; //启动计数器T0
TR1=1; //启动计数器T1
EA = 1; //开中断
while(1)
{
if(square_delay)
{
delay500ms();
square=~square;
if(square==1)
EX1=1;
}
}
}
void KeyProc(void)
{
key.value=KeyScan();
if(key.value==key.backvalue)
{
if(!key.done)
{
KeyAction();
key.done=1;
}
}
else
{
key.backvalue=key.value;
key.done=0;
}
}
void KeyAction(void)
{
switch(key.value)
{
case 1:
{
ET1=0;
TR1=0;
TMRH=0xFE; //0.5ms初值
TMRL=0x0C;
TR1=1;
ET1=1;
square_delay=0;
}break;
case 2:
{
ET1=0;
TR1=0;
TMRH=0xEC;//5ms初值
TMRL=0x78;
TR1=1;
ET1=1;
square_delay=0;
}break;
case 3:
{
ET1=0;
TR1=0;
square_delay=1;
}break;
}
}
//获取键值
uchar KeyScan(void)
{
uchar keyval=0;
if (key1==0) keyval=1;
else if(key2==0) keyval=2;
else if(key3==0) keyval=3;
else keyval=0;
return keyval;
}
//500ms延时 晶振12M
void delay500ms(void)
{
unsigned char i,j,k;
for(i=15;i>0;i--)
for(j=202;j>0;j--)
for(k=81;k>0;k--);
}
② 各位老铁,小弟在论文进行答辩的时候碰到了点问题,论文题目是基于51单片机的数字频率计设计
1。单片机测量的是方波信号,如果是其它波形或幅度不合适,就进行放大和整形
2。.该信号进入单片机的哪个引脚,如果用定时器0作为计数器,输入引脚是P3.4
如果用定时器1作为计数器,输入引脚是P3.5 如果测单个脉冲宽度(或周期),可以输入任意引脚,但最好用中断引脚P3.2或P3.3
3。.信号进入引脚之后怎么计算它的程序
用另外一个定时器定时50ms,测50ms内有多少个脉冲输入,然后乘以20(即1S)即是频率
③ 51单片机制作简易数字频率计程序
这里有一个四位数码管的频率计,供参考
#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharan[10]={0xc0,0Xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //所需的段的位码
//ucharwei[4]={0XEf,0XDf,0XBf,0X7f};//位的控制端 (开发板)
ucharwei[4]={0X80,0X40,0X20,0X10};//位的控制端 (仿真)
uintz,x,c,v,date; //定义数据类型
uintdispcount=0;
uintlck=0;
uintdisp=0;
/******************************************************************
延时函数
******************************************************************/
voiddelay(uchart)
{
uchari,j;
for(i=0;i<t;i++)
{
for(j=13;j>0;j--);
{;
}
}
}
/**********************************************************************
数码管动态扫描
*********************************************************************/
voidxianshi()
{
/*****************数据转换*****************************/
z=date/1000; //求千位
x=date%1000/100; //求百位
c=date%100/10; //求十位
v=date%10; //求个位
P2=wei[0];
P0=an[z];
delay(50);
P2=wei[1];
P0=an[x];
delay(50);
P2=wei[2];
P0=an[c];
delay(50);
P2=wei[3];
P0=an[v];
delay(50);
}
/*************************************************************************
定时器初值1ms
**************************************************************************/
voidinitTimer(void)
{
TMOD=0x0;
TH0=0xe3;
TL0=0xc;
}
/*************************************************************************
定时器函数
**************************************************************************/
voidtimer0(void)interrupt1
{
TH0=0xe3;
TL0=0xc;
lck++;
if(lck==1000)
{
disp=dispcount;
lck=0;
dispcount=0;
}
}
/*************************************************************************
中断函数
**************************************************************************/
voidint0(void)interrupt0
{
dispcount++;//每一次中断,计数加一
}
/*************************************************************************
主函数
**************************************************************************/
voidmain(void)
{
IT0=1;//INT0下降沿中断
EX0=1;//允许INT1中断
initTimer();//装入初值
TR0=1;
ET0=1;
EA=1;
while(1)
{
date=disp;
xianshi();
}
}
④ 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单片机的数字频率计出了显示频率还可以添加哪些简易功能
既然是 频率相关的,已经有输入频率了,就加个输出频率嘛。
要做输出频率的话,就要考虑好频率输出范围,如果是单片机内置PWM模块,那PWM 的频率范围就是输出频率范围了。如果是采用定时器输出频率,那么输出频率范围就根据定时器的值计算了。再高级点,加个占空比,不仅频率可调,占空比也可调。
另外还要考虑下,输出频率值的确定。一般由用户使用键盘输入,你要高级点的,可以使用遥控输入。
⑥ 51单片机制作频率计,测周法如何测量(用T0和T1两个就可以了吗),求大虾帮忙啊,最好详细点
#include<REG51.H>
#defineU8unsignedchar
U8codetab[]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28};
U8codescn[]={0x7f,0xbf,0xdf,0xef};//先点亮左边一个数码管
U8buf[4]={0,0,0,0};//显示缓冲区
U8cnt=0;//扫描计数
unsignedintfreq=0;
unsignedintF;
voidmain(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);
}
voidexint0(void)interrupt0//外部中断0服务程序
{freq++;
}
voidtimeint(void)interrupt1//定时器0中断服务程序
{chari;
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;
}
}
⑦ 基于51单片机简单数字频率计设计 要求:信号为方波。正弦波,测量范围: 幅度:0.5v--5v 频率:1hz--1mhz
淘宝like科技
⑧ 我用C51单片机做简易数字频率计,测量脉宽2K以内是差不多的,但是超过2K就各种不对了,这是测量脉
你用的是什么单片机?主频是多少?看你的寄存器应该是51。
别忘了,51单片机的主频12MHz,为了抗干扰,还要12分频。
也就是说,你只有1MHz的运算频率。然后你得到你的w,还要做那么复杂的灶衡运算,本身while(p3_5==0)的判凳轮断也要时间。
还有,你的n1,n2是什么类型的呀。你用的是n1=w*65536我就觉得,它至少是个32位的整型变量。我的老天,51的内核只有8位,它要做许许多多额外的运算才能给你拼合出32位变量。
还有你调用函数的各种开销,一旦你的所有时间开销大于500个周期,你就会错过脉宽。
总之,还得看你的目标频率范围是多大吧。任何仪器都有一个频率上限,超过频率上限的就测不了了。如果在2K以内,你就忍了。超过2K,建议你换平台。
8位系统建议你换AVR或者PIC,首先,这两个是RISC结构,拿AVR来说,单周期指令,不需要12分频,16~20Mhz的主频也比51的高。最关键的还有硬件捕捉等功隐粗做能,测量脉宽之类的操作可以靠硬件实现,软件只需要简单处理就可以了。
系统要求再高,可以考虑CORTEX M0系列的32位单片机。主频最高到72MHz,本身累加器是32位的,像你这种32位乘法一个周期就可以完成。也有各种硬件帮你测量脉宽。
⑨ 基于51单片机数字频率计论文
1.绪论
1.1 数字频率计的发展现状及研究概况
随着电子技术的飞速发展,各类分立电子元件及其所构成的相关功能单元,已逐步被功能更强大、性能更稳定、使用更方便的集成芯片所取代。由集成芯片和一些外围电路构成的各种自动控制、自动测量、自动显示电路遍及各种电子产品和设备。数字系统和数字设备已广泛应用于各个领域,更新换代速度可谓日新月异。
在电子系统非常广泛的应用领域内,到处可见到处理离散信息的数字电路。供消费用的微波炉和电视、先进的工业控制系统、空间通讯系统、交通控制雷达系统、医院急救系统等在设计过程中无一不用到数字技术。数字电路制造工业的进步,使得系统设计人员能在更小的空间内实现更多的功能,从而提高系统可靠性和速度。
数字频率计是现代通信测量设备系统中不可缺少的测量仪器,不但要求电路产生频率准确的和稳定度高的信号,而且能方便的改变频率。
数字频率计主要实现方法有直接式、锁相式、直接数字式和混合式四种。
直接式的优点是速度快、相位噪声低,但结构复杂、杂散多,一般只应用在地面雷达中。
锁相式的优点是相位同步的自动控制,制作频率高,功耗低,容易实现系列化、小型化、模块化和工程化。
直接数字式的优点是电路稳定、精度高、容易实现系列化、小型化、模块化和工程化。
随着单片锁相式数字频率计的发展,锁相式和数字式容易实现系列化、小型化、模块化和工程化,性能也越来越好,已逐步成为两种最为典型,用处最为广泛的数字频率计。
1.2 本课题研究背景及主要研究意义
数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得更为重要。在数字电路中,频率计属于时序电路,它主要由具有记忆功能的触发器构成。在计算机及各种数字仪表中,都得到了广泛的应用。在CMOS电路系列产品中,频率计是用量最大、品种很多的产品。
本课题采用的是直接数字式的频率计,设计原理简单,是全硬件电路实现,电路稳定、精度高,大大的缩短了生产周期。
1.3 本课题主要研究内容
本课题采用数字电路来制作一个1HZ—1MHZ的数字频率计,并将所需得到的频率通过数码管显示出来。 数字频率计主要由四部分组成:时基电路、闸门电路、逻辑控制电路以及可控制的计数、译码、显示电路。原理框图如图1-1:
图1-1 原理框图
⑩ 我用51单片机做简易数字频率计,用单片机提供方波,一端接单片机GND,一端接P3.3。用LCD显示
你的程序停在while(1);这里了,也桐闷就是说只做了一次的慧老采样和显示,这种情况很容易产生数据不同步等等前轮升一些问题,也就是在输入端口里并没有数据,所以你的全是0的情况是正常的。
你现在应该把程序改成
while(1)
{
xianshi1();
xianshi2();
}
或者把显示放在中断里