简易数字频率计的设计.docx
- 文档编号:7308779
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:21
- 大小:318.79KB
简易数字频率计的设计.docx
《简易数字频率计的设计.docx》由会员分享,可在线阅读,更多相关《简易数字频率计的设计.docx(21页珍藏版)》请在冰豆网上搜索。
简易数字频率计的设计
摘要
本文对基于单片机的数字频率计系统进行了研究。
首先在绪论中介绍了本课题的课题背景、研究意义及完成的功能。
本系统是以单片机的基本语言C语言来进行软件设计,51的编程语言常用的有二种,一种是汇编语言,一种是C语言。
汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而C语言在大多数情况下其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,而且C语言还可以嵌入汇编来解决高时效性的代码编写问题。
综合以上C语言的优点,我在编写本系统程序时选择了C语言。
正文中首先介绍了系统的总体设计思路,然后简单描述系统硬件工作原理,且附以系统硬件设计框图;接着具体描述了系统的软、硬件设计,仿真结果,误差分析;最后对本次设计做出了简单的总结、并且提出一些教学建议,文档还附上了本次系统设计的电路原理图、PCB图及元器件清单。
本文撰写的主导思想是软、硬件相结合,以硬件为基础,来进行各功能模块的编写。
关键词:
单片机;编程;系统设计
ABSTRACT
Inthispaper,basedonsinglechipdigitalfrequencymetersystemswerestudied.
Firstdescribedintheintroductionthesubjectofthistopicbackground,researchsignificanceandcompletefunctions.ThesystemisbasedonSCM'sbasiclanguageClanguageforsoftwaredesign,programminglanguagecommonlyusedin51therearetwo,oneisinassemblylanguage,oneistheClanguage.Assemblylanguagecodegenerationhighlyefficientmachinereadable,buttheyarenotstrong,complexprocessthatisevenmoredifficulttoread,whiletheClanguage,inmostcases,theefficiencyofitsmachinecodegenerationandassemblylanguageequivalent,butreadableandportabilityisfarmorethanassemblylanguage,butcanalsobeembeddedinClanguagecompilationtosolvethetime-sensitivenatureofcodingproblems.TosumuptheadvantagesofClanguage,IaminthepreparationofthesystemselectedClanguageprogram.Firstintroducedthesysteminthebodyoftheoveralldesignidea,andthenabriefdescriptionofsystemhardwareworks,andattachedtothesystemhardwaredesignblockdiagram;thenspecificallydescribesthesystem'ssoftwareandhardwaredesign,simulationresults,erroranalysis;Finally,tomakethisdesignasimplesummary,andsometeachingsuggestions,thedocumentisalsoattachedtothissub-systemdesign,circuitschematics,PCBdrawingsandpartslists.
Thisarticlewrittenbytheleadingideaisthathardwareandsoftwarecombinedwithhardware-based,tothepreparationofvariousfunctionalmodules.
Keywords:
microcontroller;programming;systemdesign
目录
1设计课题任务、功能要求说明及总体方案介绍4
1.1设计课题任务4
1.2功能要求说明4
1.3设计课题总体方案介绍及工作原理说明4
2设计课题硬件系统的设计6
2.1设计课题硬件系统各模块功能简要介绍6
2.2设计课题电路原理图、PCB图、元器件布局6
2.3设计课题元器件清单6
3设计课题软件系统的设计7
3.1设计课题使用单片机资源的情况7
3.2设计课题软件系统各模块功能简要介绍7
3.3设计课题软件系统程序流程框图8
3.4设计课题软件系统程序清单9
4设计结论、仿真结果、误差分析、教学建议15
4.1设计课题的设计结论及使用说明15
4.2设计课题的仿真结果15
4.3设计课题的误差分析17
4.4设计体会17
4.5教学建议17
参考文献18
鸣谢19
附录1:
元器件清单20
附录2:
电路原理图21
附录3:
元器件布局图22
附录4:
PCB图23
1设计课题任务、功能要求说明及总体方案介绍
1.1课题设计任务
设计一个能够测量矩形波信号的频率、周期、脉宽、占空比的频率计。
该频率计上电或按键复位后能自动显示系统提示符“P.”,进入测量准备状态。
按频率测量键则测量频率;按周期测量键则测量周期;按脉宽测量键则测量脉宽;按占空比测量键则测量占空比。
1.2功能要求说明
该数字频率计频率以单片机最小系统为基础,采用独立式键盘及动态显示结构组成。
四个键(分别接于P1.0~P1.3)控制测量,按A键(接P1.0)测频率、按B键(接P1.1)测周期,按C键(接P1.2)测脉宽,按D键(接P1.3)测占空比。
1.3设计课题总体方案介绍及工作原理说明
本设计通过单片机内部定时器0定时1秒,同时被测矩形波输入P3.5(T1)通过计数器1对其进行计数,定时时间一到即可测得矩形波的频率,通过计算频率的倒数即可得到周期。
同时被测矩形波通过P3.3(INT1)输入单片机,利用此矩形波启停定时器1,即可测得矩形波的脉宽。
最后通过周期和脉宽可得占空比,系统总体电路框图如图1.1所示:
图1.1系统整体框图
系统工作原理如下:
此数字频率计是利用单片机的P3.3(INT1)和P3.5(T1)同时作为被测矩形波信号输入端,且单片机晶振采用12MHZ。
当按1键时测频率,被测矩形波信号从P3.5进入单片机,此时同时启动定时器0和计数器1,定时器0一次定时50ms、定时20次,当定时1s一到立即停止定时计数器,因为晶振为12MHZ,所以此时计数器的计数值即为被测信号的频率;当按2键时测周期,此时先测得被测信号的频率,然后通过T=1/F可求得被测信号的周期;当按3键时,被测矩形波信号从P3.3(INT1)输入单片机,此时通过被测信号启停定时器1来实现测脉宽,即当被测矩形波为高电平时定时器1启动开始定时,当被测信号一从高电平变为低电平定时器1停止定时,读出定时器的定时值,此值即为被测信号的脉宽;按4键时,先测出被测矩形波信号的周期和脉宽,然后通过占空比等于脉宽比上周期即可得到信号的占空比。
当按键测得相应的数据之后,先对数进行按位处理后再送数码管显示。
2设计课题硬件系统的设计
2.1设计课题硬件系统各模块功能简要介绍
复位电路:
用于产生复位信号,通过RST引脚送入单片机,进行复位操作。
复位电路的好坏直接影响单片机系统工作的可靠性,单片机的复位电路共有上电复位、按键复位和脉冲复位3种,在本次设计中采用按键复位电路,此电路即可实现按键复位,还可以实现上电复位。
其中上电复位是利用电容充放电来实现的,按键复位则是通过使复位端经电阻与Vcc电源接通来实现的。
振荡电路:
单片机本身是一个复杂的同步时序系统,为了确保同步工作方式的实现,单片机必须有时钟信号,以使其系统在时钟信号的控制下按时序协调工作。
晶振频率时单片机的一项重要技术指标,晶振频率越高,系统的时钟频率就越高,单片机的运行速度也就越快,本次设计所用的晶振频率为12MHZ。
按键电路:
单片机的P1.0、P1.1、P1.2、P1.3分别接按键1、2、3、4。
分别用以实现测矩形波的频率、周期、脉宽、占空比,当没键按下时P1.0~P1.3为高电平,有键按下时则为低电平。
在实物制作时因为P1口内部已经集成了上拉电阻,所以下图中的四个电阻可以省略。
显示电路:
本次设计显示器采用动态显示方式,用以实现测量值的现实。
驱动电路:
用以驱动数码管。
+
2.2设计课题电路原理图、PCB图、元器件布局图
本设计的电路原理图、PCB图及元器件布局图分别如附录1~3所示。
2.3设计课题元器件清单
元器件清单如附录4所示。
3设计课题软件系统的设计
3.1设计课题使用单片机资源的情况
定时/计数器的使用:
测矩形波频率时使用到了定时/计数器0和定时/计数器1,以及使了定时0中断和计数1中断。
测脉宽时使用到了定时/计数器1和计数1中断。
单片机I/O口的使用:
P0口作为数码管的段控码输入端使用;P1口的高4位作为独立式键盘的输入端使用;P2口作为数码管的位控码输入端使用;P3.3和P3.5作为被测矩形波信号的输入端使用。
3.2设计课题软件系统各模块功能简要介绍
系统的软件模块框图如图3.1所示:
有键按下
1、2键按下3、4键按下
图3.1系统软件模块框图
各模块功能如下:
1、主程序模块:
启动显示“P.”,等键按下。
2、显示模块1:
显示“P.”。
3、键功能模块:
判断那一键按下,然后去执行相应的程序。
4、测频程序模块:
测矩形波信号的频率和间接测其周期。
5、测脉宽程序段:
测矩形波信号的脉宽,并间接测信号的占空比。
6、显示模块2:
显示测得的频率、周期、脉宽值。
7、显示模块3:
显示小数点。
8、显示模块4:
显示占空比值。
9、延时模块:
用于各位显示间的延时。
3.3设计课题软件系统程序流程框图
本次设计的几个主要程序流程图如图3.2、3.3、3.4所示:
图3.2测频子程序流程图图3.3测脉宽程序流程图
图3.4系统程序主程序流程图
3.4设计课题软件系统程序清单
数字频率计程序清单:
#include
#include
#defineucharunsignedchar
#defineulongunsignedlong
#defineuintunsignedint
uchardataled[7];
ucharcodeledw[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
ucharcodeledd[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,0x80,0x90,0x7f,0x0c,0x81,0x86,0xa1,0xc6};
sbitP3_3=P3^3;
sbitP1_0=P1^0;
sbitP1_1=P1^1;
sbitP1_2=P1^2;
sbitP1_3=P1^3;
ucharcount;
ulongl,m,mk;
voiddelay(uintt)
{
uinti;
for(i=0;i } voidtime_0()interrupt1using1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; count++; if(count==20) {TR1=0; TR0=0; count=0; } } voidjishu_1()interrupt3using2 { m++; TH1=0; TL1=0; } ulongpinglv() { TMOD=0x51; EA=1; ET0=1; ET1=1; m=0; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=0; TL1=0; TR0=1; TR1=1; while(TR0==1); l=m*65536+TH1*256+TL1; } longmaikuan() { TMOD=0x90; EA=1; ET1=1; IT1=1; TH1=0; TL1=0; m=0; TR1=1; while(P3_3==1); while(P3_3==0); TR1=1; while(P3_3==1); TR1=0; return((m*65536+TH1*256+TL1)); } voidxianshi() { uchark; uinti; for(k=0;k<8;k++) { P2=ledw[k]; i=led[k]; P0=ledd[i]; delay(10); } } voidxianshi2(void) {uchark,i; led[7]=11; for(k=7;k<8;k++) { P2=ledw[k]; i=led[k]; P0=ledd[i]; delay(10); } } voidkeyscan() { if(P1_0==0) { delay(1250); if(P1_0==0) { while(P1_0==0); pinglv(); led[0]=l%10; led[1]=(l/10)%10; led[2]=(l/100)%10; led[3]=(l/1000)%10; led[4]=(l/10000)%10; led[5]=(l/100000)%10; led[6]=(l/1000000)%10; led[7]=12; xianshi(); } } if(P1_1==0) { delay(1250); if(P1_1==0) { while(P1_1==0); pinglv(); if(l! =0) l=1000000/l; led[0]=l%10; led[1]=(l/10)%10; led[2]=(l/100)%10; led[3]=(l/1000)%10; led[4]=(l/10000)%10; led[5]=(l/100000)%10; led[6]=(l/1000000)%10; led[7]=13; xianshi(); } } if(P1_2==0) { delay(1250); if(P1_2==0) { while(P1_2==0); l=maikuan(); led[0]=l%10; led[1]=(l/10)%10; led[2]=(l/100)%10; led[3]=(l/1000)%10; led[4]=(l/10000)%10; led[5]=(l/100000)%10; led[6]=(l/1000000)%10; led[7]=14; xianshi();} } if(P1_3==0) { delay(1250); if(P1_3==0) { while(P1_3==0); pinglv(); if(l! =0) l=1000000/l; mk=maikuan(); l=mk*100/l; led[0]=l%10; led[1]=(l/10)%10; led[2]=(l/100)%10; led[3]=(l/1000)%10; led[4]=(l/10000)%10; led[5]=(l/100000)%10; led[6]=(l/1000000)%10; led[3]=15; xianshi();} } } voidmain() { xianshi2(); while((P1&0x0f)==0x0f); while (1) { keyscan(); xianshi();} } 4设计结论、仿真结果、误差分析、教学建议 4.1设计课题的设计结论及使用说明 本次设计的数字频率计达到了设计前的预期要求,即测量矩形波信号的频率、周期、脉宽和占空比。 数字频率计功能如下: 按下键1(P1.0)可测得被测信号的频率。 按下键2(P1.1)可测得被测信号的周期。 按下键3(P1.2)可测得被测信号的脉宽。 按下键4(P1.3)可测得被测信号的占空比。 4.2设计课题的仿真结果 当输入矩形波频率为1Hz时,启动仿真,数码管显示如图4.1所示,按下键1测得频率如图4.2所示,按下键2测得周期如图4.3所示,按下键3测得脉宽如图4.4所示,按下键4测得占空比如图4.5所示。 图4.1数码管上电显示结果 图4.2测频显示结果 图4.3测周期显示结果 图4.4测带宽显示结果 图4.5测占空比显示结果 4.3设计课题的误差分析 本次设计的数字频率计的主要误差来自于: 当启动定时计数器时,此时被测信号处于什么状态。 当测频时启动定时计数器时,若从T1(P3.5)输入的正弦波刚好为高电平,而当1s定时到时刚好为高电平到时,此时测得的频率值最准确。 若启动定时计数器时,输入得矩形波刚好处于低电平,而当定时1s到时矩形波刚好要发生负跳变时,此时测得的频率误差最大。 而且频率越大误差也越大。 要想避免以上的测量误差,方法是通过程序设计多次测量再求平均值来避免。 4.4设计体会 通过本次课程设计-数字频率计的设计,进一步巩固了单片机软硬件的基础知识,在设计中真正的体会到了用汇编语言和C语言编程各自的优缺点,其中汇编语言编程变量存放地址清晰,条理清晰,但是程序设计起来较为繁琐,大型,往往简单的一个逻辑关系要用几条语句才能表达清楚。 而C语言程序设计的话程序设计起来较为简单,逻辑关系比较清晰,但是变量存放的地方不知道,而且变量的类型也需要自己设定,往往再设计中会因为变量定义错误而得不出结果。 同时在绘制PCB图时特别要注意各个参数的设置,如电线的大小、焊盘和过孔的大小,这些参数的好坏会直接影响电路板的成功率。 同时也要注意转印纸的印制和电路板的泡制。 通过本次课程设计掌握了较为复杂的系统的C语言程序的编写,同时也使自己在文档处理能力和电路板的制作技术上更加的成熟和完美。 4.5教学建议 在这儿提一点关于单片机这门课程教学建议: 我认为老师在讲单片机的基础知识的同时应该多讲一点单片机程序实例,这样的话同学们学起来也会更加的有动力,有时候仅仅只讲一些程序的编程思路即可,然后让同学们自己课后思考后作为作业交上来。 在硬件方面的话: 我认为也应该适当的布置一些电路图的绘制,必要的话把电路板也制作出来,这样的话能大大加强同学们的动手能力。 参考文献 [1]李广弟,朱月秀,冷祖祁.单片机基础(第3版).北京: 北京航天大学出版社,2007年6月. [2]清源计算机工作室.Protel99SE原理图与PCB及仿真.北京: 机械工业出版社出版,2007年8月. [3]马忠梅,籍顺心,张凯,马岩(第4版).北京: 北京航天大学出版社,2007年2月. 致谢 感谢在这此设计中给予我帮助的同学和朋友,特别是我们的指导老师-王韧老师。 在此,向认真审阅和提出很好的建议的老师表示衷心的感谢,向那些支持和关心我的同学和朋友表示感谢。 向在硬件几软件上给予支持的湖南工学院电气与信息工程系表示衷心感谢。 向那些默默工作在教育一线的湖南工学院全体老师表示衷心的感谢。 附录1 元器件清单 元件名称 流水号 型号/参数 数量/个 备注/封装 陶瓷电容 C1001~C1002 30pF 2 RAD-0.2 电解电容 C1000 22uF 1 RB-.2/.4 4位一体共阳数码管 LED0、LED1 8段数码管 2 LED12 电阻 R1001 1K 10 AXIAL-0.4 电阻 R1011~R1018 4.7K 8 AXIAL-0.4 电阻 R1002~R1009 300 8 AXIAL-0.4 电阻 R1000 200 1 AXIAL-0.4 电阻 R1010 330 1 AXIAL-0.4 晶振 Y1000 12MHZ 1 XTAL-1 PNP型三极管 Q1000~Q1007 PNP 8 TO-5 排针 JP1000~JP1003 4 SIP-8 排阻 JP1004 10K 1 SIP-9 USB电源插槽 U1001 1 USB 发光二极管 D1000 1 DIODE-0.4 按键 S1000~S1004 5 SW-2 开关 S1005 1 SW-DIP3 下载口 U1002 1 XZK 40脚底座 2 DIP-40 铜柱 4 附录2 电路原理图 附录3 元器件布局图 附录4 PCB图 底层 顶层
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 数字频率计 设计