频率计实验报告.docx
- 文档编号:5905863
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:14
- 大小:66.35KB
频率计实验报告.docx
《频率计实验报告.docx》由会员分享,可在线阅读,更多相关《频率计实验报告.docx(14页珍藏版)》请在冰豆网上搜索。
频率计实验报告
频率计实验报告
一、实验目的
掌握单片机、数字译码和显示单元的组成和工作原理
学习及演示任务,增强劝阻实验创新能力
二、实验要求
1、被测频率fx小于110Hz采用测周法,显示频率XXX。
XXX;fx大于110Hz采用测频法,显示频率XXXXXX;
2、可利用键盘分段测量和自动分段测量;
3、可完成单脉冲测量,输入脉冲宽度范围是100微秒--0.1秒;三、设计目的
三、基本原理
所谓“频率”,就是周期性信号在单位时间(1s)内变化的次数。
若在一定的时间间隔T内测得这个周期性信号的重复变化次数N,则其频率可表示为f=T/N。
其中脉冲形成电路的作用是将被测信号变成脉冲信号。
其重复频率等于被测频率f,时间基准信号发生器提供基准的时间脉冲信号。
若其周期为1S,则门控电路的输出信号持续时间也等于1S,门闸电路由标准秒信号进行控制。
当秒信号来到时,门闸开通,被测脉冲信号通过闸门送到计数译码显示电路。
秒信号结束时,门闸关断。
计数器停止计数,由于计数器计得的脉冲数N是在1S时间内的累计数,所以被测频率等于NNZ。
四,实验设计分析
使用数码管显示控制最简单,根据设计要求显示格式XXXX。
可以准确的显示频率大小,又由于数码管简单便宜且满足设计要求,所以选着数码管显示比较合理。
选择AT89C51作为单片机芯片,选用两位8段共阴极LED数码管实现频率显示,利用8279作I/O口扩展,连接数码管和键盘。
通过定时器1计时方式,定时器0计数方式,定时每秒钟对外部频率计数,单片机的时钟一般需要多相时钟,所以时钟电路由振荡器和分频器组成。
AT89C51内部有一个用于构成振荡器的可控高增益反向放大器。
两个引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
在片外跨接一晶振和两个匹配电容C1、C2如图4.3所示,就构成一个自激振荡器。
振荡频率根据实际要求的工作速度,从几百千赫至24MHz可适当选取某一频率。
匹配电容C1、C2要根据石英晶体振荡器的要求选取。
当晶振频率为12MHz时,C1C2一般选30pF左右。
上述电路是靠AT89C51单片机内部电路产生振荡的。
也可以由外部振荡器或时钟直接驱动AT89C51。
本设计采用内部电路产生振荡。
系统原理框图
选择AT89C51作为单片机芯片,选用两位8段共阴极LED数码管实现频率显示,利用8279作I/O口扩展,连接数码管和键盘。
通过定时器1计时方式,定时器0计数方式,定时每秒钟对外部频率计数,把计数值通过8279芯片在数码管上显示。
如图4.1所示。
四位位数码管
时钟电路和复位电路
1.时钟电路
单片机的时钟一般需要多相时钟,所以时钟电路由振荡器和分频器组成。
AT89s52内部有一个用于构成振荡器的可控高增益反向放大器。
两个引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
在片外跨接一晶振和两个匹配电容C1、C2如图4.3所示,就构成一个自激振荡器。
振荡频率根据实际要求的工作速度,从几百千赫至24MHz可适当选取某一频率。
匹配电容C1、C2要根据石英晶体振荡器的要求选取。
当晶振频率为12MHz时,C1C2一般选30pF左右。
上述电路是靠AT89s52单片机内部电路产生振荡的。
也可以由外部振荡器或时钟直接驱动AT89s52。
本设计采用内部电路产生振荡。
五,实验要求实现
基本电路设计
单片机最小系统模块包括主控单元和基本外围电路,具体如图3-2所示。
采用外部5V电源,AT89C51为主控芯片,P0口采用74LS373驱动,采用11.0592HZ晶振,手动高电平复位方式。
通过P3.4采集外部输入频率,实时扫描键盘输入,控制输出采集频率。
数码管显示电路设计
数码管显示电路由4位八段共阴数码及8279芯片及74HS138芯片组成,共阴数码管在应用时将公共极COM接到地,当某一字段发光二极管的阴极为高电平时,相应字段就点亮。
当某一字段的阴极为低电平时,相应字段就不亮。
8279是专用键盘、显示接口芯片,单个芯片就能完成键盘输入和LED显示控制两种功能。
可以为64键的接触方式按键阵列提供扫描接口,能自动消除按键抖动以及n键同时按下的保护。
通过数码管显示,可以简单而准确的实现显示频率。
采用芯片不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
频率发生电路设计
频率发生电路是由4个74LS393芯片以及晶振电路产生600HZ、300HZ、150HZ、75HZ、4种不同的频率,电路设计简单,产生频率稳定。
电源电路设计
本电源电路是通过变压器,把外部接入的22V电源转变为5V电源,采用7805使电源稳定。
程序流程图
由于C语言编程容易,且Keil软件是目前最流行开发MCS-51系列单片机的软件。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。
KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
所以我们使用Keil软件进行编程。
根据设计项目所需功能,我们先进行初始化,在待机状态下,采集频率。
然后把采集的频率进行十进制转换,然后检测是否有键按下,若键0按下,则数码管显示所采集的频率,再按下键0时则不显示。
系统实现所有功能,其程序框图如图4-1所示。
主程序、
/*三:
频率计
设计要求:
1:
被测频率fx小于110Hz采用测周法,显示频率XXX。
XXX;fx大于110Hz采用测频法,显示频率XXXXXX;
2:
可利用键盘分段测量和自动分段测量;
3:
可完成单脉冲测量,输入脉冲宽度范围是100微秒--0.1秒;
4:
自由发挥其他功能.*/
#include
#defineuintunsignedint
#defineuncharunsignedchar
sbitenter=P3^4;
sbitstart=P3^0;
uncharcodetable1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
};
uncharcodetable2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uintt,a,b,temp;
floattt;
longnn;
//声明函数
voiddelay();
voidinit();
voiddisplay(long);
voidexamf();
voidexamt();
voidscan();
////**********************************主函数*******************////
voidmain(){
init();
while
(1){
examf();
examt();
if(nn<=110)display(tt);
else{display(nn);}
}
}
//*******************函数的定义***************************
voiddelay(){
uinti,j;
for(i=0;i++;i<10)
for(j=0;j++;j<10);
}
voidinit(){
t=0;
TMOD=0x15;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TH0=0x00;
TL0=0x00;
EA=1;
ET1=1;
ET0=1;
TR1=1;
TR0=1;
IE=0x8a;
}
voidtimer0()interrupt3{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
t++;
}
voidexamf(){
if(t==20){
t=0;
a=TH0;
b=TL0;
TH0=0x00;
TL0=0x00;
nn=a*256+b;
}
}
voidexamt(){
intx,y;
if((TH0==0x00)&&(TL0==0x01)){
TH0=0x00;
TL0=0x00;
x=TH1-(65536-50000)/256;
y=TL1-(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
tt=0.000001*(256*x+y);
}
}
/**floatexamt(){
if(t==20){
t=0;
a=TH0;
b=TL0;
TH0=0x00;
TL0=0x00;
nn=a*256+b;
}*/
voiddisplay(longh){
uintsw,wan,qian,bai,shi,ge;
sw=h/100000;
wan=h%100000/10000;
qian=h%10000/1000;
bai=h%1000/100;
shi=h%100/10;
ge=h%10;
//if(sw!
=0){
P0=table1[sw];
P2=0xdf;
delay();
P2=0xff;
P0=table1[wan];
P2=0xef;
delay();
P2=0xff;
P0=table1[qian];
P2=0xf7;
delay();
P2=0xff;
P0=table1[bai];
P2=0xfb;
delay();
P2=0xff;
P0=table1[shi];
P2=0xfd;
delay();
P2=0xff;
P0=table1[ge];
P2=0xfe;
delay();
P2=0xff;
}
voidscan(){
//检查第四行键盘
P1=0x7f;
temp=P1;
temp=P1&0x0f;
while(temp!
=0x0f){
delay();
temp=P1;
temp=P1&0x0f;
while(temp!
=0x0f){
temp=P1;
switch(temp){
case0x7e:
enter=1;//表示[4,4]按下
break;
case0x7d:
enter=1;//表示[4,3]按下
break;
case0x7b:
enter=1;//表示[4,2]按下
break;
case0x77:
enter=1;//表示[4,1]按下
break;
}
while(temp!
=0x0f)
{
temp=P1;
temp=temp&0x0f;
}
}
}
//检查第三排键盘
/*P3=0xbf;
temp=P3;
temp=P3&0x0f;
while(temp!
=0x0f){
delay();
temp=P3;
temp=P3&0x0f;
while(temp!
=0x0f){
temp=P3;
switch(temp){
case0xbe:
num=1;//表示[3,4]按下
break;
case0xbd:
num=6;//表示[3,3]按下
break;
case0xbb:
num=3;//表示[3,2]按下
break;
case0xb7:
num=4;//表示[3,1]按下
break;
}
while(temp!
=0x0f)
{
temp=P3;
temp=temp&0x0f;
}
}
}
//检查第二行键盘
P3=0xdf;
temp=P3;
temp=P3&0x0f;
while(temp!
=0x0f){
delay();
temp=P3;
temp=P3&0x0f;
while(temp!
=0x0f){
temp=P3;
switch(temp){
case0xde:
num=1;//表示[2,4]按下
break;
case0xdd:
num=6;//表示[2,3]按下
break;
case0xdb:
num=3;//表示[2,2]按下
break;
case0xd7:
num=4;//表示[2,1]按下
break;
}
while(temp!
=0x0f)
{
temp=P3;
temp=temp&0x0f;
}
}
}
//检查第一行键盘
P3=0xef;
temp=P3;
temp=P3&0x0f;
while(temp!
=0x0f){
delay();
temp=P3;
temp=P3&0x0f;
while(temp!
=0x0f){
temp=P3;
switch(temp){
case0xee:
num=1;//表示[1,4]按下
break;
case0xed:
num=6;//表示[1,3]按下
break;
case0xeb:
num=3;//表示[1,2]按下
break;
case0xe7:
num=4;//表示[1,1]按下
break;
}
while(temp!
=0x0f)
{
temp=P3;
temp=temp&0x0f;
}
}
}*/
}
采集频率
采集频率
采集频率
采集频率
软硬件调试
数字频率计是采用数字电路制成的实现对周期性变化信号的频率的测量。
数值频率计是通信设备、音、视频等科研生产领域不可缺少的测量仪器。
采用VerilogHDL编程设计实现的数字频率计。
除被测信号的整形部分、键输入部分和数码显示部分外,其余全部在一片FPGA芯片上实现,整个系统非常精简,且具有灵活的现场可更改性。
所谓“频率”,就是周期性信号在单位时间(1s)内变化的次数。
若在一定的时间间隔T内测得这个周期性信号的重复变化次数N,则其频率可表示为f=T/N。
其中脉冲形成电路的作用是将被测信号变成脉冲信号。
其重复频率等于被测频率f,时间基准信号发生器提供基准的时间脉冲信号。
若其周期为1S,则门控电路的输出信号持续时间也等于1S,门闸电路由标准秒信号进行控制。
当秒信号来到时,门闸开通,被测脉冲信号通过闸门送到计数译码显示电路。
秒信号结束时,门闸关断。
计数器停止计数,由于计数器计得的脉冲数N是在1S时间内的累计数,所以被测频率等于N
明确频率计工作原理以后,为了更清晰的对程序进行编写。
还应该做出程序的总体框图,程序的主体可以分为四个模块:
定时计数、采集数据、进制转换和数码显示。
务是利用开发工具进行调试,发现和纠正程序的错误,同时也能发现硬件的故障。
软件调试是一个模块接一个模块进行的。
首先单独调试各子程序是否能够按照预期的功能,接口电路的控制是否正常。
最后调试整个程序。
尤其注意的是各模块间能否正确的传递参数。
1.检查数码管显示模块程序。
观察数码管上是否能够显示相应的字符。
2.检查定时计数模块程序。
可以在硬件电路的输入端P3.4输入已知的4个频率,分别观察数码管上是否显示相应的频率值。
3.检查数据的转换模块程序。
程序可分为数据采集系统、数据转换系统、显示系统,这三部分先独立测试,然后整体调试。
①数据采集系统:
采用单片机内部两个定时器,定时器1定时,定时器0计数,采集输入频率,并转换为用于显示的代码。
②显示系统的调试:
要显示的数据存放在71H、72H单元中,先在30H~39H分单元中存放0~9的数,运行显示程序,进行查表指令,察看显示的结果是否与存放值一样。
③整体测试:
把三部分进行程序联调,编译程序,看是否存在错误。
经过多次的尝试与查找相资料,最后做出并完善了整体的方案。
系统功能分析
本课程设计是利用单片机设计一个频率计,能够0HZ-9999HZ的频率,四位位数码显示,使用的元器件数目较少。
外界输入频率通过P3.4口输入,通过定时器定时和外部计数方式采集频率。
然后用启动键0控制开关由单片机通过8279给数码管数字信号,控制其发光,从而显示频率值。
六、总结
经过近二周的单片机课程设计,终于完成了我的频率计的设计,基本达到设计要求。
对于此次课程设计,有许多的感触与体会,遇到的难题多,学习到的知识也就更多。
第一,硬件电路首先遇到了对试验箱内部硬件电路不了解,经过试验箱上面本身所带的几个与频率计有关的实验(计数器实验、8279显示实验)最终了解试验箱内部电路连接。
第二,则是解决程序设计的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力。
由于以前都是使用C语言编写程序,对汇编语言的编程能力还不够,所以在经过了解硬件电路后只编写了C语言程序并调试成功。
第三,在一个课题中,要设计一个完整的电路,必须要有耐心,要有坚持的毅力。
在整个电路的设计过程中,重要的是各个单元电路的连接及电路的细节设计上,如程序地址的正确,不然就会与原程序对应不上。
这就要求我们对硬件系统中各组件部分有充分透彻的理解和研究,并能对之灵活应用。
完成这次设计后,我在书本理论知识的基础上又有了更深层次的理解。
第四,在本次设计的过程中,我还学会了高效率的查阅资料、运用工具书、利用网络查找资料。
我发现,在我们所使用的书籍上有一些知识在实际应用中其实并不是十分理想,各种参数都需要自己去调整,这就要求我们应更加注重实践环节。
最后,还要在此感谢课程设计的指导老师,他们在整个过程中都给予了我充分的帮助与支持。
电路原理图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 频率计 实验 报告