收藏 分享(赏)

基于单片机的简易频率计设计.doc

上传人:精品资料 文档编号:10696514 上传时间:2019-12-29 格式:DOC 页数:16 大小:210KB
下载 相关 举报
基于单片机的简易频率计设计.doc_第1页
第1页 / 共16页
基于单片机的简易频率计设计.doc_第2页
第2页 / 共16页
基于单片机的简易频率计设计.doc_第3页
第3页 / 共16页
基于单片机的简易频率计设计.doc_第4页
第4页 / 共16页
基于单片机的简易频率计设计.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、基于单片机的简易频率计设计一、课题任务本设计是基于 AT89S51 单片机设计的简易频率计。技术指标:频率( F)为:1Hz100MHz,周期( T)为:1S 10E-7S,精度为: 10%。二、方案比较与选择1、方案比较方案一:本方案主要以数字器件为核心,主要分为时基电路,逻辑控制电路,放大整形电路,闸门电路,计数电路,锁存电路,译码显示电路七大部分。其原理框图如图 1 所示逻辑控制电路译码显示器锁存器闸门电路计数器时基电路放大整形电路图 1.方案一原理框图方案二:本方案主要以单片机为核心,利用单片机的计数定时功能来实现频率的计数并且利用单片机的动态扫描把测出的数据送到数字显示电路显示。其原

2、理框图如 2 所示2信号放大电路信号整形 单片机AT89S51 电路数字显示电路图 2. 方案二原理图2、方案论证方案一:本方案使用大量的数字器件,被测量信号经过放大整形电路变成计数器所要求的脉冲信号,其频率与被测信号的频率相同。同时时基电路提供标准时间基准信号,其高电平持续时间 1s,当 1s 信号来到时,闸门开通,被测脉冲信号通过闸门,计数器开始计数,直到 1s 信号结束闸门关闭,停止计数。若在闸门时间 1s 内计数器计得的脉冲个数为 N,则被测信号频率 F(X )=N Hz。逻辑控制电路的作用有两个:一是产生锁存脉冲,使显示器上的数字稳定;二是产生清零脉冲,使计数器每次测量从零开始计数。

3、方案二:本方案主要以单片机为核心,被测信号先进入信号放大电路进行放大,再被送到波形整形电路整形,把被测正弦波或者三角波转换为方波,利用单片机的计数器和定时器的功能对被测信号进行计数。编写相应的程序可以使单片机自动调节测量的量程,并把测出的频率数据送到显示电路显示。3、方案选择比较以上两种方案可以知道,方案二的核心是单片机,使用的元器件少,原理电路简单,调试简单只要改变程序的设定值则可以实现不同频率范围的测量,能自动选择测试的量程。与方案二相比较方案一则使用了大量的数字元器件,原理电路复杂,硬件调试麻烦。如要测量高频的信号还需要加上分频电路,价格相对高。鉴于我们是第一次做与单片机有关的电子设计作

4、品,为了减少一定的难度以及为今后更好的实现频率计的精细化和准确化,经过小组讨论,我们决定从基础的频率计出发。该频率计是利用单片机内部的定时/计数器完成待测信号周期/频率的测量,测量范围相比与要求较窄,但具有一定的代表性和基3础性。三、系统设计原理本频率计的设计以 AT89S51 单片机为核心,利用它内部的定时 /计数器完成待测信号周期/频率的测量,单片机 AT89S51 内部具有 2 个 16 位定时/计数器,定时/计数器的工作可以由编程来实现定时,计数和产生计数溢出时中断要求的功能。在定时器工作方式下,在被测时间间隔内,每来一个机器周期,计数器自动加 1,这样以机器周期为基准可以用来测量时间

5、间隔。在计数器工作方式下,加至外部引脚的待测信号发生从 1 到 0 的跳变计数器加 1,这样在计数闸门的控制下可以用来测量待测信号的频率。外部输入在每个机器周期被采用一次,这样查测一次从 1 到 0 的跳变至少需要 2 个机器周期,所以最大计数速率为时钟频率 1/24。定时/计数器的工作有运行控制位 TR 控制,当 TR 置 1,定时/计数器开始计数;当 TR 清 0 ,停止计数。 当待测信号的频率100HZ 时,定时/计数器构成为计数器,以机器周期为基准,由软件产生计数闸门,计数闸门宽度1S 时,即可满足频率测量结果为 3 位有效数字。四、单片机简述1. AT89S51 概述该 AT89S5

