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