当前位置:文档之家› 单片机课程设计报告——智能数字频率计

单片机课程设计报告——智能数字频率计

单片机原理课程设计报告题目:智能数字频率计设计专业:信息工程班级:信息111学号:***姓名:***指导教师:***北京工商大学计算机与信息工程学院1、设计目的(1)了解和掌握一个完整的电子线路设计方法和概念;(2)通过电子线路设计、仿真、安装和调试,了解和掌握电子系统研发产品的一个基本流程。

(3)了解和掌握一些常见的单元电路设计方法和在电子系统中的应用:包括放大器、滤波器、比较器、计数和显示电路等。

(4)通过编写设计文档与报告,进一步提高学生撰写科技文档的能力。

2、设计要求(1)基本要求设计指标:1.频率测量:0~250KHz;2.周期测量:4mS~10S;3.闸门时间:0.1S,1S;4.测量分辨率:5位/0.1S,6位/1S;5.用图形液晶显示状态、单位等。

充分利用单片机软、硬件资源,在其控制和管理下,完成数据的采集、处理和显示等工作,实现频率、周期的等精度测量方案。

在方案设计中,要充分估计各种误差的影响,以获得较高的测量精度。

(2)扩展要求用语音装置来实现频率、周期报数。

(3)误差测试调试无误后,可用数字示波器与其进行比对,记录测量结果,进行误差分析。

(4)实际完成的要求及效果1.测量范围:0.1Hz~4MHz,周期、频率测量可调;2.闸门时间:0.05s~10s可调;3.测量分辨率:5位/0.01S,6位/0.1S;4.用图形液晶显示状态、单位(Hz/KHz/MHz)等。

3、硬件电路设计(1)总体设计思路本次设计的智能数字频率计可测量矩形波、锯齿波、三角波、方波等信号的频率。

系统共设计包括五大模块: 主芯片控制模块、整形模块、分频模块、档位选择模块、和显示模块。

设计的总的思想是以AT89S52单片机为核心,将被测信号送到以LM324N为核心的过零比较器,被测信号转化为方波信号,然后方波经过由74LS161构成的分频模块进行分频,再由74LS153构成的四选一选择电路控制档位,各部分的控制信号以及频率的测量主要由单片机计数及控制,最终将测得的信号频率经LCD1602显示。

各模块作用如下:1.主芯片控制模块: 单片机AT89S52 内部具有2个16位定时/计数器T0、T1,定时/计数器的工作可以由编程来实现定时、计数和产生计数溢出时中断要求的功能。

利用单片机的计数器和定时器的功能对被测信号进行计数。

以AT89S52 单片机为控制核心,来完成对各种被测信号的精确计数、显示以及对分频比的控制。

利用其内部的定时/计数器完成待测信号周期/频率的测量。

2.整形模块:整形电路是将一些不是方波的待测信号转化成方波信号,便于测量。

本设计使用运放器LM324连接成过零比较器作为整形电路。

3.分频模块: 考虑单片机利用晶振计数,使用11.0592MHz 时钟时,最大计数速率将近500 kHz,因此需要外部分频。

分频电路用于扩展单片机频率测量范围,并实现单片机频率测量使用统一信号,可使单片机测频更易于实现,而且也降低了系统的测频误差。

本设计使用的分频芯片是74LS161实现4分频及16分频。

4.档位选择模块:控制74LS161不分频、4分频或者 16分频,控制芯片是74LS153。

5.显示模块:编写相应的程序可以使单片机自动调节测量的量程,并把测出的频率数据送到显示电路显示,本设计选用LCD1602。

(2)测频基本设计原理所谓“频率”,就是周期性信号在单位时间(1s)内变化的次数。

若在一定时间间隔T内测得这个周期性信号的重复变化次数N,则其频率可表示为f=N/T(右图3-1所示)。

其中脉冲形成电路的作用是将被测信号变成脉冲信号,其重复频率等。

利用单片机的定时/计数T0、T1的定时、计数于被测频率fx功能产生周期为1s的时间脉冲信号,则门控电路的输出信号持图3-1续时间亦准确地等于1s。

闸门电路由标准的秒脉冲信号进行控制,当秒脉冲信号来到时,闸门开通,被测脉冲信号通过闸门送到计数译码显示电路。

秒脉冲信号结束时闸门关闭,计数器停止计数。

由于计数器计得的脉冲数N是在1秒时间内的累计数,所以被测频率fx=NHz。

(2)系统框图本智能数字频率计系统框图如图3-2所示图3-2智能数字频率计系统框图(3)单片机部分P0口经上拉后做LCD数据接口P2.1~P2.3作为LCD控制端口P2.4~P2.5作为分频选择端口P3.5作为被测信号输入端口P3.2~P3.4作为开关控制端口(对应电路图中K1,K2,SET)图3-3 89D52单片机部分电路(4)分频部分74HC161与74ls161功能兼容,是常用的四位二进制可预置的同步加法计数器,他可以灵活的运用在各种数字电路,以及单片机系统中实现分频器等很多重要的功能。

