电子频率计毕业设计.docx
《电子频率计毕业设计.docx》由会员分享,可在线阅读,更多相关《电子频率计毕业设计.docx(27页珍藏版)》请在冰豆网上搜索。
电子频率计毕业设计
电子频率计设计
【摘要】本文设计了一种以单片机AT89C51为核心的电子频率计,介绍了单片机,按键控制和显示单元的组成及工作原理。
测量时,将被测输入信号送给单片机,通过按键来控制自动还是手动计数,信号通过编写的程序来处理,然后在6位LED数码管显示频率值,通过测量结果对比,分析了误差的来源,提出了减小误差应采取的措施,频率计应具有电路结构简单、成本低、测量方便、精度较高的特点。
系统简单可靠、操作简易,能基本满足一般情况下的需要,既保证了系统的测频精度,又使系统具有较好的实时性。
本频率计设计简洁,便于携带,能扩展能力强,适用范围广。
【关键词】电子频率计,单片机,LED显示,Proteus仿真,Keil仿真
引言
随着科学技术的发展,尤其是单片机技术和半导体技术的高速发展,频率计的研究及应用越来越受到重视,这样对频率测量设备的要求也越来越高。
目前微处理器芯片发展迅速,出现诸多如DSP、FPJA等不同领域的应用芯片。
而单片机是一门发展极快,应用方式极其灵活的设计、微笑的功耗。
廉价的成本,在数据采集、过程控制、模糊控制、智能仪表等领域得到广泛的应用,极大的提高了这些领域的技术水平和自动化程度。
电子频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。
它是一种用十进制数显示被测信号频率的数字测量仪器。
它的基本功能是测量正弦信号,方波信号及其他各种单位时间内变化的物理量。
在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精度高,显示直观,经常要用到频率计。
51系列单片机是国内目前应用最广泛的一种8位单片机之一,随着嵌入式系统、片上系统等概念的提出和普遍接受及应用。
51系列及衍生单片机还会在续后很长时间占据嵌入式系统产品的低端市场,因此,作为新世纪的大学生,在信息产业高速发展的今天,掌握单片机的基本结构、原理和使用是非常重要的。
本次课程设计的内容是使用AT89S51单片机最小系统设计频率计系统,系统以单片机位主控单元,主要用于对方波频率的测量。
1.电子频率计总体方案的设计
1.1频率计工作原理
所谓“频率”,就是周期性信号在单位时间(1s)内变化的次数。
若在一定的时间间隔T内测得这个周期性信号的重复变化次数N,则频率可表示为f=N/T。
其中脉冲形成的作用是将被测信号变成脉冲信号,其重复频率等于被测频率fx。
时间基准信号发生器提供标准的时间脉冲信号,若其周期为1s,则门控电路的输出信号持续时间亦准确地等于1s。
闸门电路由标准秒信号进行控制,当秒信号来到时,闸门开通,被测脉冲信号通过闸门送到单片机内部,用程序进行处理。
秒信号结束时闸门关闭,计数器停止计数。
由于计数器计得的脉冲数N是在1秒时间内的计数器,所以被测频率fx=NHz。
1.2设计思想
明确频率计工作原理以后,为了更方便思路更加的清晰地对程序编写,还应该作出程序的总体框图,如下图。
程序的主体可以分为4个模块:
定时计数、采集数据、程序处理和数码显示。
定时到
读取数据
数码显示管
1s定时器开始
同时开始计时
程序
处理
1.3方案论证
本方案主要是以单片机位核心,利用单片机的计数定时功能来实现频率的计数并且利用单片机的动态扫描把测出的数据送到数字显示电路显示。
其工作原理图如下:
单片机
AT89C51
电路
信号输入
内部
运算
数字
显示
电路
2.硬件电路设计
2.1系统硬件的设计
本频率计的数据采集系统主要元器件是AT89S51单片机,有它完成对待测信号频率的计数和结果显示功能,外部还有LED显示器、按键控制等器件。
可分为以下四个模块:
计时模块、计数模块、信息采集处理模块、LED显示模块。
由于本次设计非常的简单,实现的功能不较少,所以计数模块、计时模块均采用单片机本身的内部计时器和内部计数器。
各模块关系如下图所示:
2.2系统工作原理图
该系统工作的总原理图如下所示:
系统工作原理图
2.3器件选型
2.3.1AT89C51单片机及其引脚说明
选择单片机AT89C51是因为有编程灵活、易调试的特点,而且AT89C51的引脚比较多,利于电路的扩展。
它集成了CPU,RAM,ROM,定时器/计数器和多功能I/O口等一台计数机所需的基本功能,有40个引脚,32个外部双向输入/输出端口,同时内含两个外中断口,两个16位可编程定时计数器,两个全双工串行通信口。
其片内集成了4KB的FLASHPEROM用来存放应用程序,这个FLASH程序储存器除允许一般的编程器离线编程外,还允许在应用系统中实现在线编程,并且还提供了对程序进行三级加密保护的功能。
AT89S51的另一种特点是工作的速度更高,晶振可高达24MHz,一个机械周期仅为500ms,比MCS—51系列单片机快一倍。
引脚说明:
Vcc:
电池电源
GND:
地
P0口:
P0口是一组8位漏极开路型双向I/O口,作为输出口用时,每个引脚能驱动8个TTL逻辑门电路。
当对P0端口写入1时,可以作为高阻抗输入端使用。
在EPROM编程时,P0口接受指令字节,同时输出指令字节。
在程序校验时需要外接上拉电阻。
P1口:
P1口是一带有内部上拉电阻的8位双向I/O口。
P1口的输出缓冲能驱动4个TTL逻辑门电路。
当对P1端口写入1时,它们被上拉电阻升为高电平,此时可以作为输入端使用。
当作为输入端使用时,P1口因为内部存在上拉电阻,所以当外部被拉低时会输出一个低电流(In)。
P2口:
P2口是一带有内部上拉电阻的8位双向I/O口。
P2口的输出缓冲能驱动4个TTL逻辑门电路。
当对P2端口写入1时,通过内部上拉电阻把端口升为高电平,此时可以作为输入端使用。
作为输入口,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出电流(In)。
P2口在访问外部程序储存器时或16位地址的外部数据储存器时,P2口送出高8位地址数据。
在这种情况下,P2口使用强大的内部上拉电阻功能当输出1时。
当利用8位地址线访问数据储存器时,P2口输出特殊功能寄存器的内容。
当EPROM编程或校验时,P2口同时接收高8位地址和一些控制信号。
P3口:
P3是一带有内部上拉电阻的8位双向I/O口。
P3口的输出缓冲能驱动4个TTL逻辑门电路。
当对P3端口写入1时,通过内部上拉电阻把端口升为高电平,此时可以作为输入端使用。
作为输入口,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出电流(In)。
RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期的高电平将使单片机复位。
ALE/PROG:
当访问外部储存器时,地址锁存允许是一输出脉冲,用以锁存地址的低8位字节。
当在Flash编程时还可以作为编程脉冲输出(PROG)。
一般情况下,ALE是以晶振频率的1/6输出,可以用作外部时钟或定时目的。
但也要注意,每当访问外部数据储存器时将跳过一个ALE脉冲。
PSEN:
程序储存允许时外部程序储存器的读选通信号。
当AT89C51执行外部程序储存器的指令时,每个机器周期PSEN两次有效,除了当访问外部数据储存器时,PSEN将跳过两个信号。
EA/Vw:
外部访问允许允许。
为了使单片机能够有效的传送外部数据储存器从0000H到FFFH单元的指令,EA必须同GND相连接。
需要主要的是,如果加密位1被编程,复位时EA端会自动内部锁存。
当执行内部编程指令时,EA应该接到Vcc端。
XTAL1:
振荡器反相放大器以及内部时钟电路的输入端。
XTAL2:
振荡器反相放大器的输出端。
2.3.2时钟电路
时钟频率直接影响单片机的速度,时钟电路的质量直接影响单片机系统的稳定性。
常用的时钟电路有两种方式:
一种是内部的时钟方式,另一种是外部时钟方式。
AT89C51内部有一个用于构成振荡器的高增益反相放大器,输入端位芯片引脚XTAL1,输出端为引脚XTAL2。
这两个引脚跨接石英晶体振荡器和微调电容,构成一个稳定的自激振荡器,如下图是AT89C51内部时钟方式的电路,C1和C2的典型值通常选择为30pF,石英晶体长选12MHz的。
本设计采用内部时钟方式。
时钟电路
2.3.3复位电路
单片机的初始化操作,给复位脚RST加上大于2个机器周期(即24个时钟振荡周期)的高电平就使AT89C51复位。
这些操作都是由复位电路来实现。
在单片机的实用系统中,一般有两种复位操作形式:
上电复位和手动复位。
上电复位在单片机系统每次通电时执行。
上电时,电容C充电加给RST引脚一个短的高电平信号,此信号随着VCC对电容C的充电过程而逐渐回落,即RST引脚上的高电平持续时间取决于电容C充电时间。
为保证系统可靠复位,RST引脚上的高电平必须维持足够长的时间。
手动复位在系统出现操作错误或程序运行出错时使用。
在单片机系统运行过程中,按下复位键,高电平输入RST引脚,单片机被强制执行复位操作,系统可以退出错误运行状态,恢复正常工作。
由于本设计的需要,采用手动复位方式即可,下图为所示复位电路。
复位电路
2.3.4键盘控制电路
键盘的任务有三项:
(1)首先判断是否有键按下。
若有,进入下一步。
(2)识别哪一个键被按下,并求出相应的键值。
(3)根据键值,找到相应键值的程序处理入口。
组成键盘的按键有机械式、电容式、导电橡胶式、薄膜式多种,但不管什么形式,其作用都是一个使电路接通与断开的开关。
目前微机系统中使用的键盘按其功能不同,通常可分为编码键盘和非编码键盘两种基本类型。
编码键盘:
键盘本身带有实现接口主要功能所需的硬件电路。
不仅能自动检测被按下的键,并完成去抖动、防串键等功能,而且能提供与被按键功能对应的键码(如ASCII码)送往CPU。
所以,编码键盘接口简单、使用方便。
但由于硬件电路较复杂,因而价格较贵。
非编码键盘:
利用按键直接与单片机相连接而成,这种键盘通常使用在按键数量较少的场合。
使用这种键盘,系统功能通常比较简单,需要处理任务少,但是可以减降低成本、简化电路设计。
按键信息通过软件获取。
可分为独立式键盘和矩阵式键盘。
本设计电路采用的是中断扫描的方式,当按键按下时,就会放出中断请求信号,单片机响应中断,执行键盘扫描程序中断服务子程序。
如果不按键盘,则单片机就不会理睬键盘。
当按下自动按钮时就会自动测量频率,当按下手动按钮时还需要按下开始按钮这样才能开始计时,当按下停止按钮时就会中断测量。
按键系统
2.3.5数据显示电路
数据显示电路是由6个LED数码管组成。
本设计中采用了六个八段数码管进行数据显示,将六个数码管并接起来进行显示,显示数据即是对频率计的测量结果。
LED显示
LED显示器采用动态显示方式,显示时将所有位的段选线并连在一起,由一个8位的I/O口控制,行程段选线的多路复用,由于各位的段选线并联,段选码的输出对各位来说都是相同的,同一时刻,如果各位选线都处于选通状态的话,六位的LED将显示相同的字符。
要各位LED能显示出与本为相应的显示字符,就必须采用扫描显示方式。
即在同一时刻,只让某一位的位选线处于选通状态。
而其他各位的位选线处于关闭状态,同时,段选线上输出相应位要显示字型码,这样同一时刻,六位LED中只有选通的那一位显示出字符。
而其他五位是熄灭的,而在下一时刻,只让下一位的位选线处于选通状态,而其他各位的位选线处于关闭状态。
在段选线上输出相应位将要显示字符的字符码。
这样循环下去,就可以是各位显示出将要显示的字符。
虽然这些字符是在不同时刻出现的。
而且同一时刻,只有一位显示,其他各位熄灭。
但由于人眼有视觉残留现象,只要每位显示间隔足够短,则可造成多位同时亮的效果。
由于单片机输出的显示电压不够高,无法直接送到数码管上直接显示。
在本次设计中我们需要用上拉电阻,其电路图如下所示。
8段LED段码
显示字符
共阴极段码
共阳极段码
显示字符
共阴极段码
共阳极段码
0
3FH
C0H
9
6FH
90H
1
06H
F9H
A
77H
88H
2
5BH
A4H
b
7CH
83H
3
4FH
B0H
C
39H
C6H
4
66H
99H
d
5EH
A1H
5
6DH
92H
E
79H
86H
6
7DH
82H
F
71H
8EH
7
07H
F8H
P
73H
8CH
8
7FH
80H
U
3EH
C1H
本次设计用了从0到9的共阴极段码。
3软件设计
按键
手动自动
开始
N
1S
Y
NY
停止
软件实现总流程图
3.1实现一秒定时和计数部分
电路实现的关键是能够设法取得准确的一秒定时,在自动测量时,并让计算器只计数一秒,这样计数结果即为频率值。
实现的方法是选用单片机内的定时器T0选为定时器工作模式,外部中断0作为计数器,对外部输入的脉冲进行计数。
计数值通过LED管显示出来。
本次设计采用了12MHz的晶体振荡器的情况下,周期为1us.。
一秒定时已超过定时器可提供的最大定时值。
为了实现一秒的定时,采用了定时和计数相结合来实现。
选用定时器T0作用于工作方式1,产生50ms的定时。
再用软件计数方式给它计数20次,就能达到一秒定时。
设置TMOD寄存器定时器T0工作方式1,应使TMOD中的M1,M0=01;定时器模式,设置C/T=0;对T0的运行控制仅由TR0来控制,应使GATE0=0.定时器T1不用,各相关位设为0。
所以TMOD寄存器应初始化为Ox01。
计算定时器T0的计数初值设定时间为50ms(即50000us),设定时器T0的计数初值为X,定时时间为:
定时时间=(65536—X)×12/12
则5000=(65536—X)×12/12
即TH0=(65536—50000)/256
TL0=(65536—50000)%256
当外部中断0计数时,其计数脉冲是来自外面端口出现有“1”(高电平)到“0”(低电平)的负跳变时,开始加1计数。
计算机是在每个机器周期的S,P状态时采样外部中断0端口,当前一个机器周期采样为1且后一个机器周期采样为0时,计算器加1计数。
3.2软件仿真
本次的设计主要应用了protues和keilc软件进行系统设计和仿真,经过仿真后,结果较好,LED可以正确测出脉冲的个数。
3.2.1PROTEUS软件仿真过程
第一步:
打开PROTEUS软件,选择所需器件。
第二步:
将所有器件排列好。
第三步:
连接导线。
第四步:
打开KEIL软件,调出程序编译,生成HEX文件。
第五步:
调试仿真。
4心得、体会
最初拿到这个题目并不是很明白要怎么做,所以我组上网搜集了相关的资料,并进行了详细的分析和讨论,然后进行了分工,我主要负责硬件部分,彼此之间虽然分工,但又相互探讨,选项不同的方案进行设计,然后逐一讨论并排除,最后选出一种都行的通的方案来设计,软件和硬件缺一不可,这就要有团队协作精神,在这段时间里我学要了很多知识,更加的了解了单片机,能把老师讲的知识运用到设计中,同时有两很好的团队意识,多人做的效率要远远超过一个人,每个人的思想也都不同,集合大家的思想这样才能得到更好的思路。
虽然这些天在探讨的时候有很多困难,再加上个别事情很繁琐,会让自己觉得有些疲倦,但当这个设计完成了,就感觉一切都是值得的,一切都雨过天晴了,心中有一种成就感,感谢这些天朋友的陪伴,我将继续努力。
5参考文献
【1】张毅刚《单片机原理及应用》(第二版)
【2】谭浩强《C程序设计教程》
以及网络资源
陕西理工学院《基于AT89C51频率计的设计》
附录A整体电路图
附录B源程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbits1=P1^0;
sbits2=P1^1;
sbits3=P1^2;
sbits4=P1^3;
uintt;
ucharm;
bitflag;
unsignedlongcount,v;
uchartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
voiddelay(ucharms)
{
uchari;
while(ms--)
for(i=0;i<120;i++);
}
voiddisp()
{
P2=0XFF;
P0=tab[v/100000];
P2=0Xfe;
delay
(2);
P2=0XFF;
P0=tab[v/10000%10];
P2=0XFD;
delay
(2);
P2=0XFF;
P0=tab[v/1000%10];
P2=0XFB;
delay
(2);
P2=0XFF;
P0=tab[v/100%10];
P2=0XF7;
delay
(2);
P2=0XFF;
P0=tab[v/10%10];
P2=0XEF;
delay
(2);
P2=0XFF;
P0=tab[v%10];
P2=0XDF;
delay
(2);
P2=0XFF;
}
voidEXINT0()interrupt0
{
count++;
}
voidtime0()interrupt1
{
TH0=(65536-50000)/256;//定时50ms重新赋初值
TL0=(65536-50000)%256;
m++;
if(m>=20)
{
m=0;
if(flag==0)
{
v=count;
count=0;
}
if(flag==1)
{
t++;
}
}
}
voidinit()
{
IT0=1;//INT0负跳变触发
TMOD=0x01;//定时器工作于方式1
TH0=(65536-50000)/256;//定时50ms重新赋初值
TL0=(65536-50000)%256;
EA=1;//CPU开中断总允许
ET0=1;//开定时中断
EX0=1;//开外部INTO中断
}
voidmain()
{
ucharshou;
init();
while
(1)
{
disp();
if(s1==0)//自动
{
delay(5);
if(s1==0)
{
TR0=1;
shou=0;
count=0;
v=0;
}
}
if(s2==0)//手动
{
delay(5);
if(s2==0)
{
TR0=0;
shou=1;
v=0;
count=0;
EX0=0;
}
}
if(shou)
{
if(s3==0)//开始
{
delay(5);
if(s3==0)
{
flag=1;
count=0;
v=0;
m=0;
t=0;
TR0=1;
EX0=1;
}
}
if(s4==0)//停止
{
delay(5);
if(s4==0)
{
TR0=0;
flag=0;
EX0=0;
}
}
if(t>0)
v=count/t;
}
}
}
附录C元器件清单
AT89C51
1个
晶振
1个
12MHz
LED数码管
6个
电阻
8个
1个
1KΩ
510Ω
电容
1个
2个
0.1uF
30pF