基于单片机的数字频率计的设计.docx
《基于单片机的数字频率计的设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的数字频率计的设计.docx(18页珍藏版)》请在冰豆网上搜索。
基于单片机的数字频率计的设计
目录
1频率计的概要和发展动态1
2单片机介绍1
2.1单片机的简介和发展1
2.2AT89C51的原理2
2.2.1主要特性3
2.2.2管脚说明3
2.2.3振荡器特性4
2.2.4芯片擦除4
3仿真软件protuse的介绍5
4系统模块设计6
5硬件部分6
5.1整形电路6
5.2控制电路7
5.3显示电路8
5.3.1LCD1602引脚8
5.3.2LCD1602的指令介绍8
5.4总体电路图9
6仿真结果11
6.1仿真结果11
6.2结果分析11
7结论11
8参考文献12
附录12
1keilC51软件介绍12
2程序流程图13
3系统源程序14
1频率计的概要和发展动态
在电子技术中,频率作为基本的参数之一,它与许多电参量的测量方案、测量结果密切相关,因此,频率的测量十分的重要。
在许多情况下,要对信号的频率进行精确测量,就要用到数字频率计。
数字频率计作为一种基础测量仪器,它被用来测量信号(方波、正弦波、锯齿波等)频率,并且用十进制显示测量结果。
它具有测量精度高、测量省时、使用方便等特点。
随着微电子技术和计算机技术的不断发展,单片机被广泛应用到大规模集成电路中,使得设计具有很高的性价比和可靠性。
所以,以单片机为核心的简易数字频率计设计,改善了传统的频率计的不足,充分体现了新一代数字频率计的优越性。
2单片机介绍
2.1单片机的简介和发展
单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。
单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。
通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:
中央处理器、存储器和I/O接口电路等。
因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。
单片机经过1、2、3、3代的发展,正朝着多功能、高性能、低电压、低功耗、低价格、大存储容量、强I/O功能及较好的结构兼容性方向发展。
其发展趋势不外乎以下几个方面:
1、多功能
单片机中尽可能地把所需要的存储器和I/O口都集成在一块芯片上,使得单片机可以实现更多的功能。
比如A/D、PWM、PCA(可编程计数器阵列)、WDT(监视定时器---看家狗)、高速I/O口及计数器的捕获/比较逻辑等。
有的单片机针对某一个应用领域,集成了相关的控制设备,以减少应用系统的芯片数量。
例如,有的芯片以51内核为核心,集成了USB控制器、SMARTCARD接口、MP3解码器、CAN或者I*I*C总线控制器等,LED、LCD或VFD显示驱动器也开始集成在8位单片机中。
2、高效率和高性能
为了提高执行速度和执行效率,单片机开始使用RISC、流水线和DSP的设计技术,使单片机的性能有了明显的提高,表现为:
单片机的时钟频率得到提高;同样频率的单片机运行效率也有了很大的提升;由于集成度的提高,单片机的寻址能力、片内ROM(FLASH)和RAM的容量都突破了以往的数量和限制。
由于系统资源和系统复杂程度的增加,开始使用高级语言(如C语言)来开发单片机的程序。
使用高级语言可以降低开发难度,缩短开发周期,增强软件的可读性和可移植性,便于改进和扩充功能。
3、低电压和低功耗
单片机的嵌入式应用决定了低电压和低功耗的特性十分重要。
由于CMOS等工艺的大量采用,很多单片机可以在更低的电压下工作(1.2V或0.9V),功耗已经降低到uA级。
这些特性使得单片机系统可以在更小电源的支持下工作更长的时间。
4、低价格
单片机应用面广,使用数量大,带来的直接好处就是成本的降低。
目前世界各大公司为了提高竞争力,在提高单片机性能的同时,十分注意降低其产品的价格。
在国内,单片机已普遍的应用电子系统的中,其中,以C语言为编程基础,结合单片机典型模块的设计已经开发出了许多应用系统,,如单片机的串口通信、定时/计数器、看门狗、中断、矩阵键盘输入、ADC、DAC、红外遥控接收、电动机控制、LED显示器等。
由于单片机的功能强、体积小、功耗低、价格便宜、工作可靠、使用方便等优点,使得基于单片机的数字频率计得到广泛的应用。
现在国际国内对这类设计的开发与研究具有实用性,借助软件程序控制实现,使得频率计的硬件结构简单,具有良好的性价比和可靠性。
同时,该设计又在不断地深入与发展,以适应更高进度的要求。
现在虽然单片机的品种繁多,各具特色,但仍以MCS-51为核心的单片机占主流,兼容其结构和指令系统的有PHILIPS公司的产品,ATMEL公司的产品和中国台湾的WinBond系列单片机。
以8031为核心的单片机占据了半壁江山,在一定的时期内,这种情形将得以延续,将不存在某个单片机一统天下的垄断局面,走的是依存互补,相辅相成、共同发展的道路。
2.2AT89C51的原理
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM-FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CM0S8处理器,俗称单片机。
该器件采用ATMEL高精度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
2.2.1主要特性
与MCS-51兼容;4K字节可编程闪烁存储器;寿命:
1000写∕擦循环;数据保留时间:
10年;全静态工作:
1HZ-24HZ;三级程序存储器锁定:
128*8位;内部RAM;32可编程I∕O线;两个16位定时器∕计数器。
5个中断源;可编程串行通道;低功耗的闲置和掉电模式;片内振荡器和时钟电路
2.2.2管脚说明
VCC:
电源电压5v
GND:
接地点
P0口:
p0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。
作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“I”可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组接口线分式转换地址(低8位)和数据总线复用,在访问期间激活上拉电阻。
。
在Flash编程时,P0口接指令字节,而在程序效验时,要求外接上拉电阻。
P1口:
P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动4个TTL逻辑门电路。
对端口写“I”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收、输出4个TTL门电流,当P2口被写成“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存储时,P2口输出地址高8位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3管脚是8个带内部上拉电阻的双向I/O口,P3可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
:
当/EA保持低电平时,则在此期间外部程序存储(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
2.2.3振荡器特性
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
2.2.4芯片擦除
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。
在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。
在闲置模式下,CPU停止工作。
但RAM,定时器,计数器,串口和中断系统仍在工作。
在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
AT89C51单片机的引脚图,如图1所示。
图1单片机引脚图
3仿真软件protuse的介绍
Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。
4系统模块设计
本设计用单片机STC80C51制作简易数字频率计,先将未知频率的波形通过整型电路,整形成矩形波,作为单片机的外部中断,单片机将每秒钟终端的次数(即待测波形的频率
)进行计数,计数值作为信号频率用显示器1602显示,可显示出测量的结果。
可测量正弦波﹑三角波﹑矩形波的频率。
设计的原理框图如图2所示。
图2总体设计框图
5硬件部分
频率计设计包括三个:
整形电路﹑控制电路﹑显示电路。
各模块如下:
5.1整形电路
单片机只能检测到下降沿或者高低电平的变化。
因此,要把未知波形整形成矩形波,可用电压比较器进行整形,运算放大器的同相端接模拟地,反相端接输入信号。
当波形的电压为正时,输出电压为负;当波形电压为负时,输出电压为正。
但是输出波形和输入波形的频率相等,故可以用整形出的波行就可以直接接到单片机的外部中断
,进行下一步操作。
这样不仅降低了系统对待测信号幅度的要求,而且整形电路可以把非方波信号转化成方波信号,满足测量的要求。
如图3
图3整形电路
5.2控制电路
单片机接上晶振和复位后构成AT89C51的最小系统,可以在此基础上外接其他的元件。
最小系统如图3所示。
图3单片机的最小系统
5.3显示电路
5.3.1LCD1602引脚
1602采用标准的16脚接口,其中:
第1脚:
VSS为地电源
第2脚:
VDD接5V正电源
第3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生"鬼影",使用时可以通过一个10K的电位器调整对比度
第4脚:
RS为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器.
第5脚:
为读写信号线,RW高电平时进行读操作,低电平时进行写操作.当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据.
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令.
第7~14脚:
D0~D7为8位双向数据线.
第15~16脚:
空脚
5.3.2LCD1602的指令介绍
1602液晶模块内部的控制器共有11条控制指令,它的读写操作、屏幕和光标操
作都是通过指令编程来实现的。
指令1:
清显示,指令码01H,光标复位到地址00H位置
指令2:
光标复位,光标返回到地址00H
指令3:
光标和显示模式设置I/D:
光标移动方向,高电平右移,低电平左移S:
屏幕上所有文字是否左移或者右移.高电平表示有效,低电平则无效
指令4:
显示开关控制.D:
控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:
控制光标的开与关,高电平表示有光标,低电平表示无光标B:
控制光标是否闪烁,高电平闪烁,低电平不闪烁
指令5:
光标或显示移位S/C:
高电平时移动显示的文字,低电平时移动光标
指令6:
功能设置命令DL:
高电平时为4位总线,低电平时为8位总线N:
低电平时为单行显示,高电平时双行显示F:
低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符
指令7:
字符发生器RAM地址设置
指令8:
DDRAM地址设置
指令9:
读忙信号和光标地址BF:
为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙.
指令10:
写数据
指令11:
读数据DM-162液晶显示模块可以和单片机显示电路连接
用LCD1602显示器做显示模块。
将LCD1602的数据口接到单片机的P0,控制线接到P2口。
连接好的线路,如图4
图4显示电路
5.4总体电路图
总体设计框图如图5
图5总体设计框图
6仿真结果
6.1仿真结果
接好电路后,用protuse软件仿真,当输入信号是1000K时,仿真结果是1001KHZ,如下6
图6仿真结果
6.2结果分析
仿真结果和理论结果有一定误差,但是误差在可接受的范围内。
分析导致误差的原因可能是:
用C语言编程时,程序占用一定的扫描时间,可能会造成误差;显示模块每秒钟显示一次,不能及时观测频率,造成误差;软件本身的缺陷,造成误差。
改进措施如下:
⑴增加分频电路,可以所测频率降低,测量结果更加精确;
⑵采用可变闸门时间,使得在测中低高频率是采用不同的时间尺度,提高精度;
⑶使用运算速度更快的微处理器;
⑷使用频率更高的晶振;
7结论
本控制系统设计充分利用了51单片机的引脚及其强大的功能,并配合相关的电路,实现率对水塔的自动控制。
其中,水塔水位的测量是通过自控的开关传感器将水位信号传送给单片机,并对其进行分析处理,然后根据控制要求数去控制信号,控制水泵工作,进而保持水塔有正常的水位。
该控制系统设计简单、操作方便、实用性强,有很高的推广价值。
通过这次毕业设计,是我具备了使用所学的专业知识与技能,进行实用控制电路的实际与制作的能力。
使我在电子电路设计方面向前买了一大步,为日后工作打下了良好基础。
最后感谢老师的悉心指导,耐心的解答,使得本次课设圆满结束。
8参考文献
[1]黄仁欣.单片机原理与应用技术第二版.北京:
清华大学出版社,2010
[2]赵嘉蔚.单片机原理与接口技术.北京:
清华大学出版社,2010
[3]李朝青.单片机原理与接口技术.北京:
北京航空航天大学出版社,2005
[4]童诗白,华成英.模拟电子基础技术.北京:
高等教育出版社,2001
[5]郑峰.51单片机应用系统典型模块开发大全.北京:
中国铁道出版社,2010
[6]贾好来.MCS-51单片机原理及应用.北京:
机械工业出版社,2007
[7]龚运新.单片机C语言开发技术.北京:
清华大学出版社,2006
[8]郭天祥.新概念51单片机C语言教程——入门、提高、开发、扩展.北京:
电子工业出版社,2009
附录
1keilC51软件介绍
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
用过汇编语言后再使用C来开发,体会更加深刻。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种Keil软件图标是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。
机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。
运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。
掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
2程序流程图
否
是
图4软件流程图
3系统源程序
#include"reg51.h"
#defineucharunsignedchar
#defineuintunsignedint
sbitlcd_rs=P2^5;
sbitlcd_rw=P2^6;
sbitlcd_en=P2^7;//读写使能端
sbitru=P3^5;
voidlcd_init();//lcd初始化
voiddelay(uint);
voidwrite_com(uchar);
voidwrite_date(uchar);//读写函数
voiddisplay();
ucharlang[]={"frequence:
"};
ucharddate[]={'0','1','2','3','4','5','6','7','8','9'};
longcount;
voidmain(void)
{
uintk;
ru=1;
TMOD=0X51;//定时器0为定时,
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=0;
TL1=0;
EA=1;
ET0=1;
TR0=1;
TR1=1;
lcd_init();
write_com(0x80+0x03);//写第一行
for(k=0;k<11;k++)
{write_date(lang[k]);
delay
(1);
}
write_com(0x80+0x44);
write_date('f');
write_com(0x80+0x45);
write_date('=');
write_com(0x80+0x4c);
write_date('H');
write_com(0x80+0x4d);
write_date('z');
for(;;);
}
voidtimer0()interrupt1
{
uinti;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
if(i==20)
{i=0;
TR1=0;
count=TH1*256+TL1;
TH1=0;TL1=0;
display();
count=0;
TR1=1;
}
}
voidlcd_init()//lcd的初始化
{
lcd_en=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
//write_com(0x0f);
}
voiddelay(uintx)//延时函数
{
uinti,j;
for(i=0;ifor(j=0;j<110;j++);
}
voidwrite_com(ucharcom)
{
lcd_rs=0;
lcd_rw=0;
P0=com;
delay(5);
lcd_en=1;
delay(5);
lcd_en=0;
}
voidwrite_date(ucharshuju)
{
lcd_rs=1;
lcd_rw=0;
P0=shuju;
delay(5);
lcd_en=1;
delay(5);
lcd_en=0;
}
voiddisplay()
{
write_com(0x80+0x46);
write_date(0x30+(count/100000));
write_com(0x80+0x