其管脚图如图3-4所示:图3-4 74HC161 图3-5 74HC153管脚图74HC153是一个双4选1数据选择器,其管脚图如图3-5所示:74LS161对整形后的防波信号进行分频,Q1为四分频输出,Q3为16分频输出。

未经分频、经过四分频和经过16分频的三路信号作为74LS153的一个4选1数据选择器低三位输入,由单片机控制选择分频数,然后再送单片机内部计数器T1(如图3-6)。

图3-6 分频、选择分频档位电路图(5)LCD显示部分LCD显示,1602的八位数据I/O口与单片机的P0口相连,读写控制端接P2.0-P2.2口。

三个按键中,设置键接P3.2单片机按外部中断0接口,当按键按下后,置P3.2口低电平,单片机中断。

S1、S2为频率/周期、闸门时间加/减选择按键(如图3-7)。

图3-7 LCD显示部分电路图4、软件设计(1)主程序流程图设计本次程序设计采用的是C语言程序设计,其设计流程图4-1所示:图4-1主程序流程图(2)子程序流程图设计<1>显示程序:LCD显示程序设计流程如图4-2所示:图4-2显示程序流程图<2>频率测量程序框图:频率测量程序的整体架构如图4-3所示:图4-3频率测量框架图(3)中断服务流程图INT0中断流程图如图4-4所示:图4-4INT0中断流程图(4)程序代码#include <AT89x52.h>#include <stdio.h>#include <math.h>#include <intrins.h>float f; //频率float p; //周期float sj; //闸门时间char idata buff[20];char flag=0; //频率、周期选择标志位char xs=0; //设置闸门时间结束后是否显示结果的标志位unsigned char m=0,n=0,yichu=0,fenpin; //m定时中断次数n计数中断次数yichu判断是定时//器还是计数器溢出#define Key_Set P3#define K1 0xf7 //11110111 P33#define K2 0xef //11101111 P34#define NO_Set 0xff#define Freq 0#define Peri 1sbit B153=P2^4;sbit A153=P2^3;sbit P17=P3^4;sbit P16=P3^3;sbit P35=P3^5;sbit Set=P3^2;unsigned char LCD_Wait(void);void LCD_Write(bit style, unsigned char input);void LCD_SetDisplay(unsigned char DisplayMode);void LCD_SetInput(unsigned char InputMode);void LCD_Initial();void GotoXY(unsigned char x, unsigned char y);void Print(unsigned char *str);void C52_Initial();void Delay(unsigned int t);void display(float f);void cepin();void panduan();void timedisplay(float sj);void Time_Set1();void Time_Set2();void t0();void t1();/*****模块名称LCD1602显示程序******//***********************端口定义***********************************/sbit LcdRs= P2^0;sbit LcdRw= P2^1;sbit LcdEn= P2^2;sfr DBPort= 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口/************************内部等待函数********************************/unsigned char LCD_Wait(void){LcdRs=0; //寄存器选择输入端1:数据0:指令LcdRw=1; _nop_(); //RW:为0:写状态;为1:读状态;LcdEn=1; _nop_(); //使能输入端,读状态,高电平有效;写状态,下降沿有效LcdEn=0;return DBPort;}/**********************向LCD写入命令或数据***************************/#define LCD_COMMAND 0 // Command#define LCD_DATA 1 // Data#define LCD_CLEAR_SCREEN 0x01 // 清屏#define LCD_HOMING 0x02 // 光标返回原点void LCD_Write(bit style, unsigned char input){ LcdEn=0;LcdRs=style;LcdRw=0; _nop_();DBPort=input; _nop_();//注意顺序LcdEn=1; _nop_();//注意顺序LcdEn=0; _nop_();LCD_Wait();}/********************设置显示模式*********************************/#define LCD_SHOW 0x04 //显示开#define LCD_HIDE 0x00 //显示关#define LCD_CURSOR 0x02 //显示光标#define LCD_NO_CURSOR 0x00 //无光标#define LCD_FLASH 0x01 //光标闪动#define LCD_NO_FLASH 0x00 //光标不闪动void LCD_SetDisplay(unsigned char DisplayMode){LCD_Write(LCD_COMMAND, 0x08|DisplayMode);}/*********************设置输入模式***********************************/#define LCD_AC_UP 0x02#define LCD_AC_DOWN 0x00 // default#define LCD_MOVE 0x01 // 画面可平移#define LCD_NO_MOVE 0x00 //defaultvoid LCD_SetInput(unsigned char InputMode){LCD_Write(LCD_COMMAND, 0x04|InputMode);}/******************初始化LCD**************************************/void LCD_Initial(){LcdEn=0;LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动}/************************************************************************/void GotoXY(unsigned char x, unsigned char y){if(y==0)LCD_Write(LCD_COMMAND,0x80|x);if(y==1)LCD_Write(LCD_COMMAND,0x80|(x-0x40));}void Print(unsigned char *str){while(*str!='\0'){LCD_Write(LCD_DATA,*str);str++;}}/*************************************************************************** * 模块名称:频率测量程序* * 测量范围:0.1Hz~4MHz,闸门时间:0.05s~10s可调。

相关主题