6、1 是一个低功耗,高性能 CMOS8 位微控制器,可在 4K 字节的系统内编程的闪存存储器。该设备是采用 Atmel 的高密度非易失性存储器技术和符合工业标准的 80C51 指令集合引脚。芯片上的 Flash 程序存储器重新编程的系统或常规非易失性内存编程。通过结合通用 8 位中央处理器的系统内课编程闪存的单芯片,AT89S51 是一个功能强大的微控制器,它提供了高度灵活的和具有成本效益的解决办法,可在许多嵌入式控制中应用。在 AT89S51 提供以下标准功能:4K 字节的 Flash 闪存,128 字节的RAM,32 个 I/O 线,看门狗定时器,两个数据指针,两个 16 位定时器/计数器,

7、5 向量两级中断结构,全双工串行端口,片上振荡器和时钟电路。此外,AT89S51 设计的静态逻辑操作到零频率和支持两种软件可选电模式。空闲模式停止的 CPU,同时允许 RAM,定时器/计数器,串行接口和中断4系统继续运作。在掉电模式保存 RAM 内容,可停止振荡器,停止所有其他芯片的功能,直到下一个外部中断或硬件复位。2.引脚功能说明 VCC:电源电压GND:接地点P0 口:P0 口是一组 8 位漏极开路型双向 I/O 口,也即地址/数据总线复用口。作为输出口用时,每位能驱动 8 个 TTL 逻辑门电路,对端口写“1”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地

8、址(低 8 位)和数据总线复用,在访问期间激活内部上拉电阻。在 Flash 编程时,P0 口接指令字节,而在程序效验时,要求外接上拉电阻。P1 口:P1 是一个带内部上拉电阻的 8 位双向 I/O 口,P1 的输出缓冲级可驱动 4 个 TTL 逻辑门电路。对端口写 “1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。53 .AT89S51 原理图 如图 3图 3 AT89S51 原理图5、电路设计1、 显示电路我们测量的频率最终要显示出来,

9、八段LED 数码管显示器由8 个发光二极管组成。基中7个长条形的发光管排列成“日”字形,另一个圆点形的发光管在数码管显示器的右下角作为显示小数点用,它能显示各种数字及部份英文字母。LED 数码管显示器有两种形式:一种是8个发光二极管的阳极都连在一起的,称之为共阳极LED 数码管显示器;另一种是 8 个发光二极管的阴极都连在一起的,称之为共阴极LED 数码管显示器。共阴和共阳结构的LED 数码管显示器各笔划段名和安排位置是相同的。当二极管导通时,对应的笔划段发亮,由发亮的笔划段组合而显示的各种字符。8个笔划段 h g f e d c b a 对应于一个字节(8 位)的D7、D6、D5、D4、D3

10、、D2、D1、D0,于是用8位二进制码就能表示欲显示字符的字形代码。图 4 四位一体数码管我们使用的是 SM420564-32 系列的共阴四位一体数码显示管。4 位一体数码管,6其内部段已连接好,引脚如图所示(正面朝自己,小数点在下方) ,a、b、c、d、e、f、g、dp 为段引脚,1、2、3、4 分别表示四个数码管的位。 。 。 。 。 。1 a f 2 3 b。 。 。 。 。 。e d dp c g 4 在单片机应用系统中,数码管显示器显示常用两种办法:静态显示和动态扫描显示。所谓静态显示,就是每一个数码管显示器都要占用单独的具有锁存功能的I/O 接口用于笔划段字形代码。这样单片机只要把

11、要显示的字形代码发送到接口电路,直到要显示新的数据时,再发送新的字形码。因此,使用这种办法单片机中CPU的开销小,能供给单独锁存的I/O 接口电路很多。在单片机系统中动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一,其接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O 线控制。CPU 向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是那个显示器亮,则取决于COM 端,而这一端是由I/O 控制的,所以我们就能自行决定何时显示哪一位了。而所谓动态扫描就是指我们采用分时的办法,轮流控制各个显示器的COM 端,使各个显示器轮流

