简易数字频率计.doc

上传人:精*** 文档编号:876501 上传时间:2024-03-05 格式:DOC 页数:23 大小:272.76KB
下载 相关 举报
简易数字频率计.doc_第1页
第1页 / 共23页
简易数字频率计.doc_第2页
第2页 / 共23页
简易数字频率计.doc_第3页
第3页 / 共23页
简易数字频率计.doc_第4页
第4页 / 共23页
简易数字频率计.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

1、内容摘要本设计以AT98C52单片机为核心,利用单片机的计数器和定时器的功能对被测信号进行计数。编写相应的程序可以使单片机自动调节测量的量程,并把测出的频率数据送到显示电路显示。本设计的目的是通过在对单片机原理及应用的学习,以及查阅资料,培养自学与动手能力,把学到的知识应用到日常生活当中。在设计的过程中,不断的补充不知道的内容、巩固所学,和队友的分工合作、相互讨论,运用科学的分析问题的方法解决遇到的困难,掌握单片机系统一般的开发流程,学会对常见问题的处理方法,积累设计系统的经验,充分发挥教学与实践的结合。关键词:单片机;数字频率计;设计;目录引言3第 1 节 概述 3 1.1数字频率计概述 3

2、 1.2基本设计原理3 1.3系统主要功能3第 2 节方案论证.42.1 总体方案. 4 2.2 测频方案选择. 4第 3 节 数字频率计的硬件结构设计53.1单片机最小系统设计53.2 分频电路设计63.3 数据显示与按键电路设计7第 4 节 软件设计94.1程序功能描述与设计思路94.2程序流程图.9.第 5 节 结束语.12.参考文献.12引言:在工业生产、仪器仪表行业及实验教学中,经常会遇到频率的测量,我们经常使用的及目前市场上所售的频率测量装置,大多数是采用小规模集成电路及分离元件组成。在现代电子学的各个领域,要求频率计精度高且能够直接读出频率值。频率计由89S52单片机控制电路、分

3、频电路、键盘电路以及测量数据的显示电路还有系统软件所构成的,分频电路用于扩展的单片机的频率测量范围以及提高测量精度,并且通过实现单片机频率测量以及周期测量使用统一的一个输入的信号。系统的软件包括有测量初始化的模块、显示的模块以及信号频率测量的模块等等。第1节 概述1.1数字频率计概述数字频率计是采用数字电路制成的实现对周期性变化信号的频率的测量。数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。它是一种用十进制数字,显示被测信号频率的数字测量仪器。它的基本功能是测量正弦信号,方波信号以及其他各种单位时间内变化的物理量。在进行模拟、数字电路的设计、安装、调试过程中,由于其使

4、用十进制数显示,测量迅速,精度高,显示直观,所以经常要用到数字频率计。频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。通常情况下计算每秒内待测信号的脉冲个数,此时我们称闸门时间为1秒。闸门时间也可以大于或小于一秒。闸门时间越长,得到的频率值就越准确,但闸门时间越长则没测一次频率的间隔就越长。闸门时间越短,测的频率值刷新就越快,但测得的频率精度就受影响。本文数字频率计是用数字显示被测信号频率的仪器,被测信号可以是正弦波,方波,闸门时间为1秒。 本次设计的数字频率计由三部分组成:,单片机、分频电路、显示电路。1.2基本设计原理运用单片机TO,T1计数功能来完成对输

5、入信号的计数。其T1为 计数器,T0为计时器。 为T1装入初值,定时50ms,重复20次即为1s,计时一秒时将计时器T0里的数值取出,即为该频率信号的频率。1.3系统主要功能利用单片机的T0,T1计数定时器功能,来完成对输入信号进行率计数,通过按键选择测量输入信号的频率、周期、脉冲宽度、占空比,结果通过LCD1602显示出来,能对0到7MHZ的信号频率进行准确计数。第 2 节方案论证2.1 总体方案本次设计包含硬件设计与软件设计两部分,根据设计任务要求,采用AT89C52单片机,配置时钟电路,复位电路构成单片机最小系统,配置分频电路,键盘电路,LCD显示,从而构成设计要求的单片机应用测频系统,

