本文主要是介绍基于51单片机的数字频率计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一.硬件方案
频率计由89S52单片机控制电路、信号处理电路、键盘电路以及测量数据的显示电路还有系统软件所构成的,在信号处理电路当中包含了待测信号放大、限幅、波形变换、波形整形以及分频电路。测量范围为0~100KHZ。电路主要由51单片机+最小系统+分频模块+整形模块+lcd1602液晶显示+按键而成;
二.设计功能
(1)频率的测量范围为1Hz—100kHz能测量各种周期信号,能测出正弦波、三角波或方波等波形的频率。
(2)通过LCD1602液晶显示屏显示检测到的即时频率数值(最多8位数,单位为Hz)。
(3)电路板上排针左边接信号输入,右边接地。
三.设计原理图
(1)原理图主要采用AD软件进行设计,如图:
(2)Protues仿真图如下:
四.软件设计
主程序源码
//----------------主函数--------------------
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; //计数器初值为0TL0=0;TR0=1; //计数器开始计数 ET0=1; //打开计数器0中断 TH1=0; //计数器初值为0TL1=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; //计时清0EA=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; //开中断 }
}
资料链接:https://pan.baidu.com/s/1-TDO6BrYh1mQrqsOU9MInQ?pwd=eqv7
这篇关于基于51单片机的数字频率计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!