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作为键盘设置
7、端口(3)P33作为被测信号输入端口(4)P34被测信号接收端 图3单片机最小系统4. 放大整形部分待测信号经过第一级放大后,进入第二级放大限幅电路。LM318是高数运放,工作电压5-20V,输入带宽15MHZ,足够处理高频信号。放大倍数:n=RL2/RL1(RL2用50K,RL1用10K)。限幅原理:限幅电路稳压管跨接在集成运放输出端和反相输入端之间。假设稳压管截止,则集成运放肯定工作在开环状态,输出电压不是+UOM,就是-UOM。这么,必将造成稳压管击穿而工作在稳压状态,DZ组成负反馈通路,使反相输入端为“虚地”,限流电阻上电流iR等于稳压管电流iZ,输出电压u O=UZ。 图4放大电路四
8、、软件设计1测频发 所谓“频率”,就是周期性信号在单位时间(1s)内改变次数。若在一定时间间隔T内测得这个周期性信号反复改变次数N,则其频率可表示为f=N/T右图其中脉冲形成电路作用是将被测信号变成脉冲信号,其反复频率等于被测频率fx。时间基准信号发生器 提供标准时间脉冲信号,若其周期为1s, 图 5测频原理 则门控电路输出信号连续时间亦正确地等于1s。闸门电路由标准秒信号进行控制,当秒信号来到时,闸门开通,被测脉冲信号经过闸门送到计数译码显示电路。秒信号结束时闸门关闭,计数器停止计数。2测周法关键是利用单片机定时器计时,测量2个时间参数t1和t2,即以下所表示: 图6测周法计算信号一个波形周
9、期 t=t1+t2 则能够求出频率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
10、 lkey,key_time;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,0x
11、fb,0xf7,0xef,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,
12、unsigned char 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 =
13、2;mode=2;if(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; /外
14、部中止初始化IT0 = 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)
15、 % 256;time+;if(time = 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
16、% 10; ; f_temp1 = 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 %
17、10; su5 = t_temp1 / 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
18、 = 0;EX0 = 1;if(mode = 2) TR1 = 1;flag_int_0 = 1; 五、结论和心得这次为期两周课程设计让我受益匪浅。以前只是对单片机更多只是部分感性,理论上认识,自己真正动手时候,才真正了解到其中精华所在。 频率计设计让我愈加好了解怎样应用单片机定时器计数器模块,其中最关键是分析问题处理问题能力,在我看来,不管是在节省硬件资源,还是提升数据正确度来看,全部需要下部分功夫把它做到最好。 感谢廖亦凡博士在此严寒天气天天指导我们单片机设计,是您经验帮助我处理很多技术上难题。六、参考文件【1】 杨恢先 黄辉先 单片机原理及应用人民邮电出版社【2】 大能 南光群 刘金华 单片机课程设计指导书 北京理工大学【3】 谭浩强 C语言程序设计第二版 清华大学老师评语及设计成绩老师评语:课程设计成绩:指导老师:(署名)日期:年月日