频率计的设计报告(含详细原理_流程图_c语言程序_proteus图等)

上传人:飞*** 文档编号:43466994 上传时间:2018-06-06 格式:DOCX 页数:13 大小:87.98KB
返回 下载 相关 举报
频率计的设计报告(含详细原理_流程图_c语言程序_proteus图等)_第1页
第1页 / 共13页
频率计的设计报告(含详细原理_流程图_c语言程序_proteus图等)_第2页
第2页 / 共13页
频率计的设计报告(含详细原理_流程图_c语言程序_proteus图等)_第3页
第3页 / 共13页
频率计的设计报告(含详细原理_流程图_c语言程序_proteus图等)_第4页
第4页 / 共13页
频率计的设计报告(含详细原理_流程图_c语言程序_proteus图等)_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《频率计的设计报告(含详细原理_流程图_c语言程序_proteus图等)》由会员分享,可在线阅读,更多相关《频率计的设计报告(含详细原理_流程图_c语言程序_proteus图等)(13页珍藏版)》请在金锄头文库上搜索。

1、学校名称:合肥工业大学队员姓名:田中贺,汤旭,梁植程,黄传帮,杨骜,刘伟,王佩,徐国瑞,周冀,王槐铭,贾根发,陈明,林仁斌,张卫强2012 年 7 月 10 日基于基于 52 单片机的频率计单片机的频率计摘要摘要:以 ATMEL 单片机为核心,利用单片机的外部中断、定时器的计数模式和定时器的功能对信号发生器产生的脉冲频率进行计数。且可以根据频率的不同,单片机控制选择测周法或者测频法对产生的脉冲波形进行计数,以进行更加精确的频率测量。而且可以通过按键来进行频率测量方法的选择。关键字关键字:AT89s52,外部中断、定时器的计数模式和定时器,测周法、测频法。设计题目及要求:设计题目及要求:(1):

2、被测频率 fx 小于 110Hz 采用测周法,显示频率 XXX。XXX;fx 大于 110Hz 采用测频 法,显示频率 XXXXXX; (2):可利用键盘分段测量和自动分段测量; (3):可完成单脉冲测量,输入脉冲宽度范围是 100 微秒-0.1 秒; (4):自由发挥其他功能. (5):要求有单片机硬件系统框图,电路原理图,软件流程图一、一、 原理:原理:1 1 基本设计原理基本设计原理运用单片机 TO,T1 计数功能来完成对输入信号的计数。其 T1 为 计数器,T1 为计时器。为 T1 装入初值 19466,定时 300ms,重复 20 次即为 1s,与此同时将同时计 数的 T0 里的值取

3、出,即为该频率信号 1s 的频率示数2 2 系统主要功能系统主要功能利用单片机的 T0,T1 计数定时器功能,来完成对输入信号进行率计数,计数 结果通过 8 位动态数码管显示出来, 。 特点 1,由开关控制启动。特点 2,可利用键盘分段测量和自动分段测量;特点 3,可以多次测量,自动刷新 1s 一次。特点 4,使用溢出标志 T0count,防止 20ms 内计数超过 65536 次的频率信号溢出 造成的示数错误3.3.系统原理框图:系统原理框图:二频率计的硬件结构设计二频率计的硬件结构设计1 1 单元电路单元电路(1)单片机电路:(2)矩阵键盘(3)数码管显示(4)排阻(用于提高 P0 口电位

4、)(5)模拟的信号发生器:2三系统工作三系统工作原理原理选择 AT89S52 单片机芯片,选用两位 8 段共阴极 LED 数码管实现频率显示,利用 8279 作 I/O 口扩展,连接数码管。通过定时器 1 计时方式,定时器 0 计数方式, 定时每秒钟对外部频率计数,把计数值在数码管上显示四、软件设计软件设计1 1 程序流程图程序流程图开始采集频率(1s 内)频率转换十进制转换数码管显示YN键盘控制选 模式择2 2程序设计:程序设计:/* *器件名:频率器; *设计要求 1:被测频率 fx 小于 110Hz 采用测周法,显示频率 XXX。XXX;fx 大于 110Hz 采用测频法,显示频率 XX

5、XXXX; *设计要求 2:可利用键盘分段测量和自动分段测量;键盘AT89S52数码管信号发生器*设计要求 3:可完成单脉冲测量,输入脉冲宽度范围是 100 微秒-0.1 秒; *设计要求 4:自由发挥其他功能. *设计要求 5:要求有单片机硬件系统框图,电路原理图,软件流程图。*功能说明:频率计,利用 T0 计数模式测频率 *接线说明:P2 控制位选,P1 控制段选 */ #include #define S P2 #define uchar unsigned char #define uint unsigned int uint temp0,temp1,m,n,k,wei,num,t; u