6、其结构框图如下图2-1所示:LCD显示电路 键盘电路时钟电路复位电路分频电路 单片机 图2-1结构框图2.2 测频方案选择方案一:直接测频法。直接测频法是把被测频率信号经脉冲形成电路后加到闸门的一个输入端, 只有在闸门开通时间T ( 以秒计) 内, 被计数的脉冲被送到十进制计数器进行计数。设计数器的值为N , 由频率定义式可以计算得到被测信号频率为: f = N / T 。 方案二:高精度恒误差测频法。通过对传统测量方法的研究, 结合高精度恒误差测量原理, 设计一种测量精度与被测频率无关的硬件测频电路。本方法立足于快速的宽位数高精度浮点数字运算。方案三:倍频法。直接测频法在高频段有着很高的精度

7、。可以把频率测量范围分成多个频段, 使用倍频技术, 根据频段设置倍频系数将经整形的低频信号进行倍频后再进行测量, 高频段则进行直接测量。从编程难易及单片机资源利用情况和测量误差角度考虑,选择方案一,尽管在测量低频段时的相对测量误差较大。但是可以通过增大 T 来提高测量精度。第 3 节 数字频率计的硬件结构设计3.1单片机最小系统设计单片机AT89C52主要完成以下功能: 驱动分频电路。利用定时器计数器对周期信号进行测量。转换测量量程。 驱动1602液晶显示。电路如图3-1所示。图3-13.2.频率产生电路的驱动电路74HC161与74ls161功能兼容,是常用的四位二进制可预置的同步加法计数器

8、,他可以灵活的运用在各种数字电路,以及单片机系统中实现分频器等很多重要的功能. 其管脚图如图3-2所示: 图3-2 74LS161 图3-3 74LS153管脚图 74HC153是一个双4选1数据选择器,其管脚图如图3-3所示: 74LS161对整形后的方波信号进行分频,Q0为二分频输出,Q1为四分频输出,Q2为八四分频输出,Q3为16分频输出。未经分频、经过16分频的二路信号作为74LS153的一个4选1数据选择器低二位输入,由单片机控制选择分频数,然后再送单片机内部计数器T1(如图3-4). 图3-43.3 数据显示与按键电路设计1602液晶简介:LCD1602分为带背光和不带背光两种,基

9、控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如图6所示。图6 LCD1602规格引脚功能LCD1602采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表一所示。表一 LCD1602引脚说明编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极指令说明LCD1602液晶模块内部的控制器共有11条控制指令,如表二 所示。表二 L

10、CD1602内部控制器9序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容第 4 节 软件设计4.1程序功能描述与设计思路程序功能描述 首先由键盘控制选择测量频率和周期、脉冲

11、宽度和占空比,按键按下测量脉冲宽度,否则测量周期和 频 率。测量频率与周期时待测信号由P3.5口输入,T0定时,T1计数,当频率大于400KHZ时进行分频;测量脉冲宽度时待测信号由P3.3口输入,T1进行计数。LCD1602显示采用扫描法,测量范围由程序控制。4.2程序流程图 1.主程序流程图设计如图4-1 开始LCD初始化AT98C52初始化Y设置键按下? 脉冲宽度测量 N 频率周期测量量程自动转换 LCD显示结束图-主程序流程图2 .LCD显示程序设计流程如图4-2 开始初始化LCD 设置输入模式22 设置显示模式内部等待函数,等待有无信号NY LCD显示 图4-2显示程序流程图3按键流程

12、图,图4-3。 开始N是否有键按下?Y 延时去抖N是否有键按下?Y扫描取得键值按键是否释放?NY结束按键流程图,图4-3第 5 节 结束语系统本设计以STC单片机AT98C52单片机为控制核心,运用定时器计数器,按键来完成,通过测试结果准确。在整个课程设计的过程中每一步都是我们团队亲自完成,遇到的问题也非常多,在经过遇到问题,思索问题到解决问题的过程中,收获是最多的。以往没有注意到的问题,都在这一次的课程设计中得以体现,在这次的课程设计中我们学到很多的东西,以往不注意的细节,在这一次得到注意。对实际经验的不足在设计过程中出现了不少的问题,得到了老师的耐心指导,在此表示感谢。参考文献1 张毅刚.