12、点亮。在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。如图原理图5图5 显示电路原理图72、单片机电路图 6 单片机电路其中含有晶振、复位电路、138 译码输出电路6、程序设计#include#define unchar unsigned charvoid init_timer();/定时器初始化函数void delay();/基础延时函数void mult_delay(unchar time);/基础延时函数整数倍延时vo

13、id convert_LED();/LED 结果转换函数void LED_number_add(unsigned int add);/加法函数void LED_display();/void LCM_display();unchar count = 0;unsigned int temp_add = 0;/加数 add 的临时赋值unchar point = 7;/定义小数点所在的位unchar LED_number3,LED_number2,LED_number1,LED_number0;/显示在 LED 上的真实数字unchar LEDBUF=0x00,0x00,0x00,0x00,0x0

14、0,0x00,0x00,0x00;/LED 数据显示缓冲区unchar led_point = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x08;/定义带小数点的代码段unchar leddata=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x08;/定义不带小数点的代码/*主函数*/void main()8init_timer();/定时器配置LED_number0 = 0;LED_number1= 0;LED_number2= 0;LED_number3

15、= 0;while(1)convert_LED();/将频率值转换成显示在 8 段数码管上的数据LED_display();/将前面转换出来的数字显示在 LED 上/*LED 显示函数*/void LED_display()unchar index = 0;unchar NOT_zero;NOT_zero = 0;for(index=0;index=100)LED_number1 += LED_number0/100;LED_number0 -= (LED_number0/100)*100;if(LED_number1=100)LED_number2 += LED_number1/100;LE

16、D_number1 -= (LED_number1/100)*100;if(LED_number2=100)LED_number3 += LED_number2/100;LED_number2 -= (LED_number2/100)*100;if(LED_number3=100)LEDBUF0 = 11;LEDBUF1 = 11;LEDBUF2 = 11;LEDBUF3 = 11;LEDBUF4 = 11;LEDBUF5 = 11;LEDBUF6 = 11;LEDBUF7 = 11;while(1)LED_display();LEDBUF7 = LED_number0%10;LEDBUF6

17、= LED_number0/10;LEDBUF5 = LED_number1%10;10LEDBUF4 = LED_number1/10;LEDBUF3 = LED_number2%10;LEDBUF2 = LED_number2/10;LEDBUF1 = LED_number3%10;LEDBUF0 = LED_number3/10;/*加法函数*/void LED_number_add(unsigned int add)unchar addH,addL;addH = add/100;addL = add%100;LED_number0 += addL;LED_number1 += addH

18、;/*定时器初始化函数 */void init_timer()EA = 1; /开总中断ET0 = 1; /允许定时器 0 中断TMOD = 0x51; /定时器工作方式选择TL0 = 0x00;TH0 = 0x4c; /定时器赋予初值/*-*/TL1 = 0x00;TH1 = 0x00; /计数器赋予初值/*-*/TR0 = 1; /启动定时器TR1 = 1;/*定时器中断服务函数 */void timer0() interrupt 1 /50ms 中断函数unchar temp_TL1 = 0;unchar temp_TH1 = 0;unsigned long temp_number =

19、0;TH0=0x4c; /50ms 初值 晶振 11.0592TL0=0x00;count+;if(count=20)11count=0;temp_TL1 = TL1;temp_TH1 = TH1;TL1 = 0x00;TH1 = 0x00;LED_number0 = 0x00;LED_number1 = 0x00;LED_number2 = 0x00;LED_number3 = 0x00;temp_number = temp_TH1*256+temp_TL1;LED_number3 = temp_number/1000000;LED_number2 = (temp_number%100000

20、0)/10000;LED_number1 = (temp_number%10000)/100;LED_number0 = (temp_number%100);7、测试方案我们进行了 proteus 仿真,再进行实物焊接之前确保方案的合理及可运行。Proteus 软件是英国 Labcenter Electronics 公司出版的 EDA 工具软件。它不仅具有其它 EDA 工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。其具有以下优点:1Proteus 可提供的仿真元器件资源:仿真数字和模拟、交流和直流等数千种元器件,有 30 多个元件库。 2Proteus