6、nsigned long int temp; unsigned long int count; uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6D,0x7D,0x07,0x7f,0x6f,0x00; /共阳 数码管/*延时*/ void delay(unsigned char delaytime) while(delaytime-); /*数码管显示函数*/ void display() S=0xfe;delay(5);P1=tabletemp1/1000;delay(500); S=0xfd;delay(5);P1=tabletemp1/100%10

7、;delay(500); S=0xfb;delay(5);P1=tabletemp1/10%10;delay(500); S=0xf7;delay(5);P1=tabletemp1%10;delay(500); S=0xef;delay(5);P1=tabletemp0/1000;delay(500); S=0xdf;delay(5);P1=tabletemp0/100%10;delay(500); S=0xbf;delay(5);P1=tabletemp0/10%10;delay(500); S=0x7f;delay(5);P1=tabletemp0%10;delay(500); /*数码管

8、显示函数 1*/ void display1() S=0xfe;delay(5);P1=0x40;delay(500);S=0xfd;delay(5);P1=0x40;delay(500);S=0xfb;delay(5);P1=0x40;delay(500);S=0xf7;delay(5);P1=0x40;delay(500); S=0xef;delay(5);P1=0x40;delay(500);S=0xdf;delay(5);P1=0x40;delay(500);S=0xbf;delay(5);P1=0x40;delay(500);S=0x7f;delay(5);P1=0x40;delay

9、(500); /-初始化-/void inital() TMOD=0x15;/字节寻址,00010101,T1 16 位定时器(T0、T1 定时模式,对内 部机器周期计数) ,T0 16 位计数器 (T0、T1 计数模式,对外部脉冲计数) TH1=(65535-1000)/256; /C/T 置 0 则用作定时器(从内部系统时钟输入) ,置 1 则用作计数器(从 T0/P34 脚输入) TL1=(65535-1000)%256; /C/T 置 0 则用作定时器(从内部系统时钟输入) ,置 1 则用作计数器(从 T0/P35 脚输入) TH0=0; TL0=0;ET1=1; /开启定时器 1 中

10、断,中断允许标志位 TR1=1; / 开启定时器 1,中断运行控制位 ET0=1; /开启定时器/计数器 0 中断,中断允许标志位 TR0=1; / 开启定时器/计数器 0,中断运行控制位 IT0=1; /边沿触发方式 EX0=0; /外部中断 0 允许位EA=1;/开启 CPU 中断 /-键盘扫描-/ void keyscan() P0=0xfe; /检测第一行 temp=P0; temp=temp while(temp!=0xf0) /初始列置高电平,行置底电平 delay(5);/消抖 temp=P0; temp=temp while(temp!=0xf0) /确认按键按下 temp=P

11、1;switch(temp) case 0xee:num=7; break; case 0xde:num=8; break; case 0xbe:num=9; break; case 0x7e: break; while(temp!=0xf0) temp=P0;/检验是否释放 temp=temp P0=0xfd; /检测第二行 temp=P0; temp=temp while(temp!=0xf0) delay(5); temp=P0; temp=temp while(temp!=0xf0) temp=P0; switch(temp) case 0xed:num=4; break; case

12、0xdd:num=5; break; case 0xbd:num=6; break; case 0x7d: break; while(temp!=0xf0) temp=P0; temp=temp P0=0xfb; /检测第三行 temp=P0; temp=temp while(temp!=0xf0) delay(5); temp=P0; temp=temp while(temp!=0xf0) temp=P0; switch(temp) case 0xeb:num=1; break; case 0xdb:num=2; break; case 0xbb:num=3; break; case 0x7

13、b: break; while(temp!=0xf0) temp=P0; temp=temp P0=0xf7; /检测第四行 temp=P0; temp=temp while(temp!=0xf0) delay(5); temp=P0; temp=temp while(temp!=0xf0) temp=P0; switch(temp) case 0xe7: break; case 0xd7:num=0; break; case 0xb7: break; case 0x77: break; while(temp!=0xf0) temp=P0; temp=temp void main() init

14、al(); while(1) keyscan(); if(num=2 TR1=1; TR0=1; count=0; if(num=1)/测周法 EX0=1; TR0=0; display(); /-测周法-/void exter0() interrupt 0 n+; if(n=1) /开始计时 TH1=(65535-1000)/256; TL1=(65535-1000)%256; TR1=1; if(n=2) /停止计时 TR1=0; temp=1000/(count+1); temp1=temp/10000; temp0=temp%10000; t+; if(temp0111 display1();t=0; count=0; n=0; /-计数-/ void count0() interrupt 1 m+; TH0=0; TL0=0; /-定时-/ void timer1() interrupt 3 TH1=(65535-50000)/256; TL1=(65535-50000)%256; if(num=1|num=2) count+;if(num=1) /测周法 TH1=(65535-1000)/256;TL1=(65535-1000)%256;k+ ;i

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号