版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机课程设计报告题目:基于89C52单片机的数字频率计院〔系〕:信息与通信学院专业:电子信息工程学生姓名:------学号:----------指导教师:-----2012年11月15日摘要该系统以STC89S51单片机为核心,应用单片机的运算和控制功能并采用LCD显示器实时地将所测频率显示出来,通过测量结果比照,分析了测量误差的来源,提出了减小误差应采取的措施。频率计具有电路结构简单、本钱低、测量方便、精度较高等特点,适合测量低频信号。关键词:单片机,频率测量AbstractThepaperintroducesonecymometersystemBasedonsinglechipwhichapplysthesinglechip`sfunctionofoperationandcontrolanddisplaystheresultbyLCD.Bycomparingresults,thesourceofmeasurementerrorisanalysed,themeasuresareproposedforreducingerrors.Thefrequencymeterhascharacteristicsofsimplecircuit,lowcost,easymeasurementandhighprecision,itfitsformeasuringlowfrequencysignals.Keywords:Singlechip,frequency-measure引言………………11课程设计概述…………………11.1课程设计任务及要求……………….11.2主要仪器…………….11.3数字频率计概述.........................................11.4测频根本设计原理.......................................22方案论证..........................................22.1总体方案................................................22.2测频方案选择............................................33硬件设计……….33.1系统功能描述............................................33.2硬件电路设计框架……………………33.3单片机局部…………..43.4放大整形局部…………43.5分频局部.................................................53.6LCD显示和键盘局部……...................................64软件设计……….64.1主程序流程图设计……………………64.2子程序流程图设计………………....74.2.1显示程序……………………......74.2.2频率测量程序框图………….......84.2.3中断效劳流程图........................................85系统调试……….95.1显示调试………….....95.2键盘调试………….....95.3前置放大整形调试…………………...95.4软件调试.................................................96结果分析与结论……………….107总结…………….10参考文献………….11附录………………12引言:在工业生产、仪器仪表行业及实验教学中,经常会遇到频率的测量,我们经常使用的及目前市场上所售的频率测量装置,大多数是采用小规模集成电路及别离元件组成。在现代电子学的各个领域,要求频率计精度高且能够直接读出频率值。频率计由89S52单片机控制电路、信号处理电路、键盘电路以及测量数据的显示电路还有系统软件所构成的,在信号处理电路当中包含了待测信号放大、限幅、波形变换、波形整形以及分频电路。信号的予处理电路当中的放大器所实现的是对待测信号的一个放大的功能,能够降低对待测信号的幅度的一个要求,波形的变换和整形电路实现将正弦波样的一个正负交替的号波形转换成为能够被单片机所接受的一个信号,分频电路所用于扩展的单片机的频率测量范围以及提高测量精度,并且通过实现单片机频率测量以及周期测量使用统一的一个输入的信号。系统的软件包括有测量初始化的模块、显示的模块以及信号频率测量的模块等等。1课程设计概述1.1课程设计任务及要求题目:数字频率计要求:LCD显示,测量范围0~100KHZ,带前置放大、整形电路,可测周期信号的频率。1.2主要仪器设备函数信号发生器1台示波器1台直流稳压电源〔0~30V〕1台数字万用表1块PC机1台1.3数字频率计概述数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。它是一种用十进制数字显示被测信号频率的数字测量仪器。它的根本功能是测量正弦信号,方波信号及其他各种单位时间内变化的物理量。在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精确度高,显示直观,经常要用到频率计。1.4测频根本设计原理所谓“频率”,就是周期性信号在单位时间〔1s〕内变化的次数。假设在一定时间间隔T内测得这个周期性信号的重复变化次数N,那么其频率可表示为f=N/T〔右图1-1所示〕。其中脉冲形成电路的作用是将被测信号变成脉冲信号,其重复频率等于被测频率fx。时间基准信号发生器提供标准的时间脉冲信号,假设其周期为1s,那么门控电路的图1-1输出信号持续时间亦准确地等于1s。闸门电路由标准秒信号进行控制,当秒信号来到时,闸门开通,被测脉冲信号通过闸门送到计数译码显示电路。秒信号结束时闸门关闭,计数器停止计数。由于计数器计得的脉冲数N是在1秒时间内的累计数,所以被测频率fx=NHz。2方案论证2.1总体方案本次设计包含硬件设计与软件设计两局部,根据设计任务要求,采用AT89S52单片机,配置时钟电路,复位电路构成单片机最小系统,配置前置放大电路,人机对话通道中的键盘,LCD显示,从而构成设计要求的单片机应用测频系统,其结构框图如下列图2-1所示:LCD显示电路键盘电路时钟电路复位电路前置放大整形单片机LCD显示电路键盘电路时钟电路复位电路前置放大整形单片机图2-1结构框图2.2测频方案选择方案一:直接测频法。直接测频法是把被测频率信号经脉冲形成电路后加到闸门的一个输入端,只有在闸门开通时间T(以秒计)内,被计数的脉冲被送到十进制计数器进行计数。设计数器的值为N,由频率定义式可以计算得到被测信号频率为:f=N/T。方案二:高精度恒误差测频法。通过对传统测量方法的研究,结合高精度恒误差测量原理,设计一种测量精度与被测频率无关的硬件测频电路。本方法立足于快速的宽位数高精度浮点数字运算。方案三:倍频法。直接测频法在高频段有着很高的精度。可以把频率测量范围分成多个频段,使用倍频技术,根据频段设置倍频系数将经整形的低频信号进行倍频后再进行测量,高频段那么进行直接测量。从编程难易及单片机资源利用情况和测量误差角度考虑,选择方案一,尽管在测量低频段时的相对测量误差较大。但是可以通过增大T来提高测量精度。3硬件设计3.1系统功能描述本次课程设计主要完成功能有:(1〕长按设置键可选择测量频率或者周期。(2〕短按那么是选择设置闸门时间〔0.05s—10s〕。(3〕测量频率范围:0.1Hz—4MHz。3.2硬件电路设计框架根据设计要求,数字频率计整个系统硬件框架图如下3-1信号放大待测信号信号放大待测信号分频电路信号整形信号限幅分频电路信号整形信号限幅AT89S52单片机AT89S52单片机LCD液晶显示LCD液晶显示键盘电路键盘电路图3-1整机硬件电路框图本系统实用LM318对待测信号进行放大,在用稳压二极管1N4733对信号进行限幅,然后经74LS14反向器整形得到TTL信号,送74LS161分频,最后送单片机P3^5内部计数器进行计数,单片机处理数据后送LCD显示。3.3单片机局部P0口经上拉后做LCD数据接口P2.1~P2.3作为LCD控制端口P2.4-P2.5作为分频选择端口P1.6-P1.7作为键盘设置端口P3.5作为被测信号输入端口图3-23.4放大整形局部待测信号经过第一级放大后,进入第二级放大限幅电路,再由7414组成的施密特触发器整形,得到标准方波信号。LM318是高数运放,工作电压±5--±20V,输入带宽15MHZ,足够处理高频信号。放大倍数:n=RL2/RL1(RL2用50K,RL1用10K)。限幅原理:限幅电路的稳压管跨接在集成运放的输出端和反相输入端之间。假设稳压管截止,那么集成运放必然工作在开环状态,输出电压不是+UOM,就是-UOM。这样,必将导致稳压管击穿而工作在稳压状态,DZ构成负反应通路,使反相输入端为“虚地”,限流电阻上的电流iR等于稳压管的电流iZ,输出电压uO=±UZ。图3-33.5分频局部74HC161与74ls161功能兼容,是常用的四位二进制可预置的同步加法计数器,他可以灵活的运用在各种数字电路,以及单片机系统中实现分频器等很多重要的功能.其管脚图如图3-4所示:图3-474HC161图3-574HC153管脚图74HC153是一个双4选1数据选择器,其管脚图如图3-5所示:74LS161对整形后的防波信号进行分频,Q1为四分频输出,Q3为16分频输出。未经分频、经过四分频和经过16分频的三路信号作为74LS153的一个4选1数据选择器低三位输入,由单片机控制选择分频数,然后再送单片机内部计数器T1〔如图3-6〕.图3-63.6LCD显示和键盘局部LCD显示,通过调节变阻器调节LCD背光亮度,八位数据口接单片机P0口,读写控制端接P2.0-P2.2口。三个按键中,设置键接P3.2单片机按外部中断0接口,当按键按下后,置P3.2口低电平,单片机中断。S1、S2为频率/周期、闸门时间加/减选择按键〔如图3-7〕。图3-74软件设计4.1主程序流程图设计本次程序设计采用的是C语言程序设计,其设计流程图4-1所示:开始LCD初始化LCD初始化CPU初始化CPU初始化定时中断效劳定时中断效劳频率周期测量量程自动转换量程自动转换LCD显示LCD显示结束结束图4-1主程序流程图4.2子程序流程图设计4.2.1显示程序初始化LCDLCD初始化LCD设置输入模式设置显示模式内部等待函数,等待有无信号N内部等待函数,等待有无信号NYYLCD显示LCD显示图4-2显示程序流程图4.2.2频率测量程序框图频率测量程序的整体架构如图4-3所示:延时子程序延时子程序减按键、加按键89c52初始化显示闸门时间计数中断判断频率定时中断频率显示周期显示测试频率测试频率程序图4-3频率测量框架图4.2.3中断效劳流程图设置键按下设置键按下进入中断NYNY长按?长按?按键选择测频率/按键选择测频率/周期闸门时间加/减显示测量量,频率/周期显示闸门时间显示测量量,频率/周期显示闸门时间N设置键按下?N设置键按下?YY退出中断图4-4INT0中断流程图5系统调试5.1显示调试调节变阻器改变LCD背光亮度,直到亮度适宜且显示正常。去掉前置放大整形局部,送数据LCD显示看是否正常显示,能够正常显示,说明显示电路正常工作。5.2键盘调试在显示正常情况下调试键盘,按设置键,看是否能正常进入中断,假设能,进入中断后,按下频率/周期、闸门时间设置键,看是否能正常设置。在调试过程中遇到能够进入中断,但是不能进行设置,经检查电路、程序后发现两个选择按键之间短路,当其中一个按键按下,相当于两个同时按下,只是单片机CPU不能正常识别。消除短路后电路正常工作了。5.3前置放大整形调试去掉LCD、单片机调试放大器是否正常工作。给定输入信号,用示波器分别测量各级输入输出信号,看是否和放大相应倍数,限幅在指定范围。调试结果:第一级放大五倍与符合预想要求。第二级限幅在±6.2V,与理论值±5.1伏有所出入,但仍然满足后面电路要求。5.4软件调试单片机软件调试主要是调试本次课程设计的主程序。其调试过程如下:〔1〕新建一个工程。单击Project菜单,在弹出的下拉菜单中选NewProject。〔2〕然后选择你要保存的路径,输入工程文件的名字,保存。〔3〕新建一个工程后弹出一个对话框,根据你的需要选择你使用的单片机型号。然后点击确定。〔4〕单击“File”,选择“New”,新建文件并在其中输入程序代码,然后保存为c语言文件。〔5〕回到编辑界面后,单击“Target1”前面的“+”号,然后在“SourceGroup1”单击右键选择“AddFileToGroup‘SourceGroup1’”,选中Test.c文件。〔6〕单击“Project”菜单,选中“BuiltTarget”,完成程序的编译,在工程文件夹中找到*.hex文件即可6结果分析与结论测量结果比照分析:输入频率测量频率误差12345结论:整个系统完成测试后,性能稳定,由于所用函数发生器输出最大频率为10KHz,没有测试更高频率;从测量结果比照分析可知本次设计的频率计根本满足课程设计要,并且功能有所扩展。7总结在整个课程设计的过程中每一步都是自己亲自做过的,遇到的问题也非常多,在经过遇到问题,思索问题到解决问题的过程中,收获是最多的。以往没有注意到的问题,都在这一次的课程设计中得以表达,这培养了我的细心,耐心和专心。我觉得能够在这次的课程设计中学到很多的东西,以往不注意的细节,在这一次中是必须让自己去注意的。对实际经验的缺乏在设计过程中出现了不少的问题,得到了老师的耐心指导,在此表示感谢。参考文献[1]张义和.例说51单片机.人民邮电出版社[2]马淑华.王凤文等著.单片机原理与接口技术.北京邮电大学出版社[3]华成英.童诗白著.模拟电子技术根底.高等教育出版社[4]阎石著.数字电子技术技术根底.高等教育出版社[5]谭浩强.C语言程序设计.清华大学出版社[6]陈尚松等.电子测量与仪器〔第二版〕.电子工业出版社附录:PCB图:程序清单:#include<AT89x52.h>#include<stdio.h>#include<math.h>#include<intrins.h>floatf; //频率floatp; //周期floatsj; //闸门时间charidatabuff[20];charflag=0; //频率\周期选择标志位charxs=0; //设置闸门时间结束后是否显示结果的标志位unsignedcharm=0,n=0,yichu=0,fenpin;//m定时中断次数n计数中断次数yichu判断是定时器还是计数器溢出#defineKey_SetP1#defineK10xbf //1011_1111P16#defineK20x7f //0111_1111P17#defineNO_Set0xff#defineFreq0#definePeri1sbitB153=P2^4;sbitA153=P2^3;sbitP17=P1^7;sbitP16=P1^6;sbitP35=P3^5;sbitSet=P3^2;unsignedcharLCD_Wait(void);voidLCD_Write(bitstyle,unsignedcharinput);voidLCD_SetDisplay(unsignedcharDisplayMode);voidLCD_SetInput(unsignedcharInputMode);voidLCD_Initial();voidGotoXY(unsignedcharx,unsignedchary);voidPrint(unsignedchar*str);voidC52_Initial();voidDelay(unsignedintt);voiddisplay(floatf);voidcepin();voidpanduan();voidtimedisplay(floatsj);voidTime_Set1();voidTime_Set2();voidt0();voidt1();/*****************************************模块名称:LCD1602显示程序******************************************//***********************PortDefinitions*********************/sbitLcdRs=P2^0;sbitLcdRw=P2^1;sbitLcdEn=P2^2;sfrDBPort=0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口/************************内部等待函数************************/unsignedcharLCD_Wait(void){ LcdRs=0; //存放器选择输入端 1:数据0:指令 LcdRw=1; _nop_();//RW:为0:写状态;为1:读状态; LcdEn=1; _nop_(); //使能输入端,读状态,高电平有效;写状态,下降沿有效 LcdEn=0; returnDBPort; }/***********************向LCD写入命令或数据*******************/#defineLCD_COMMAND0//Command#defineLCD_DATA1//Data#defineLCD_CLEAR_SCREEN 0x01//清屏#defineLCD_HOMING 0x02//光标返回原点voidLCD_Write(bitstyle,unsignedcharinput){ LcdEn=0; LcdRs=style; LcdRw=0; _nop_(); DBPort=input; _nop_();//注意顺序 LcdEn=1; _nop_();//注意顺序 LcdEn=0; _nop_(); LCD_Wait(); }/********************设置显示模式****************************/#defineLCD_SHOW 0x04//显示开#defineLCD_HIDE 0x00//显示关 #defineLCD_CURSOR 0x02 //显示光标#defineLCD_NO_CURSOR 0x00//无光标 #defineLCD_FLASH 0x01//光标闪动#defineLCD_NO_FLASH 0x00//光标不闪动voidLCD_SetDisplay(unsignedcharDisplayMode){ LCD_Write(LCD_COMMAND,0x08|DisplayMode); }/*********************设置输入模式****************************/#defineLCD_AC_UP0x02#defineLCD_AC_DOWN 0x00//default#defineLCD_MOVE0x01//画面可平移#defineLCD_NO_MOVE 0x00//defaultvoidLCD_SetInput(unsignedcharInputMode){ LCD_Write(LCD_COMMAND,0x04|InputMode);}/******************初始化LCD*********************************/voidLCD_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递增,画面不动}/*************************************************************/voidGotoXY(unsignedcharx,unsignedchary){if(y==0)LCD_Write(LCD_COMMAND,0x80|x);if(y==1)LCD_Write(LCD_COMMAND,0x80|(x-0x40));}voidPrint(unsignedchar*str){ while(*str!='\0') { LCD_Write(LCD_DATA,*str); str++; }} /********************************************************/***模块名称:频率测量程序**主要技术指标:测量范围:0.1Hz~4M **闸门时间:0.05s~10s可调。*************************************************************//************************89c52初始化**********************/voidC52_Initial(){sj=1000000.00;Key_Set=0xff;TMOD=0x51; //01010001T1为计数器,T0为定时器EA=1;ET0=1;ET1=1;EX0=1; PX0=1; //外部中断0设置为高优先级IT0=0; //电平触发方式}/**************************ms延时子程序********************/voidDelay(unsignedintt)//t随着数值越大,误差趋于平衡.{unsignedchari;while(t--){for(i=0;i<123;i++){;}}}/*************************计数中断*************************/voidt1(void)interrupt3 //计数器1溢出,yichu=1{n++;yichu=1;TH1=0;TL1=0;}/*************************定时中断************************/voidt0(void)interrupt1{m++;yichu=2; //定时器0溢出,yichu=2TH0=0x3c;//定时50msTL0=0xb0;}/*************************频率显示*************************/voidFdisplay(floatf){ if(f>999400.00){if(f<4000400.00) {sprintf(buff,"Freq:%2.4fmHz",(f/1000000.00));} } else { if(f>1040.00) {sprintf(buff,"Freq:%4.2fkHz",(f/1000.00));} else { if(f>0.06) {sprintf(buff,"Freq:%3.2fHz",f);} } }GotoXY(0,1);Print(buff);}/*************************周期显示************************/voidPdisplay(floatp){if(p>999400.00){if(p<10004000.00) {sprintf(buff,"Cycle:%2.4fs",(p/1000000.00));} else {sprintf(buff,"error(TimeorF)",p);} } else { if(p>9950.00) {sprintf(buff,"Cycle:%4.2fms",(p/1000.00));} else { if(p>0.248) {sprintf(buff,"Cycle:%3.3fus",p);} else {sprintf(buff,"error(TimeorF)",p);} } }GotoXY(0,1);Print(buff);}/*************************测试频率*****************/voidcepin(){unsignedchara;unsignedlongjs;m=0;n=0;TMOD=0x51;TH0=0x3c;//定时50msTL0=0xb0;TH1=0;TL1=0;a=sj/50000.00;TCON=0x50;//启动定时器和计数器while(m!=a);TCON=0; js=TH1*256+n*65536+TL1;f=(js/(sj/1000000.00))*fenpin;p=sj/(js*fenpin);if(xs==0)//设置结束后第一次不显示结果{if(flag==Freq)Fdisplay(f);elsePdisplay(p);}} /************************判断频率******************************/voidpanduan(){xs=0;//设置结束后第二次循环显示结果B153=1;//选择16分频A153=0;yichu=0;TMOD=0x51;TH0=0xff; //定时器0200usTL0=0x38;TH1=0xff; //计数器1100脉冲TL1=0x9c;TR0=1;//启动定时器0和计数器1TR1=1;while(yichu==0);//如果没有溢出一直循环TR0=0;//已经溢出关闭定时器0和计数器1TR1=0; if(yichu==1) //计数器先溢出:在200ms内测得的脉冲过多,说明频率较高(f>500khz){fenpin=16;//转为测16分频后的频率16 cepin();}else //定时器先溢出:100个脉冲的时间比拟短,即频率较低,可以减少分频数{yichu=0; B153=0; A153=1; TH0=0xfc; //定时器01ms TL0=0x18; TH1=0xff; //计数器1100个脉冲 TL1=0x9c; TR0=1;//启动定时器0和计数器1TR1=1; while(yichu==0);//如果没溢出一直循环 TR0=0;//已经溢出关闭定时器0和计数器1TR1=0; if(yichu==1)//计数器先溢出:在1ms内测得的脉冲过多,说明频率较高(1khz<f<500khz) {fenpin=4;//转为测4分频后的频率4 cepin();} else //定时器先溢出:100个脉冲的时间比拟短,即频率较低 {fenpin=1;B153=0; A153=0; cepin();}}}/**************显示闸门时间*************************/voidtimedisplay(floatGTime){sprintf(buff,"GTime=%7.0fus",GTime);GotoXY(0,1);Print(buff);Delay(50);}/**********************减按键********************/voidTime_Set2(){Delay(1000);if(P17==1){sj=sj-50000.00;if(sj>50000.00)timedisplay(sj); else {sj=50000.00; timedisplay(sj);} }else{while(P17==0){Delay(500); sj=sj-500000.00; if(sj>50000.00)timedisplay(sj); else {sj=50000.00; timedisplay(sj);} }}}/****************加按键******************/voidTime_Set1(){Delay(1000);if(P16==1){ sj=sj+50000.00; if(sj<10000000.00)timedisplay(sj); else {sj=10000000.00; timedi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年中国煤炭检测实验分析仪器行业全国市场开拓战略制定与实施研究报告
- 2025-2030年中国燃料电池电堆行业商业模式创新战略制定与实施研究报告
- 新形势下物业管理行业可持续发展战略制定与实施研究报告
- 2025-2030年中国有限服务酒店行业开拓第二增长曲线战略制定与实施研究报告
- 2025-2030年中国温度控制器行业并购重组扩张战略制定与实施研究报告
- 2025-2030年中国汗蒸馆行业开拓第二增长曲线战略制定与实施研究报告
- 市政道路工程监理竣工质量评估报告
- 学校修建综合楼申请报告
- 四年级数学(小数加减运算)计算题专项练习与答案
- 皮草面料知识培训课件
- 银行反恐应急预案及方案
- 关于推某某同志担任教育系统实职领导职务的报告(职务晋升)
- 2023消防安全知识培训
- 邻近铁路营业线施工安全监测技术规程 (TB 10314-2021)
- Exchange配置与规划方案专项方案V
- 三年级上册脱式计算练习200题及答案
- 新生儿腭裂护理查房课件
- 二年级下册科学课程纲要
- 前交叉韧带重建术后康复训练
- 河南近10年中考真题数学含答案(2023-2014)
- 八年级上学期期末家长会课件
评论
0/150
提交评论