13、单片机原理及应用 第二版 高等教育出版社 2010:56-572 黄惠媛.单片机原理与接口技术 M.海洋出版社 沈德金,陈粤初,1990:38-403 阎 石.数字电子技术基础 第五版M.北京:高等教育出版社,2006.5:46-454 童诗白.模拟电子技术基础 第四版M.北京:高等教育出版社,2006.5:36-385 谭浩强.C语言程序设计(第二版)M.北京:清华大学出版社,2000:89-91附录:程序清单:#include #define uchar unsigned char#define uint unsigned int#define ulint unsigned long in

14、tsbit lcden=P12; sbit lcdrw=P11;sbit lcdrs=P10;sbit key=P32;sbit key1=P33;sbit b153=P17;sbit a153=P16;char buff=0,1,2,3,4,5,6,7,8,9,K,M,H,z,s,u,m,., ,F,P;uchar date=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,;void lcdwrite(uchar style,uchar dat);void lcdinit();void delay(uint count);void display(uchar *lp)

15、;void fenshu(ulint aa,uchar q);void print(unsigned char *str);void select();void maichong();void cepin();void C52_Initial();ulint f,p,sj,js,mc,zk;uchar m,n,fenpin,flag,a1,a2,tem1;void main() flag=0; f=0; p=0; C52_Initial(); lcdinit(); while(1) select(); if(flag=0) if(f400000) a153=1; b153=0; fenpin=

16、16; else a153=0; b153=0; fenpin=1; if(f7000000) lcdwrite(0,0x01); lcdwrite(0,0x80); lcdwrite(1,e); delay(30); lcdwrite(1,r); delay(30); lcdwrite(1,r); delay(30); lcdwrite(1,o); delay(30); lcdwrite(1,r); delay(30); if(f0) i-; count-; /*void fenshu(ulint aa,uchar q) if(aa100000) date1=aa/1000000; aa=a

17、a%1000000; date2=17;date3=aa/100000; aa=aa%100000;date4=aa/10000;aa=aa%10000;date5=aa/1000;if(q=0)date0=19; date6=11; date7=12;date8=13; else date0=20; date6=14; date7=18;date8=18; else if(aa1000) date1=aa/10000; aa=aa%10000; date2=aa/1000; aa=aa%1000; date3=17; date4=aa/100; aa=aa%100; date5=aa/10;

18、 if(q=0) date0=19; date6=10;date7=12;date8=13; else date0=20; date6=16; date7=14;date8=18; else aa=aa*100; date1=aa/10000; aa=aa%10000; date2=aa/1000; aa=aa%1000;date3=aa/100;date4=17;aa=aa%100;date5=aa/10;date6=aa%10; if(q=0)date0=19; date7=12; date8=13; else date0=20;date7=15; date8=14; /*void dis

19、play(uchar *lp)uchar num; P2=0; for(num=0;num9;num+) lcdwrite(1,bufflpnum); delay(10); if(num=9) break; P2=0; /* void select() P0=0xfe;tem1=P0;tem1=tem1&0xf0;while(tem1!=0xf0)delay(5);tem1=tem1&0xf0; while(tem1!=0xf0)tem1=P0;switch(tem1) case 0xee:flag=flag;break; while(tem1!=0xf0) tem1=P0; tem1=tem

20、1&0xf0; /*/void maichong() TMOD=0x90;TH1=0;TL1=0;while(key1!=0);TR1=1;while(key1!=1);while(key1!=0);TR1=0;mc=TH1*256+TL1;zk=mc*100/p;lcdwrite(0,0x80); fenshu(mc,2);display(date);lcdwrite(0,0x80+0x40);lcdwrite(1,z);lcdwrite(1,k);lcdwrite(1,b);lcdwrite(1,:);a1=zk/10;lcdwrite(1,buffa1);delay(30);a2=zk%10;lcdwrite(1,buffa2);delay(30);lcdwrite(1,%);lcdwrite(1, );lcdwrite(1, );lcdwrite(0,0x80);

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 学术论文 > 毕业设计

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922