课程设计课程名称单片机原理及应用课题名称频率计数器专业电子信息工程班级1302学号201301030218姓名许聪指导老师寻大勇等2016年3月25日等级:电气信息学院课程设计任务书课题名称频率计数器姓名许聪专业电子信息班级1302学号18指导老师寻大勇课程设计时间2016年3月14日-2016年3月25日教研室意见意见:审核人:一、任务及要求设计任务:本课题以单片机为核心,设计和制作一个频率计数器,来完成对输入的信号进行频率计数,计数的频率结果能够显示出来。要求能够对0-250KHz的信号频率进行准确计数,计数误差不超过±1HZ。设计要求:(1)确定系统设计方案;(2)进行系统的硬件设计;(3)完成应用程序设计;(4)应用系统的硬件和软件的调试。二、进度安排第一周:周一:集中布置课程设计任务和相关事宜,查资料确定系统总体方案。周二~周三:完成硬件设计和电路连接周四~周日:完成软件设计第二周:周一~周三:程序调试周四~周五:设计报告撰写。周五进行答辩和设计结果检查。三、参考资料1、王迎旭等.单片机原理及及应用.2版.机械工业出版社,20122、胡汉才.单片机原理及其接口技术.3版.清华大学出版社,2010.3、戴灿金.51单片机及其C语言程序设计开发实例.清华大学出版社,2010目录第1章设计任务及要求·······································································11.1设计任务······················································································11.2设计要求······················································································1第2章系统方案设计··········································································12.1基本设计原理··············································································12.2方案整体框图··············································································2第3章系统硬件电路设计····································································23.1复位电路.........................................................23.2晶振电路.........................................................33.3LED数码管显示电路...............................................3第4章系统软件设计·········································································44.1主程序流程图··············································································44.2初始化模块·················································································54.3信号频率测量模块................................................54.4数码管显示模块...............................................54.5程序中断模块....................................................64.6数码管扫描模块..................................................7第5章系统仿真及调试······································································75.1C程序编译.......................................................85.2Proteus仿真......................................................9心得体会................................................................9参考文献·························································································10附录A仿真总图··············································································12附录B程序清单··············································································131第1章设计任务及要求1.1设计任务:本课题以单片机为核心,设计和制作一个频率计数器,来完成对输入的信号进行频率计数,计数的频率结果能够显示出来。要求能够对0-250KHz的信号频率进行准确计数,计数误差不超过±1HZ。1.2设计要求:(1)确定系统设计方案;(2)进行系统的硬件设计;(3)完成应用程序设计;(4)应用系统的硬件和软件的调试。第2章系统方案设计2.1基本设计原理基本设计原理是直接用十进制数字显示被测信号频率的一种测量装置。它以测量周期的方法对正弦波、方波、三角波的频率进行自动的测量。所谓“频率”,就是周期性信号在单位时间(1s)内变化的次数。若在一定时间间隔T内测得这个周期性信号的重复变化次数N,则其频率可表示为f=N/T。其中脉冲形成电路的作用是将被测信号变成脉冲信号,其重复频率等于被测频率fx。时间基准信号发生器提供标准的时间脉冲信号,若其周期为1s,则门控电路的输出信号持续时间亦准确地等过闸门送到计数译码显示电路。秒信号结束时闸门关闭,计数器停止计数。由于计数器计得的脉冲数N是在1秒时间内的累计数,所以被测频率fx=NHz。AT89S51单片机内部具有2个16位的定时/计数器T0与T1,其工作方法可以通过编程来实现所需的定时/计数与产生计数溢出中断要求的功能。定时/计数器T0与T1的核心都是16位的加1计数器,TH0与TL0构成在构成定时/计数器T0加1计数器的高8位和低8位;TH1与TL1构成在构成定时/计数器T1加1计数器的高8位和低8位。加1计数器的初值可以通过程序设定,这样就可以获得不同的计数值或定时时间。当加1计数器用作定时器时,每个机器周期加1(使用12MHz时钟时,每1us加1),这样以机器周期为基准可以用来测量时间间隔。当加1计数器用作计数器时,在相应的外部引脚发生从1到0的跳变时计数器加1,这样在计数闸门的控制下可以用来测量待测信号的频率。外部输入每个机器周期被采样一次,这样检测一次从1到0的跳变至少需要2个机器周期(24个振荡周期),所以最大计数速率为时钟频率的1/24。AT89S51单片机的时钟频率可以在0Hz—33MHz范围内自动调节,当使用12MHz时钟时,最大计数速率为500KHz。定时/计数器的工作由相应的运行控制位TR控制,当TR置1时,定时/计数器开始计数;当TR置0时,停止计数。在本设计方案中,我通过程序设定T0工作在计数状态下,T1工作在计时状态下。T0计数器对输入的信号经行计数,其最大计数值为fOSC/24,当fOSC=12MHz时,T0的最大计数频率为250kHz。22.2方案整体框图图1系统总框图第3章系统硬件电路设计3.1复位电路复位是单片机的初始化操作。单片机系统在上电启动运行时,都需要先复位。其作用是使CPU和系统中其他部件都处于一个确定的初始状态,并从这个状态开始工作。而复位是一个很重要的操作方式,但单片机本身是不能自动经行复位的,必须配合相应的外部复位电路才能实现。本设计的复位电路采用上电复位加按键手动复位,其电路如下图所示:图2上电复位电路AT89C51单片机晶振电路复位电路显示电路输入信号33.2晶振电路单片机工作是在统一的时钟脉冲控制下一拍一拍地进行的,这个脉冲是单片机控制器中的时序电路发出的。单片机的时序就是CPU在执行指令时所需控制信号的时间顺序。为了保证各部件的同步工作,单内部电路应在唯一的时钟信号下严格按时序进行工作。其电路原理图如下:图3晶振电路3.3LED数码管显示电路显示器是微机重要的输出设备。显示器有显示监控结果、提供用户操作界面等功能。在本次设计中采用了LED显示器,即数码管。数码管的每一个数码段是一只发光二极管。当发光二极管导通时,相应的一个点或者一个笔画发光,控制发光二极管发光组合,可以显示出所需字符。我采用了共阴极结构。在定义其显示字形的码段时,通过I/O口送出七段码。其段码表如下:表1共阴数码管段选码显示字形0123456789共阴段选码3FH06H5BH4FH66H6DH7DH07H7FH6FH4数码管的电路图如下:图4数码管接线电路本设计采用了数码管的动态显示方式,即轮流点亮各数码管,对数码管进行扫描。在任何时刻只給一个数码管通电,通电一定时间后再给下一个数码管通电。只要刷新频率足够高,动态显示方式同样可以实现稳定显示。这样就可以节约I/O口。第4章系统软件设计4.1主程序流程图图5程序流程图初始化T1定时T0计数判断是否到一秒数码管显示开始结束否是54.2初始化模块voidmain(void){unsignedchari;TMOD=0x15;//定义定时器0为计数方式,定时器1为计时方式,均工作在方式1TH0=0;//定时器0初值高8位为0TL0=0;//定时器0初值低8为0TH1=(65536-5000)/256;//定时器1初值高8位TL1=(65536-5000)%256;//定时器初值低8位TR1=1;//启动定时器1TR0=1;//启动定时器0ET0=1;//开定时器0中断ET1=1;//开定时器1中断EA=1;//开总中断4.3信号频率测量模块while(1){if(flag==1)//如果定时时间到了1s{flag=0;//标志位清零x=T0count*65536+TH0*256+TL0;//获得整形的频率值4.4数码管显示模块for(i=0;i8;i++){temp[i]=0;//赞存缓冲区清零}i=0;while(x/10)//将频率值的每一位分离出来,存进temp数组{6temp[i]=x%10;x=x/10;i++;}temp[i]=x;for(i=0;i6;i++){dispbuf[i]=temp[i];//将暂存数组的数据赋给显示数组}timecount=0;//计时清零T0count=0;//计数清零TH0=0;//计时器0初值清零TL0=0;//计时器0初值清零TR0=1;//重新启动定时器04.5程序中断模块voidt0(void)interrupt1using0{T0count++;}voidt1(void)interrupt3using0{TH1=(65536-5000)/256;TL1=(65536-5000)%256;//重装初值timeco