历史上的今天
今天是:2024年10月14日(星期一)
2021年10月14日 | 基于51单片机的数字频率机设计
2021-10-14 来源:eefocus
一.硬件方案
频率计由89S52单片机控制电路、信号处理电路、键盘电路以及测量数据的显示电路还有系统软件所构成的,在信号处理电路当中包含了待测信号放大、限幅、波形变换、波形整形以及分频电路。测量范围为0~100KHZ。
主要由51单片机+最小系统+分频模块+整形模块+lcd1602液晶显示+按键而成;如图:

二.设计功能
(1)频率的测量范围为1Hz—100kHz能测量各种周期信号,能测出正弦波、三角波或方波等波形的频率。
(2)通过LCD1602液晶显示屏显示检测到的即时频率数值(最多8位数,单位为Hz)。
(3)电路板上排针左边接信号输入,右边接地。
三.设计原理图
(1)原理图主要采用AD软件进行设计,如图:

(2)Protues仿真图如下:

四.软件设计
(1)程序流程图

(2)频率测量程序框图

(3)中断服务流程图

(4)主程序源码
//----------------主函数--------------------
void main()
{
unsigned char i;
LCD_init();
timer_init(); //定时/计数器初始化
for(i = 0;i<4;i++)
{
LCD_disp_char(i+0,1,character_1[i]);
}
while(1)
{
dis_num(); //显示
delay_1s();
}
}
//-------------------定时/计数器初始化--------------
void timer_init(void) //定时/计数器初始化
{
TMOD=0x66; //计数器0和计数器1工作工作方式2,自动重装初值
TH0=0; //计数器初值为0
TL0=0;
TR0=1; //计数器开始计数
ET0=1; //打开计数器0中断
TH1=0; //计数器初值为0
TL1=0;
TR1=1; //计数器开始计数
ET1=1; //打开计数器1中断
RCAP2H=(65536-62500)/256; //在程序初始化的时候给RCAP2L和RCAP2H赋值,
RCAP2L=(65536-62500)%256; //TH2和TL2将会在中断产生时自动使TH2=RCAP2H,TL2=RCAP2L。
TH2=RCAP2H; //12M晶振下每次中断62.5ms(1s=1000ms=62.5ms×16)
TL2=RCAP2L;
ET2=1; //打开定时器2中断
TR2=1; //定时器2开始计时
EA=1; //开总中断
}
//------------------中断函数----------------------
void timer2(void) interrupt 5 //定时器2中断(62.5ms)
{
time++;
TF2=0; //定时器2的中断标志位TF2不能够由硬件清零,所以要在中断服务程序中将其清零
if (time==16) //定时1s时间到
{
time=0; //计时清0
EA=0; //关中断
fre=(long)count1*256+TL1; //count*256强制转换成long型,否则将不产生进位~先判断分频后(计数器1)
FLAG = 0;
if(fre<2000)//如果不到200KHz则读取分频前(计数器0)频率(200K÷100=2000)
{
fre = (long)count*256+TL0;
FLAG = 1;
}
if(!FLAG)
{
fre = fre *100;//100分频
}
TL0=0; //清零计数器0计数
TH0=0;
TL1=0;
TH1=0;
count=0; //清零计数器0计数
count1=0;
EA=1; //开中断
}
}
史海拾趣
|
51制作的 红外、315M、433M等遥控编码波形分析板(全套资料) 秀一下我做的小工具,HOHO! 相当于数字脉冲示波器,并具波形分析功能(单片机通过USB与计算机通讯显示波形),也是USB通讯学习板。 主要用来实现以下功能: 1)可采集红外遥控 ...… 查看全部问答> |
|
我用的单片机是mc9s12dg128,现在在调最小系统,情况是: 1、板子上只焊了电源部分、复位电路部分、主芯片,电源部分正常。没有向单片机下载过程序,是新的芯片。 2、复位电路应该是在按键按下之前是高电平,但是实际上接通电源后发现复位电路输 ...… 查看全部问答> |
|
我使用2440+wince5与PC通过jrtplib通信,现在发现pc可以发送数据到网络,但是wince方面好像不行,抓包发现icmp:port unreachable, 是不是port被占用了呢?而且icmp、udp、tcp刚好是占用同一个字节(指定网络包协议),会不会是字节顺序问题?但 ...… 查看全部问答> |
|
求助高手 msp430 P1口中断的问题 弄了好长时间了,还是不行啊 帮忙看看一下程序有错吗? #include unsigned char i; void main() { WDTCTL=WDTPW+WDTHOLD; //关看门 &nb ...… 查看全部问答> |
|
在做一个项目,要求开机后能自动检测线路的通断状态,能够让主控设备知道。觉得这个只能检测电流,于是查了查霍尔传感器,但是每条线都得用一,线有十多根,传感器占的空间太大了。请问谁知道体积小的电流传感器IC?或者谁知道更好的检测方 ...… 查看全部问答> |
|
大家好!请教各位大虾: 我的linux内核2.6.32.60,编译安装AODV-UU-0.9.6后,使用命令aodvd -l -r 3时提示: host_init:Couldn\'t get index of \':No such device cleanup:CLEAN UP! Could not remov ...… 查看全部问答> |