21、 可提供的仿真仪表资源:示波器、逻辑分析仪、虚拟终端、SPI调试器、I2C 调试器、信号发生器、模式发生器、交直流电压表、交直流电流表。理论上同一种仪器可以在一个电路中随意的调用。 3除了现实存在的仪器外,Proteus 还提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似,但功能更多。这些虚拟仪器仪表具有理想的参数指标,例如极高的输入阻抗、极低的输出阻抗。这些都尽可能减少了仪器对测量结果的影响。 4Proteus 可提供的调试手段 Proteus 提供了比较丰富的测试信号用于电路的测试。这些测试信号包括模拟信号和数字信号。 本方案的仿真图如下所示:

22、12图 7 proteus 仿真图在进行 proteus 仿真的过程中可以说是遇到了很多困难,从软件一点不懂到自学使用,可以说是一个挑战也是一种锻炼。其中最主要的障碍在于数码管的不稳定显示。经过讨论分析,原因可能如下:显示程序部分出现错误、上拉电阻不够、以及仿真中的设置不对,再接着的实验分析中,逐渐排除了上拉电阻不够和设置不对的影响,经过对程序中延时部分的修改,显示逐渐稳定。13图 8 显示部分电路8、应用软件简介此设计需要在 Keil 软件平台上完成程序的调试,在 Proteus 软件平台上完成仿真显示。因此介绍如何使用 Keil 和 Proteus 进行软件的仿真。1、Keil 简介Kei

23、l 软件是目前最流行开发系列单片机的软件,Keil 提供了包括 C 编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。而 Proteus 与其它单片机仿真软件不同的是,它不仅能仿真单片机 CPU 的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。对于这样的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象 16。(1)建立工程文件点击“

24、Project-New project”菜单,出现一个对话框,要求给将要建立的工程起一个名字,你可以在编缉框中输入一个名字,点击“保存”按钮,出现第二个对话框,按要求选择目标器件片。建立新文件并增加到组。分别设置“target1”中的“Target,output,debug”各项,使程序汇编后产生 HEX 文件。(2)汇编,调试系统程序Keil 单片机模拟调试软件内集成了一个文本编辑器,用该文本编辑器可以编辑源程序。在集成开发环境中选择菜单“File New.”、单击对应的工具按钮或者快捷键Ctrl +N 将打开一个新的文本编辑窗口,完成汇编语言源文件的输入,并且完成源程序向当前工程的添加。然

25、后在集成开发环境中选择菜单“FileSave As.”可以完成文件的第一次存储。注意,汇编语言源文件的扩展名应该是“ASM”,它应该与工程文件存储在同一文件夹之内。在完成文件的第一次存储以后,当对汇编语言源文件又进行了修改,再次存储文件则应该选择菜单“FileSave”、单击对应的工具按钮或者快捷键Ctrl +S 实现文件的保存。14接着的工作需要把汇编语言源文件加入工程之中。选择工程管理器窗口的子目“Source Group 1”,再单击鼠标右键打开快捷菜单。在快捷菜单中选择“Add File to Group Source Group 1”,加入文件对话框被打开。在这个对话框的“查找范围(

26、I)”下拉列表框中选择存储汇编语言源文件的文件夹,在“文件类型(T)” 下拉列表框选择“Asm Source file(*.a*;*.src)”,这时存储的汇编语言源文件将显示出来。双击要加入的文件名或者选择要加入的文件名再单击“Add”按钮即可完成把汇编语言源文件加入工程。文件加入以后,加入文件对话框并不消失,更多的文件也可以利用它加入工程。如果不需要加入其它文件,单击“Close”按钮可以关闭加入文件对话框。这时工程管理窗口的文件选项卡中子目录“Source Group 1”下出现一个汇编语言源文件。 需要注意,当把汇编语言源文件加入工程但还没有关闭加入文件对话框,这时有可能被误认为文件没

