基于AT89C51单片机实现的数字频率计设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
第1章绪论 (2)
1.1 摘要 (2)
1.2 本设计任务和主要内容 (2)
第2章元器件选型 (3)
2.1 主控制器选择 (3)
2.2 计时方案选择 (3)
2.3 显示方案选择 (3)
2.4 扩展接口选择 (4)
第3章系统硬件电路设计 (4)
3.1 系统原理框图 (4)
3.2 时钟电路和复位电路 (5)
3.3 基本电路设计 (6)
3.4 数码管显示电路设计 (6)
3.5 频率发生电路设计 (8)
3.6 电源电路设计 (8)
第4章程序流程图与源程序 (9)
4.1 程序流程图 (9)
4.2 主程序 (10)
第5章系统功能分析与说明 (13)
5.1 频率计的概述 (13)
5.2 频率计的工作原理 (13)
5.3 设计思想 (13)
5.4 软硬件调试 (13)
5.5 系统功能分析 (14)
第6章课程设计总结 (14)
参考文献 (14)
附录 (15)
第 1 章绪论
1.1 摘要
本文设计了一种以单片机AT89C51为核心的数字频率计。
介绍了单片机、
数字译码和显示单元的组成和工作原理。
测量时,将被测输入信号送给单片机,通过程序控制计数,结果送8279驱动数码管显示频率值。
频率计具有电
路结构简单、成本低、测量方便、精度较高等特点。
适合测量低频信号。
系
统简单可靠、操作简易,能基本满足一般情况下的需求。
既保证了测频精度,
又使系统具有较好的实时性。
本频率计设计简洁,便于携带,扩展能力强,
适用范围广。
【关键字】:频率计、单片机、LED显示
1.2 本设计任务和主要内容
一、设计题目
设计一个频率计,数字显示格式:X X X X。
二、设计内容与要求
1、通过定时器计数方式采集频率信号。
2、通过8279在4位数码管上显示频率大小。
三、设计目的
1.通过亲身的设计应用电路,将所用的理论知识应用到实践中,增强实践动手能力,进而促进理论知识的强化。
2.通过频率计的设计系统掌握51单片机的应用。
掌握采集频率与数码显示软件编程及硬件设计的方法,掌握根据课题的要求,提出选择设计方案,查找所需元器,设计并搭建硬件电路,编程写入EPROM并进行调试等。
3.通过频率计的设计,掌握单片机的扩展芯片8279在键盘与数码管的应用。
第 2 章元器件选型
2.1 主控制器选择
方案一:采用数字逻辑芯片
本系统有功能设置、数据装入、定时、显示、音响控制多个功能模块。
各个状态保持或转移的条件依赖于键盘控制信号。
由于键盘控制信号繁多,
系统的逻辑状态以及相互转移更是复杂,用纯粹的数字电路或小规模的可编
程逻辑电路实现该系统有一定的困难,需要用中大规模的可编程逻辑电路。
这样,系统的成本就会急剧上升(相对于方案二)。
因此,本设计并未采用
这种方案。
方案二:采用单片机作为整个控制系统的核心
鉴于市场上常见的51系列8位单片机的售价比较低廉,有更好的性价比,从可行性、可靠性及成本等方面考虑,我们采用了AT89C51单片机,晶振取11.0592MHz。
首先,利用单片机多中断源的协调处理能力,通过一个定时器计时一个定时器计数方式采集频率信号。
综合考虑以上因素,采用了方案二。
2.2 计时方案选择
方案一:使用专用时钟芯片
使用微控制器控制专用时钟芯片实现计时控制,这种方案有着计时精度高、控制简单的优点,而且更易于实现日期/ 时间显示、定时等计时扩展功能。
方案二:采用MCU 内部定时器
AT89C51内部含有2个定时器,可以利用一个定时器计时与一个定时器计
数方式采集频率信号。
由于方案二具有较好的灵活性、较少的电路器件和较高的性价比,而且
通过精确的软件补偿使精度完全可以满足控制需要,所以我们选择该方案完
成设计。
2.3 显示方案选择
方案一:使用数码管显示
该方案控制最简单,根据设计要求显示格式XXXX。
可以准确的显示频
率大小,又由于数码管简单便宜且满足设计要求,所以选着数码管显示比较
合理。
方案二:使用LCD12864液晶显示
点阵液晶可以显示多种字符及图形,拥有友好的人机界面及强大的显示
功能。
特别适用于智能控制的可编程人性化显示。
但是比较复杂。
使用不方便。
增加了难度。
2.4 扩展接口选择
方案一:采用8255A扩展并行I/O接口
8255A具有3个8位的并行I/O口,他们都可以通过编程改变其输入输出方式,8255A在单片机应用系统被广泛用作可编程外部I/O扩展接口。
方案一:采用8279扩展并行I/O接口
8279是专用键盘、显示接口芯片,单个芯片就能完成键盘输入和LED显示
控制两种功能。
可以为64键的接触方式按键阵列提供扫描接口,能自动消除
按键抖动以及n键同时按下的保护。
综合考虑,我们采用8279扩展I/O接口。
第三章:系统硬件电路设计
3.1 系统原理框图
选择AT89C51作为单片机芯片,选用两位8段共阴极LED数码管实现频率显示,利用8279作I/O口扩展,连接数码管和键盘。
通过定时器1计时方式,定时器0计数方式,定时每秒钟对外部频率计数,把计数值通过8279芯片在数码管上显示。
如图4.1所示。
图4.1 系统原理框图
3.2 时钟电路和复位电路
1.时钟电路
单片机的时钟一般需要多相时钟,所以时钟电路由振荡器和分频器组成。
AT89C51内部有一个用于构成振荡器的可控高增益反向放大器。
两个引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
在片外跨接一晶振和两个匹配电容C1、C2如图4.3所示,就构成一个自激振荡器。
振荡频率根据实际要求的工作速度,从几百千赫至24MHz可适当选取某一频率。
匹配电容C1、C2要根据石英晶体振荡器的要求选取。
当晶振频率为12MHz时,C1C2一般选30pF左右。
上述电路是靠AT89C51单片机内部电路产生振荡的。
也可以由外部振荡器或时钟直接驱动AT89C51。
本设计采用内部电路产生振荡。
图4.3时钟电路的内部及外部方式
2.复位电路
RST引脚是复位端,高电平有效。
在该引脚输入至少连续两个机器周期以上的高电平,单片机复位。
RST引脚内部有一个斯密特ST触发器以对输入信号整形,保证内部复位电路的可靠,所以外部输入信号不一定要求是数字波形。
使用时,一般在此引脚与VSS引脚之间接一个8.2kΩ的下拉电阻,与VCC引脚之间
接一个约10μF的电解电容,即可保证上电自动复位。
图4.4自动和手动复位电路图
上电或手动复位要求电源接通后,单片机自动复位,并且在单片机运行期间,
用开关操作也能使单片机复位。
上电后,由于电容C3的充电和反相门的作用,
使RST持续一段时间的高电平。
当单片机已在运行当中时,按下复位键K后松开,
也能使RST为一段时间的高电平,从而实现上电或手动复位的操作。
本设计采用
手动复位电路。
3.3基本电路设计
单片机最小系统模块包括主控单元和基本外围电路,具体如图3-2所示。
采用外部5V电源,AT89C51为主控芯片,P0口采用74LS373驱动,采用11.0592HZ 晶振,手动高电平复位方式。
通过P3.4采集外部输入频率,实时扫描键盘输入,控制输出采集频率。
3.4 数码管显示电路设计
数码管显示电路由4位八段共阴数码及8279芯片及74HS138芯片组成,共
阴数码管在应用时将公共极COM接到地,当某一字段发光二极管的阴极
为高电平时,相应字段就点亮。
当某一字段的阴极为低电平时,相应字
段就不亮。
8279是专用键盘、显示接口芯片,单个芯片就能完成键盘输入和LED显示控制两种功能。
可以为64键的接触方式按键阵列提供扫描接口,能
自动消除按键抖动以及n键同时按下的保护。
通过数码管显示,可以简单而
准确的实现显示频率。
采用8279芯片不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
3.5 频率发生电路设计
频率发生电路是由4个74LS393芯片以及晶振电路产生600HZ、300HZ、150HZ、75HZ、4种不同的频率,电路设计简单,产生频率稳定。
3.6 电源电路设计
本电源电路是通过变压器,把外部接入的22V电源转变为5V电源,采用7805使电源稳定。
第4章程序流程图与源程序
4.1 程序流程图
由于C语言编程容易,且Keil软件是目前最流行开发MCS-51系列单片机的软件。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。
Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
所以我们使用Keil软件进行编程。
根据设计项目所需功能,我们先进行初始化,在待机状态下,采集频率。
然后把采集的频率进行十进制转换,然后检测是否有键按下,若键0按下,则数码管显示所采集的频率,再按下键0时则不显示。
系统实现所有功能,其程序框图如图4-1所示。
4.2 主程序
具体设计软件代码如下:
//-----头文件引用------
#include<reg51.h>
#include<absacc.h>
//-----宏声明-----
#define D8279 XBYTE[0xFF80] //8279 数据口地址
#define C8279 XBYTE[0xFF82] //8279 状态/命令口地址
#define uchar unsigned char
#define uint unsigned int
//-----变量定义-----
uchar code ledseg[] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5E,0x79,0x71};//LED显示常数表uchar flag,ge,shi,bai,qian,time;
uint num;
//-----延时子程序-----
void delay1(uint z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//-----初始化-----
void first()
{
delay1(100); //延时
TMOD=0x15; //T1为定时,工作方式1,T0为计数,工作方式1
TH0=0x00;
TL0=0x00;
TH1=0x4c;
TL1=0x00;
TR0=1;
TR1=0;
IE=0x8a;
}
//----8279初始化子程序-----
void init8279()
{
C8279=0x02; //置8279工作方式,8位字符显,编码扫描键盘
C8279=0x38; //置键盘扫描速率,输入12MHZ,24分频后500KHZ的操作频率
C8279=0xd1; //清除LED 显示
}
//-----显示-----
void disp()
{
C8279=0x90;
D8279=0;
D8279=0;
D8279=0;
D8279=0;
D8279=ledseg[ge];
D8279=ledseg[shi];
D8279=ledseg[bai];
D8279=ledseg[qian];
}
void shouji()
{
uchar a,b;
if(time==20)
{
time=0;
a=TH0;
b=TL0;
TH0=0;
TL0=0;
num=a*256+b;
}
qian=num/1000;
bai=num%1000/100;
shi=num%100/10;
ge=num%10;
}
//-----主程序-----
void main()
{
uchar key;
bit flag;
first();
init8279(); //8279初始化
while(1)
{
shouji();
if((C8279&0x01)!=0x00) //查询方式,读取引脚IRQX
{
C8279=0x40; //读FIFO RAM命令
key=D8279;
key=(key&0x3f); //取键盘数据低6位
if(key==0)
{
flag=~flag;
}
while((C8279&0x0f)!=0x00);//等待
}
if(flag)
{
TR1=1;
disp();
}
else
{
C8279=0x90;
D8279=0x00;
D8279=0x00;
D8279=0x00;
D8279=0x00;
D8279=0x00;
D8279=0x00;
D8279=0x00;
D8279=0x00;
}
}
}
//-----初始化-----
void time0() interrupt 3
{
TH1=0x4c;
TL1=0x00;
time++;
}
第五章系统功能分析与说明
5.1 频率计的概述
数字频率计是采用数字电路制成的实现对周期性变化信号的频率的测量。
数值
频率计是通信设备、音、视频等科研生产领域不可缺少的测量仪器。
采用Verilog HDL编程
设计实现的数字频率计。
除被测信号的整形部分、键输入部分和数码显示部分外,其余全部
在一片FPGA芯片上实现,整个系统非常精简,且具有灵活的现场可更改性。
5.2 频率计的工作原理
所谓“频率”,就是周期性信号在单位时间(1s)内变化的次数。
若在
一定的时间间隔T内测得这个周期性信号的重复变化次数N,则其频率可表
示为f=T/N。
其中脉冲形成电路的作用是将被测信号变成脉冲信号。
其重复
频率等于被测频率f,时间基准信号发生器提供基准的时间脉冲信号。
若其周期为1S,则门控电路的输出信号持续时间也等于1S,门闸电路
由标准秒信号进行控制。
当秒信号来到时,门闸开通,被测脉冲信号通过
闸门送到计数译码显示电路。
秒信号结束时,门闸关断。
计数器停止计数,
由于计数器计得的脉冲数N是在1S时间内的累计数,所以被测频率等于N
NZ。
5.3设计思想
明确频率计工作原理以后,为了更清晰的对程序进行编写。
还应该做出程
序的总体框图,程序的主体可以分为四个模块:定时计数、采集数据、进制转换
和数码显示。
5.4软硬件调试
软件调试的任务是利用开发工具进行调试,发现和纠正程序的错误,同时也
能发现硬件的故障。
软件调试是一个模块接一个模块进行的。
首先单独调试各子
程序是否能够按照预期的功能,接口电路的控制是否正常。
最后调试整个程序。
尤其注意的是各模块间能否正确的传递参数。
1. 检查数码管显示模块程序。
观察数码管上是否能够显示相应的字符。
2. 检查定时计数模块程序。
可以在硬件电路的输入端P
3.4输入已知的4个
频率,分别观察数码管上是否显示相应的频率值。
3. 检查数据的转换模块程序。
程序可分为数据采集系统、数据转换系统、显示系统,这三部分先独立测试,然后整体调试。
①数据采集系统:采用单片机内部两个定时器,定时器1定时,定时器0计数,采集输入频率,并转换为用于显示的代码。
②显示系统的调试:要显示的数据存放在71H、72H单元中,先在30H~39H分单元中存放0~9的数,运行显示程序,进行查表指令,察看显示的结果是否与存放值一样。
③整体测试:把三部分进行程序联调,编译程序,看是否存在错误。
经过多
次的尝试与查找相资料,最后做出并完善了整体的方案。
5.5系统功能分析
本课程设计是利用单片机设计一个频率计,能够0HZ-9999HZ的频率,四位位数码显示,使用的元器件数目较少。
外界输入频率通过P3.4口输入,通过定时器定时和外部计数方式采集频率。
然后用启动键0控制开关由单片机通过8279给数码管数字信号,控制其发光,从而显示频率值。
第六章课程设计总结
经过近二周的单片机课程设计,终于完成了我的频率计的设计,基本达到设计要求。
对于此次课程设计,有许多的感触与体会,遇到的难题多,学习到的知识也就更多。
第一,硬件电路首先遇到了对试验箱内部硬件电路不了解,经过试验箱上面本身所带的几个与频率计有关的实验(计数器实验、8279显示实验)最终了解试验箱内部电路连接。
第二,则是解决程序设计的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力。
由于以前都是使用C语言编写程序,对汇编语言的编程能力还不够,所以在经过了解硬件电路后只编写了C语言程序并调试成功。
第三,在一个课题中,要设计一个完整的电路,必须要有耐心,要有坚持的毅力。
在整个电路的设计过程中,重要的是各个单元电路的连接及电路的细节设计上,如程序地址的正确,不然就会与原程序对应不上。
这就要求我们对硬件系统中各组件部分有充分透彻的理解和研究,并能对之灵活应用。
完成这次设计后,我在书本理论知识的基础上又有了更深层次的理解。
第四,在本次设计的过程中,我还学会了高效率的查阅资料、运用工具书、利用网络查找资料。
我发现,在我们所使用的书籍上有一些知识在实际应用中其实并不是十分理想,各种参数都需要自己去调整,这就要求我们应更加注重实践环节。
最后,还要在此感谢课程设计的指导老师,他们在整个过程中都给予了我充分的帮助与支持。
参考文献
[1]赵全利、肖兴达.《单片机原理及应用教程》(第二版).机械工业出版社,2007
[2]蔡美琴等.《MCS-51系列单片机系统及其应用》.高等教育出版社.
[3]吴国经.《单片机应用技术》.北京:中国电力出版社,2003.
[4]徐爱钧.《智能化测量控制仪表原理与设计》(第二版)[M].北京:北京航空航天大学
出版社,2004.
附录
附录1: 电路原理图。