基于单片机的频率计数器.docx
- 文档编号:7209346
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:17
- 大小:122.02KB
基于单片机的频率计数器.docx
《基于单片机的频率计数器.docx》由会员分享,可在线阅读,更多相关《基于单片机的频率计数器.docx(17页珍藏版)》请在冰豆网上搜索。
基于单片机的频率计数器
基于C52单片机的数字式频率计设计
第1章频率计数器设计………………………………………………………2
1.1设计内容、要求及目的…………………………………………………2
1.2基本原理与总体方案…………………………………………………3
第2章硬件系统设计…………………………………………………………4
2.1各部分方案及说明……………………………………………………4
2.1.1单片机部分…………………………………………………………4
2.1.2数据显示电路………………………………………………………5
第3章软件系统设计…………………………………………………………8
3.1应用系统的程序设计……………………………………………………8
3.1.1频率测试程序………………………………………………………8
3.1.2数值显示…………………………………………………………10
3.1.3LCD显示…………………………………………………………10
第4章测试数据………………………………………………………………12
第5章设计总结体会…………………………………………………………13参考文献………………………………………………………………………14
附录1…………………………………………………………………………15附录2…………………………………………………………………………20
第1章频率计数器设计
1.1设计的内容、要求及目的
设计内容:
本课题以AT89C52单片机为核心,设计和制作一个数字式频率计,来完成对输入的信号进行频率计数,计数的频率结果通过LCD1602显示出来。
要求能够对10Hz-100KHz的方波信号和正弦信号的频率进行测量。
设计要求:
1.设计方案要合理、正确;
2.系统硬件设计;
3.完成必要元器件选择;
4.系统软件设计及调试;
5.撰写设计报告
实验目的:
本实验的目的是设计一种基于C52单片机的数字频率计,可以测试信号发生器产生的方波信号和正弦信号的频率,课设要求频率范围10Hz-100kHz,且在显示设备上准确显示信号频率。
把在“单片机原理及应用”课堂上学习的知识运用于实践,并通过查阅相关资料,来丰富对单片机的认识和使用,培养一种自学和动手的能力。
同时,引导一种创新的思维,把学到的知识应用到日常生活当中。
在设计的过程中,不断的学习,思考和同学间的相互讨论,运用科学的分析问题的方法解决遇到的困难,掌握单片机系统一般的开发流程,学会对常见问题的处理方法,积累设计系统的经验,充分发挥教学与实践的结合。
全面提高个人系统开发的综合能力,开拓了思维,为今后能在相应工作岗位上的工作打下了坚实的基础。
1.2本设计的基本原理与总体方案
基本原理:
频率计数器的主要功能是测量周期信号的频率。
频率是单位时间(1S)内信号发生周期变化的次数。
正弦信号的判定一个周期通常是通过极值点判断,两个极小值的时长既是一个正弦信号的周期,方波信号也是可以通过两个下降沿之间的时长为一个周期。
只要计算出1s中方波信号和正弦信号的周期数,也就能得到我们所需要的频率数值。
本设计是基于C52单片机平台做的,需要采用定时器的计数、定时和中断功能。
由于C52单片机的所有中断均是低电平或者下降沿触发,因此我们只需要检测方波信号和正弦信号的低电平对信号的周期进行计数,因次需要用到两个定时器。
测量过程中定时/计数器T2和T0的工作方式设置,T0是工作在计数状态下,对输入的频率信号进行计数,在本次设计使用的AT89C52单片机中,由于检测一个由“1”到“0”的跳变需要两个机器周期,前一个机器周期测出“1”,后一个周期测出“0”。
故输入时钟信号的最高频率不得超过单片机晶振频率的二十四分之一,最大计数值为fOSC/24,由于fOSC=12MHz,因此,T0的最大计数频率为0.5MHz。
对于频率的概念就是在一秒只数脉冲的个数,即为频率值。
所以T0工作在定时状态下,每定时1秒中到,就停止T0的计数,而从T0的计数单元中读取计数的数值,然后进行数据处理,送到LCD1602显示出来。
总体方案:
本课题设计的是一种以C52单片机为主控制的频率计。
数字频率计主要由以下几部分组成:
信号源、C52单片机及其最小系统和LCD显示。
本课题主要是以单片机AT89C52为核心,通过计数电路,以及软件程序的编写,实现脉冲频率的显示。
频率计系统总体框图如下:
图1总体方案
第2章硬件系统设计
此次设计要求制作一频率计系统,需要使用的硬件主要包括52单片机芯片和LCD。
另外还是用到排线若干,下载线及电源线。
2.1各部分方案选定、功能
2.1.1单片机部分
本次设计采用了AT89C52单片机,AT89C52是一种带8K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS微处理器,属于8位的单片机。
如图2所示:
图2AT89C52引脚图
AT89C52拥有五个中断源,当有外部脉冲到来时可实现中断的响应,另外AT89C52拥有定时/计数器(T0、T1),可实现定时与计数的功能。
单片机AT89C52的P0、P2的4个8位并行I/O口可进行外部存储设备扩展。
单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统。
对51系列单片机来说,最小系统一般应该包括:
电源电路、复位电路、时钟电路。
1.电源电路:
电源电路就是单片机的供电电路,一般是3.3V或者5V,STC89C52采用的5V电压供电。
2.复位电路:
复位是单片机的初始化操作,只需给AT89C52单片机的复位引脚RST加上大于两个机器周期(即24个时钟振荡周期)的高电平就可使AT89C52复位。
包括上电复位和手动复位。
3.时钟电路:
用于产生AT89C52单片机工作时必需的控制信号,AT89C52单片机的内部电路正是在时钟信号的控制下,严格地按时序执行指令进行工作。
因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。
常用的时钟电路有两种方式,一种是内部时钟方式,另一种是外部时钟方式。
AT89C52单片机最小系统的最高时钟频率为12MHz。
2.1.2数据显示电路
图3显示电路图
(1)C51系列单片机采用的显示设备通常由LCD1602或者数码管。
由于本设计需要显示字符和数字。
因此本设计优先采用LCD1602。
LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符。
LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,即可以显示出图形。
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。
1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
开发板上硬件连线:
(2)把单片机系统中的P0.0-P0.7口连接LCD的D0-D7端口。
由于P0口上电后是上电复位后是开漏输出。
且作为C52单片机的扩展输出,相比较P1、P2、P3口没有上拉电阻,因此LCD1602连接C52单片机P0口时,应该外接上拉电阻。
把单片机系统中的P2.5-P2.7与LCD1602的RS,RW,E引脚相连,再RESPACK-8和LCD1602的D0-D7端口连接。
(3)P3.4是C52单片机的定时器0端口,因为需要计数单片机信号的周期因此可以直接将信号源的端口,接入到定时器T0(P3.4)端口。
第3章软件系统设计
3.1应用系统的程序设计
系统的应用程序设计主要包括两个方面,核心部分的程序是频率测试程序,另外一部分是LCD1602显示程序。
频率测试程序将频率测试出来后,将数值传递给STC89C52单片机,单片机将数值传递给LCD1602显示。
3.1.1频率测试程序
频率测试程序采用了C52单片机的两个定时器T0和T2,两个中断计数器中断0和的定时器中断2,计数器T0采用计数功能,计量外部信号的低电平数量,定时器2采用单片机最小系统定时1s。
采用T2定时62.5ms,连续循环定时16次即可完成1s定时,用一个unsignedchar型的time存放循环的次数,每一次循环自动加1,当time为16时则1s定时到时。
当定时器T2和T1同时开始工作,当定时器T2的时间达到1s后,计算T0的count数,同时进行数值转换。
将转换后的数据传递给单片机和LCD1602显示。
设计中T0采用计数功能,思路是除了计数器T0的TH0放初值和TL0用于计数外,再选用一个unsignedlong型的count,每当计数器T0溢出回零时产生中断,中断程序执行count自增1,这样,当一秒到时时采集的计数数据,count存放的是数据的最高位,TH0存放的是数据的次高位,TL0存放的是数据的最低位。
当然,这里所说的“最高位”“次高位”以及“最低位”都是针对十六进制而言的。
其程序流程图如图4所示。
图4频率测试流程图
3.1.2数值显示
由于我们的最大值是100KHZ,我们以HZ为单位。
最高位为结果/100000,第二位是结果/10000再取10的余数。
依次下来可以得到相应位的数字。
用ASCII码所以应该输出0x30+对应位的数字(0x30是48,ASCII码中48是‘0’)。
3.1.3LCD显示
将要显示的内容转换为相应的LCD显示的ASCII码,由于P0口地址是80H,输入的地址应该是0x80+第几个,再通过P0口输出数字。
RS为低电平时,输入地址第一行0x80+add,第二行0x80+0x40+add。
RS为高电平时,输入数值0x30+dat,字母按照ASCII码输入。
每次输入信息都需要开使能端,延时后再关闭。
图5LCD1602显示流程图
第4章测试数据
信号波
信号源输出频率
LCD显示频率
方波
1HZ
1HZ
方波
5HZ
5HZ
方波
10HZ
10HZ
方波
60KHZ
60000HZ
方波
95KHZ
94999HZ
方波
100KHZ
99997HZ
方波
120KHZ
11993HZ
正弦波
1HZ
1HZ
正弦波
5HZ
5HZ
正弦波
10HZ
10HZ
正弦波
50KHZ
50000HZ
正弦波
90KHZ
89998HZ
正弦波
100KHZ
99993HZ
正弦波
150KHZ
14990HZ
表1测试数据
经测试,该数字计频器已满足10HZ-100KHZ的测频要求,最大能测出1HZ-150KHZ信号的频率。
第5章设计总结体会
这次课程设计,我们主要学习了51单片机的基础知识,以及对程序编译软件KEIL4和电路仿真软件PROTEUS的使用。
在这个实验过程中,我们先是对实验题目和要求做了理解、分析,再对每个小组成员进行任务分工,最后结合大家的工作内容完成实验设计。
在这个过程中,我们也遇到了一些问题。
比如,程序烧录时出现下载失败的情况,调试测试时找不到合适的信号源等。
但是,通过我们小组成员的交流沟通,紧密合作,最后这些问题都一一解决。
另一方面,我们在这个学习的过程中也收获颇多。
在前期,老师课堂上的理论知识的讲解和答疑,让我们对单片机的功能和作用有了更深的认识;在中期,我们通过各个实验的练习和调试,加强了对相关软件的使用熟练度,同时在和同学们的讨论中,也对书本中的知识点有了更清晰的认识。
在后期,我们和小组成员的讨论交流,让我们认识到团队合作的重要性。
无论是在实验前的资料收集,还是实验过程中的调试、改进,都融入了我们每一个成员的智慧。
总之,这次关于单片机的学习,使我们每一个成员都有了进步。
在学习之前,我们每个人的基础都不相同,对软件使用的熟练度也不一致。
也正是在这个学习过程中,我们互帮互助,遇到问题相互答疑,才使得自己有所提升。
当然,这仅仅只是一个开始,从个人兴趣或今后就业来说,这都值得我们继续学习下去。
参考文献:
1.《单片机原理与应用》王迎旭等编.机械工业出版社
2.《51系列单片机设计实例》楼然苗等编.北京航空航天大学出版社
3.《计算机硬件技术基础实验教程》黄勤等编.重庆大学出版社
4.《微型计算机接口技术及应用》刘乐善主编.华中科技大学出版社
5.《单片微型计算机原理及接口技术》陈光东等.华中科技大学出版社
6.《51单片机C语言教程》郭天祥.电子工业出版社
附录1
源程序清单:
#include
#defineucharunsignedchar//宏定义
#defineuintunsignedint//宏定义
/*****LCD1602使能*****/
sbitlcden=P2^7;//使能信号端
sbitlcdrs=P2^6;//写数据/命令选择端
sbitlcdrw=P2^5;//读写选择端
ucharsw,w,q,b,s,g;
voidtimer_init();
voiddelay(unsignedinta);
unsignedlongfre;//频率
unsignedchartime;//时间
unsignedlongcount=0;//计数
voiddelay(uintz)//延时子程序
{
uintx,y;
for(x=z;x>0;x--)
for(y=125;y>0;y--);
}
voidwrite_com(ucharcom)//定义一个带参数的写命令子程序
{
lcdrs=0;//1602的rs为0时,接收命令,为1时接收数据
P0=com;//把voidwrite_com(ucharcom)中的COM中的数据给P0口
delay(5);//延时
lcden=1;//使能端为高脉冲
delay(5);//延时
lcden=0;//低脉冲
delay(5);//延时
}
voidwrite_shu(ucharshu)//定义一个带参数的写数据子程序
{
lcdrs=1;//1602的rs为0时,接收命令,为1时接收数据
P0=shu;//把voidwrite_shu(ucharshu)中的COM中的数据给P0口
delay(5);//延时
lcden=1;
delay(5);//延时
lcden=0;
delay(5);//延时
}
voidwrite_1602_2(ucharadd,uchardat)//1602显示程序
{
write_com(0x80+0x40+add+6);
write_shu(0x30+dat);
}
voidwrite_1602_1(ucharadd,uchardat)//1602显示程序
{
write_com(0x80+add);
write_shu(dat);
}
voidinit()//定义一个初始化子程序
{
lcden=0;
lcdrw=0;
write_com(0x38);//调用write_com子程序并把0x38赋给P0口,显示模式打开
delay
(2);//延时
write_com(0x0c);//调用write_com子程序并把“开显示,显示光标,光标不闪烁”指令码赋给P0口
write_com(0x06);//调用write_com子程序并把“地址指针加1,整屏不移动”指令码赋给P0口
write_com(0x80);//数据指针初始化,让指针指向最左端,显示从第一行开始
write_com(0x01);//调用write_com子程序并把"清零指"令码赋给P0口
}
/*****************************************************/
voiddisplay(unsignedlongfre)//显示函数
{
sw=fre/100000;
w=fre/10000%10;
q=fre/1000%10;
b=fre%1000/100;
s=fre%100/10;
g=fre%10;
}
voidmain()
{
timer_init();//定时/计数器初始化
init();
write_1602_1(1,84);
write_1602_1(2,104);
write_1602_1(3,101);
write_1602_1(4,32);
write_1602_1(5,70);
write_1602_1(6,114);
write_1602_1(7,101);
write_1602_1(8,113);
write_1602_1(9,117);
write_1602_1(10,101);
write_1602_1(11,110);
write_1602_1(12,99);
write_1602_1(13,121);
write_1602_1(14,58);
while
(1)
{
display(fre);//
write_1602_2(1,sw);
write_1602_2(2,w);
write_1602_2(3,q);
write_1602_2(4,b);
write_1602_2(5,s);
write_1602_2(6,g);
write_1602_1(0x40+13,72);
write_1602_1(0x40+14,90);
}
}
/**************************************************/
voidtimer_init(void)//定时器初始化
{
TMOD=0x06;//计数器0工作工作方式2,自动重装初值
TH0=0;//计数器初值为0
TL0=0;
TR0=1;//计数器开始计数
ET0=1;//打开计数器0中断
RCAP2H=(65536-62500)/256;//在程序初始化的时候给RCAP2H和RCAP2L赋值
RCAP2L=(65536-62500)%256;//TH2与TL2将会在中断产生时断使TH2=RCAP2H,TL2=RCAP2L.
TH2=RCAP2H;//12M晶振喜爱每次中断62.5ms
TL2=RCAP2L;
ET2=1;//打开定时器2中断
TR2=1;//定时器2开始计时
EA=1;//打开总中断
}
voidtimer2(void)interrupt5//定时器2中断62.5ms服务函
{
time++;
TF2=0;//定时器2的中断标志位TF2不能由硬件清零,所有要在中断服务程序中将其清零
if(time==16)//定时1s时间到
{
time=0;//计时清零
EA=0;//关闭中断
fre=((long)count*256+TL0);//count*256强制转换为long型,否则将不产生进位
TL0=0;//清零计数器0计数
TH0=0;
count=0;//清零计数器计数
EA=1;//打开中断
}
}
/****************************************************/
voidtimer0(void)interrupt1//计数器0中断
{
count++;
}
附录2
设计电路原理图:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 频率 计数器
![提示](https://static.bdocx.com/images/bang_tan.gif)