27、有成功地加入工程而再次进行加入操作,系统将显示所需的文件已经加入的提示。在这种情况下,单击提示框中的“确定”按钮,再单击“Close”按钮可以关闭加入文件对话框。(3)编译源程序,出现错误时,返回上一级对错误更改后重新编译,直到没有错误为止。2、proteus 简介proteus是Labcenter公司出品的电路分析、实物仿真系统,而KEIL是目前世界上最好的51单片机汇编和C语言的集成开发环境。他支持汇编和C的混合编程,同时具备强大的软件仿真和硬件仿真功能。Proteus能够很方便的和KEIL、Matlab IDE等编译模拟软件结合。Proteus提供了大量的元件库有RAM,ROM,键盘,马

28、达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件,它可以仿真单片机和周边设备,可以仿真51系列、AVR,PIC等常用的MCU,与keil和MPLAB不同的是它还提供了周边设备的仿真,只要给出电路图就可以仿真。这里我将 keil 和 Proteus 两个软件的快速集成起来使用。(1)首先将 keil 和 Proteus 两个软件安装好。(2)然后在 C:Program FilesLabcenter EletronicsProteus 6 ProfessionalMODELS(我的 Proteus 是安装 C 盘里面的)目录下的 VDM51.DLL 动态连接库文件复制到 C:KEIL

29、C51BIN 目录下面(我的 keil 也安装在 C 盘)这个文件将在 keil 的 debug 设置时用到。(3)打开 proteus 软件,新建一文件将硬件原理图绘入图中。15(4)将 KEIL 生成的 HEX 文件下载入单片机中,点击“开始”进行仿真。(5)在 keil 中进行 debug,同时在 proteus 中查看直观的结果(如 LCD显示) 。这样就可以像使用仿真器一样调试程序。利用 Proteus 与 Keil 整合进行实验,具有比较明显的优势,当然其存在的缺点也是有的。利用仿真实验可以做全部的软件实验和极大多数的硬件系统,虚拟仿真实验室,因极少硬件投入、所以经济优势明显,不仅

30、可以弥补实验仪器和元器件缺乏带来的不足,而且排除了原材料消耗和仪器损坏等因素。9、总结通过这次设计,我们受益匪浅。虽然与毕业设计和真正的电子设计大赛作品相比,这个作品比较简单,但这对于我们的大学生活来说,也是一笔宝贵的财富。电子设计是一次综合性的实践,它将各种知识结合到一起综合运用到实践上来扩展、弥补、串联所学的知识。通过本次毕业设计我们得到了很多收获。首先,了解了单片机的基本知识和在各种产品中的应用。其次掌握了 C 语言的编写程序,学会了使用 PROTEUS 和 KEIL 的仿真来实现,同时掌握了如何收集、查阅、应用文献资料,如何根据实际需要有选择的阅读书籍和正确确定系统所要使用的元器件的类

31、型。再次,在精神方面锻炼了思想、磨练了意志,面对存在的困难首先分析问题根据目的要求确定可实现的部分,定出那不准的方面找同学和老师讨论研究,再完善、再修改、再发现问题、再解决培养了自己的耐心、恒心及遇事不乱的精神。总之,我们明白了理论和实践之间存在的距离只有靠不断的思考不断的动手才能将所学的知识真正运用到实践上来。在电子设计中我们很多方面的能力都得到了提高,尤其在单片机软件编程方面让我们感触颇深。我个人认为软件设计是个即灵活又细腻的工作,它要求耐心和细心去不断完善,同时还需要有良好的逻辑思维能力。通过这次电子设计,我们分析问题和解决问题的能力有所提高,也巩固了所学的知识,加深了对理论知识的理解,更重要的是锻炼自己的独立性,为我今后的工作和学习打下坚实的基础。16参考文献1 李雷等编.集成电路应用实验.国防工业出版社20032 李雷等编.电子技术应用实验教程.电子科技大学出版社,20063 朱红等编.电子技术综合实验.电子科技大学出版社,20054 冯熙昌编.电子电话机集成电路手册.人民邮电出版社,19965 胡汉才编.单片机原理及其接口技术.清华大学出版社,20086 徐惠民,安德宁等编.单片微型计算机原理接口及应用.北京邮电大学出版社,2000

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报