1、课程设计报告课程名称:单片机课程设计报告题目:数字频率计学生姓名:所在学院:专业班级:学生学号:指引教师: 年 12 月 25 日课程设计任务书报告题目数字频率计完毕时间/12/25学生姓名专业班级指引教师职称讲师总体设计规定和技术要点设计一种数字频率计,规定如下:1完毕单脉冲测量,输入脉冲宽度范畴是100ms0.1s。2使用AT89C51单片机定期器/计数器定期和计数功能,外部扩展6位LED数码管,规定合计每秒进入单片机外部脉冲个数,用LED数码管显示出来。3.规定(1)被测频率fx110Hz,采用测周法,显示频率. ;fx110Hz,采用测频法,显示频率。(2)运用键盘分段测量和自动分段测
2、量。(3)完毕单脉冲测量,输入脉冲宽度范畴是100ms0.1s。 (4)显示脉冲宽度规定如下。Tx1000ms,显示脉冲宽度。Tx1000ms,显示脉冲宽度。工作内容及时间进度安排1.时间及任务17周-18周周一到周五,上午8:00-11:40,下午2:00-5:40。(1)17周周一:学生选题,明确任务,指引教师对课题进行解说,资料检索。(2)17周周二:硬件设计(3)17周周三:硬件仿真(4)17周周四:软件设计(5)17周周五:软件设计(6)18周周一:软件设计(7)18周周二:综合调试(8)18周周三:书写课程设计报告(9)18周周四:书写课程设计报告(10)18周周五:答辩评分摘要以
3、ATMEL单片机为核心,运用单片机外部中断、定期器计数模式和定期器功能对信号发生器产生脉冲频率进行计数。且可以依照频率不同,单片机控制选取测周法或者测频法对产生脉冲波形进行计数,以进行更加精准频率测量。并且可以通过按键来进行频率测量办法选取。核心词:数字频率计;测频发;测周法;单片机 目录一、概述1二、方案论证11总体方案12测量方案选取2三、硬件设计21系统功能描述22硬件电路设计方框3 3单片机各某些电路3四、软件设计41测频发42测周法43主程序流程图设计54.程序设计14五、课程与心得14六、参照文献15一、概述 数字频率计是采用数字电路制成实现对周期性变化信号频率测量。数字频率计是计
4、算机、通讯设备、音频视频等科研生产领域不可缺少测量仪器。它是一种用十进制数字,显示被测信号频率数字测量仪器。它基本功能是测量正弦信号,方波信号以及其她各种单位时间内变化物理量。在进行模仿、数字电路设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精度高,显示直观,因此经常要用到数字频率。二、方案论证1 总体方案本次设计包括硬件设计与软件设计两某些,依照设计任务规定,采用AT89S52单片机,配备时钟电路,复位电路构成单片机最小系统,配备前置放大电路,人机对话通道中键盘,数码管显示,从而构成设计规定单片机应用测频系统,其构造框图如下图1-1所示:前置放大整形复位电路 单片机数码管显示时钟
5、电路 键盘电路 图1构造框图2.测量方案选取方案一:直接测频法。直接测频法是把被测频率信号经脉冲形成电路后加到闸门一种输入端,只有在闸门开通时间T ( 以秒计) 内,被计数脉冲被送到十进制计数器进行计数。设计数器值为N ,由频率定义式可以计算得到被测信号频率为:f = N / T 。 方案二:高精度恒误差测频法。通过对老式测量办法研究,结合高精度恒误差测量原理,设计一种测量精度与被测频率无关硬件测频电路。本办法立足于迅速宽位数高精度浮点数字运算。方案三:倍频法。直接测频法在高频段有着很高精度。可以把频率测量范畴提成各种频段,使用倍频技术,依照频段设立倍频系数将经整形低频信号进行倍频后再进行测量
6、,高频段则进行直接测量。从编程难易及单片机资源运用状况和测量误差角度考虑,选取方案一,尽管在测量低频段时相对测量误差较大。但是可以通过增大 T 来提高测量精度。三硬件设计1系统功能描述本次课程设计重要完毕功能有:(1)按P34键可选取测量频率。(2)按P35键可以选取测量周期。(3)按P36键可以自动选取测频率与测周期。2硬件电路设计框架依照设计规定,数字频率计整个系统硬件框架图如下2-1键盘电路AT89S52单片机信号放大分频电路信号整形信号限幅待测信息数码管显示 图2整机硬件电路框图3.单片机各某些电路(1)P0口经上拉电阻数据管显示电路(2)P34-P36作为键盘设立端口(3)P33作为
7、被测信号输入端口(4)P34被测信号接受端 图3单片机最小系统4. 放大整形某些待测信号通过第一级放大后,进入第二级放大限幅电路。LM318是高数运放,工作电压5-20V,输入带宽15MHZ,足够解决高频信号。放大倍数:n=RL2/RL1(RL2用50K,RL1用10K)。限幅原理:限幅电路稳压管跨接在集成运放输出端和反相输入端之间。假设稳压管截止,则集成运放必然工作在开环状态,输出电压不是+UOM,就是-UOM。这样,必将导致稳压管击穿而工作在稳压状态,DZ构成负反馈通路,使反相输入端为“虚地”,限流电阻上电流iR等于稳压管电流iZ,输出电压u O=UZ。 图4放大电路四、软件设计1测频发
8、所谓“频率”,就是周期性信号在单位时间(1s)内变化次数。若在一定期间间隔T内测得这个周期性信号重复变化次数N,则其频率可表达为f=N/T右图其中脉冲形成电路作用是将被测信号变成脉冲信号,其重复频率等于被测频率fx。时间基准信号发生器 提供原则时间脉冲信号,若其周期为1s, 图 5测频原理 则门控电路输出信号持续时间亦精确地等于1s。闸门电路由原则秒信号进行控制,当秒信号来届时,闸门开通,被测脉冲信号通过闸门送到计数译码显示电路。秒信号结束时闸门关闭,计数器停止计数。2测周法重要是运用单片机定期器计时,测量2个时间参数t1和t2,即如下所示: 图6测周法计算信号一种波形周期 t=t1+t2 则
9、可以求出频率f=1/t。3.主程序流程图设计 开始采集频率(1s内)频率转换十进制转换数码管显示自动测频测周测周期P34=0P36=0P35=0测频率那个按键按下 图7流程图4.程序设计#include #include sbit smgdl=P26;sbit smgwl=P27;bit LED = P33;sbit key1 = P34;/定义按键1sbit key2 = P35;/定义按键2sbit key3 = P36;/定义按键3sbit key4 = P37;/定义按键4unsigned char value,smg;/保存按键接口状态unsigned char lkey,key_t
10、ime;unsigned char mode=0;unsigned int time=0;unsigned char num=0;unsigned char key=0;unsigned char time_key=0;unsigned int flag_f=0;unsigned int f_temp1=0;unsigned int f_temp2=0;unsigned int t_temp1=0;unsigned int t_temp2=0;unsigned char flag_int_0=0;/*/ unsigned char tablewe=0xfe,0xfd,0xfb,0xf7,0xe
11、f,0xdf; unsigned char tabledu=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; unsigned char su=0,0,0,0,0,0,0,0;/*/*DIS_LED*/void delay(unsigned int a)/延时函数 unsigned int b; unsigned char c; for(b=a;a0;a-) for(c=100;c0;c-);void display_smg(unsigned char smg,unsigned ch
12、ar value)/显示函数 smgwl=1; P0=tablewesmg; smgwl=0; smgdl=1; P0=tableduvalue; smgdl=0; delay(6);/延长显示时间 避开视觉暂留 看数码管显示过程/*按键功能*unsigned char ReadKey(void)if(key1 = 0) key_time+;if(key_time = 20) lkey = 1;mode=1;if(key_time 20)key_time = 100;else if(key2 = 0) key_time+;if(key_time = 20) lkey = 2;mode=2;if
13、(key_time 20)key_time = 100;else if(key3 = 0) key_time+;if(key_time = 20) lkey = 3;mode=3;if(key_time 20)key_time = 100;else key_time = 0;return lkey;void main() unsigned char k;TMOD = 0x01; /定期器初始化TH0 = (65536 - ) / 256;TL0 = (65536 - ) % 256;/EA = 1;ET0 = 1;TR0 = 1;/PT0 = 1;/EX0 = 1; /外部中断初始化IT0 =
14、 1;EA = 1;while(1) display_smg(0,su2);/数码管显示 display_smg(1,su3);/数码管显示 display_smg(2,su4);/数码管显示 display_smg(3,su5);/数码管显示 display_smg(4,su6);/数码管显示 display_smg(5,su7);/数码管显示 k = ReadKey();LED = LED;/脉冲发生void time_1() interrupt 1TH0 = (65536 - 1000) / 256;/定期器初始化TL0 = (65536 - 1000) % 256;time+;if(t
15、ime = 500) time = 0;num+;if(num = 10) num=0;if(mode = 1) /测频法模式 EX0 = 1;/外部中断打开 IT0 = 1; flag_f+; if(flag_f = 600)/1S钟计时 flag_f = 0; mode = 0; EX0 = 0; su2 = f_temp2; su3 = f_temp1 / 10000; su4 = f_temp1 / 1000 % 10; su5 = f_temp1 / 100 % 10; su6 = f_temp1 / 10 % 10; su7 = f_temp1 % 10; ; f_temp1 =
16、f_temp2 = 0; if(mode = 2)/测周法模式 EX0 = 1;/外部中断打开 IT0 = 0; PX0 = 1; if(flag_int_0 = 1) EX0 = 0; mode = 0; flag_int_0 = 0; TR1 = 0; t_temp1 = TL1; t_temp2 = TH1; t_temp2 = t_temp2 * 256; t_temp1 = t_temp1 + t_temp2;/ su2 = t_temp2 / 100; su3 = t_temp1 / 10000; su4 = t_temp1 / 1000 % 10; su5 = t_temp1 /
17、 100 % 10; su6 = t_temp1 / 10 % 10; su7 = t_temp1 % 10; TH1 = 0; TL1 = 0; if(mode = 3) /自动测频测周 EX0 = 1;/外部中断打开 IT0 = 1; flag_f+; if(flag_f = 600)/1S钟计时 flag_f = 0; EX0 = 0; if(f_temp1 110) mode = 2; if(f_temp1 = 50000) f_temp1 = 50000;f_temp2+;if(f_temp2 = 5000) f_temp1 = f_temp2 = 0;EX0 = 1;if(mode
18、 = 2) TR1 = 1;flag_int_0 = 1; 五、结论与心得这次为期两周课程设计让我受益匪浅。此前只是对单片机更多只是某些感性,理论上结识,自己真正动手时候,才真正理解到其中精华所在。 频率计设计让我更好理解如何应用单片机定期器计数器模块,其中最重要是分析问题解决问题能力,在我看来,无论是在节约硬件资源,还是提高数据精确度来看,都需要下某些功夫把它做到最佳。 感谢廖亦凡博士在此寒冷天气每天指引咱们单片机设计,是您经验协助我解决诸多技术上难题。六、参照文献【1】 杨恢先 黄辉先 单片机原理及应用人民邮电出版社【2】 大能 南光群 刘金华 单片机课程设计指引书 北京理工大学【3】 谭浩强 C语言程序设计第二版 清华大学教师评语及设计成绩教师评语:课程设计成绩:指引教师:(签名)日期:年月日