单片机课设频率计数器.docx

上传人:b****4 文档编号:3489418 上传时间:2022-11-23 格式:DOCX 页数:19 大小:508.14KB
下载 相关 举报
单片机课设频率计数器.docx_第1页
第1页 / 共19页
单片机课设频率计数器.docx_第2页
第2页 / 共19页
单片机课设频率计数器.docx_第3页
第3页 / 共19页
单片机课设频率计数器.docx_第4页
第4页 / 共19页
单片机课设频率计数器.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

单片机课设频率计数器.docx

《单片机课设频率计数器.docx》由会员分享,可在线阅读,更多相关《单片机课设频率计数器.docx(19页珍藏版)》请在冰豆网上搜索。

单片机课设频率计数器.docx

单片机课设频率计数器

等级:

课程设计

课程名称

单片机原理及应用

课题名称

频率计数器

专业

电子信息工程

班级

1302

学号

201301030218

姓名

许聪

指导老师

寻大勇等

2016年3月25日

电气信息学院

课程设计任务书

课题名称

频率计数器

姓名

许聪

专业

电子信息

班级

1302

学号

18

指导老师

寻大勇

课程设计时间

2016年3月14日-2016年3月25日

教研室意见

意见:

审核人:

一、任务及要求

设计任务:

本课题以单片机为核心,设计和制作一个频率计数器,来完成对输入的信号进行频率计数,计数的频率结果能够显示出来。

要求能够对0-250KHz的信号频率进行准确计数,计数误差不超过±1HZ。

设计要求:

(1)确定系统设计方案;

(2)进行系统的硬件设计;

(3)完成应用程序设计;

(4)应用系统的硬件和软件的调试。

二、进度安排

第一周:

周一:

集中布置课程设计任务和相关事宜,查资料确定系统总体方案。

周二~周三:

完成硬件设计和电路连接

周四~周日:

完成软件设计

第二周:

周一~周三:

程序调试

周四~周五:

设计报告撰写。

周五进行答辩和设计结果检查。

三、参考资料

1、王迎旭等.单片机原理及及应用.2版.机械工业出版社,2012

2、胡汉才.单片机原理及其接口技术.3版.清华大学出版社,2010.

3、戴灿金.51单片机及其C语言程序设计开发实例.清华大学出版社,2010

第1章设计任务及要求1

1.1设计任务1

1.2设计要求1

第2章系统方案设计1

2.1基本设计原理1

2.2方案整体框图2

第3章系统硬件电路设计2

3.1复位电路.........................................................2

3.2晶振电路.........................................................3

3.3LED数码管显示电路...............................................3

第4章系统软件设计4

4.1主程序流程图4

4.2初始化模块5

4.3信号频率测量模块................................................5

4.4数码管显示模块...............................................5

4.5程序中断模块....................................................6

4.6数码管扫描模块..................................................7

第5章系统仿真及调试7

5.1C程序编译.......................................................8

5.2Proteus仿真......................................................9

心得体会................................................................9

参考文献10

附录A仿真总图12

附录B程序清单13

 

第1章设计任务及要求

1.1设计任务:

本课题以单片机为核心,设计和制作一个频率计数器,来完成对输入的信号进行频率计数,计数的频率结果能够显示出来。

要求能够对0-250KHz的信号频率进行准确计数,计数误差不超过±1HZ。

1.2设计要求:

(1)确定系统设计方案;

(2)进行系统的硬件设计;

(3)完成应用程序设计;

(4)应用系统的硬件和软件的调试。

第2章系统方案设计

2.1基本设计原理

基本设计原理是直接用十进制数字显示被测信号频率的一种测量装置。

它以测量周期的方法对正弦波、方波、三角波的频率进行自动的测量。

所谓“频率”,就是周期性信号在单位时间(1s)内变化的次数。

若在一定时间间隔T内测得这个周期性信号的重复变化次数N,则其频率可表示为f=N/T。

其中脉冲形成电路的作用是将被测信号变成脉冲信号,其重复频率等于被测频率fx。

时间基准信号发生器提供标准的时间脉冲信号,若其周期为1s,则门控电路的输出信号持续时间亦准确地等过闸门送到计数译码显示电路。

秒信号结束时闸门关闭,计数器停止计数。

由于计数器计得的脉冲数N是在1秒时间内的累计数,所以被测频率fx=NHz。

AT89S51单片机内部具有2个16位的定时/计数器T0与T1,其工作方法可以通过编程来实现所需的定时/计数与产生计数溢出中断要求的功能。

定时/计数器T0与T1的核心都是16位的加1计数器,TH0与TL0构成在构成定时/计数器T0加1计数器的高8位和低8位;TH1与TL1构成在构成定时/计数器T1加1计数器的高8位和低8位。

加1计数器的初值可以通过程序设定,这样就可以获得不同的计数值或定时时间。

当加1计数器用作定时器时,每个机器周期加1(使用12MHz时钟时,每1us加1),这样以机器周期为基准可以用来测量时间间隔。

当加1计数器用作计数器时,在相应的外部引脚发生从1到0的跳变时计数器加1,这样在计数闸门的控制下可以用来测量待测信号的频率。

外部输入每个机器周期被采样一次,这样检测一次从1到0的跳变至少需要2个机器周期(24个振荡周期),所以最大计数速率为时钟频率的1/24。

AT89S51单片机的时钟频率可以在0Hz—33MHz范围内自动调节,当使用12MHz时钟时,最大计数速率为500KHz。

定时/计数器的工作由相应的运行控制位TR控制,当TR置1时,定时/计数器开始计数;当TR置0时,停止计数。

在本设计方案中,我通过程序设定T0工作在计数状态下,T1工作在计时状态下。

T0计数器对输入的信号经行计数,其最大计数值为fOSC/24,当fOSC=12MHz时,T0的最大计数频率为250kHz。

 

2.2方案整体框图

 

图1系统总框图

第3章系统硬件电路设计

3.1复位电路

复位是单片机的初始化操作。

单片机系统在上电启动运行时,都需要先复位。

其作用是使CPU和系统中其他部件都处于一个确定的初始状态,并从这个状态开始工作。

而复位是一个很重要的操作方式,但单片机本身是不能自动经行复位的,必须配合相应的外部复位电路才能实现。

本设计的复位电路采用上电复位加按键手动复位,其电路如下图所示:

 

图2上电复位电路

3.2晶振电路

单片机工作是在统一的时钟脉冲控制下一拍一拍地进行的,这个脉冲是单片机控制器中的时序电路发出的。

单片机的时序就是CPU在执行指令时所需控制信号的时间顺序。

为了保证各部件的同步工作,单内部电路应在唯一的时钟信号下严格按时序进行工作。

其电路原理图如下:

图3晶振电路

3.3LED数码管显示电路

显示器是微机重要的输出设备。

显示器有显示监控结果、提供用户操作界面等功能。

在本次设计中采用了LED显示器,即数码管。

数码管的每一个数码段是一只发光二极管。

当发光二极管导通时,相应的一个点或者一个笔画发光,控制发光二极管发光组合,可以显示出所需字符。

我采用了共阴极结构。

在定义其显示字形的码段时,通过I/O口送出七段码。

其段码表如下:

表1共阴数码管段选码

显示字形

0

1

2

3

4

5

6

7

8

9

共阴段选码

3FH

06H

5BH

4FH

66H

6DH

7DH

07H

7FH

6FH

 

数码管的电路图如下:

图4数码管接线电路

本设计采用了数码管的动态显示方式,即轮流点亮各数码管,对数码管进行扫描。

在任何时刻只給一个数码管通电,通电一定时间后再给下一个数码管通电。

只要刷新频率足够高,动态显示方式同样可以实现稳定显示。

这样就可以节约I/O口。

第4章系统软件设计

4.1主程序流程图

 

图5程序流程图

4.2初始化模块

voidmain(void)

{

unsignedchari;

TMOD=0x15;//定义定时器0为计数方式,定时器1为计时方式,均工作在方式1

TH0=0;//定时器0初值高8位为0

TL0=0;//定时器0初值低8为0

TH1=(65536-5000)/256;//定时器1初值高8位

TL1=(65536-5000)%256;//定时器初值低8位

TR1=1;//启动定时器1

TR0=1;//启动定时器0

ET0=1;//开定时器0中断

ET1=1;//开定时器1中断

EA=1;//开总中断

4.3信号频率测量模块

while

(1)

{

if(flag==1)//如果定时时间到了1s

{

flag=0;//标志位清零

x=T0count*65536+TH0*256+TL0;//获得整形的频率值

4.4数码管显示模块

for(i=0;i<8;i++)

{

temp[i]=0;//赞存缓冲区清零

}

i=0;

while(x/10)//将频率值的每一位分离出来,存进temp数组

{

temp[i]=x%10;

x=x/10;

i++;

}

temp[i]=x;

for(i=0;i<6;i++)

{

dispbuf[i]=temp[i];//将暂存数组的数据赋给显示数组

}

timecount=0;//计时清零

T0count=0;//计数清零

TH0=0;//计时器0初值清零

TL0=0;//计时器0初值清零

TR0=1;//重新启动定时器0

4.5程序中断模块

voidt0(void)interrupt1using0

{

T0count++;

}

voidt1(void)interrupt3using0

{

TH1=(65536-5000)/256;

TL1=(65536-5000)%256;//重装初值

timecount++;

if(timecount==200)

{

TR0=0;//关闭定时器0,为了读出定时器0计数个数

timecount=0;//timecount清零,重新计时

flag=1;//置标志位通知主程序1s已到

}

4.6数码管扫描模块

P2=0xff;//关闭所有数码管

P0=dispcode[dispbuf[dispcount]];//先确定相应数码管的段码,送入段码

P2=dispbit[dispcount];//送入位码

dispcount++;//下一次扫描下一位数码管

if(dispcount==8)//8位数码管

{

dispcount=0;//扫描完第7个,回头扫描第0个

}

第5章系统仿真及调试

5.1C程序编译

图6程序编译图

 

5.2Proteus仿真

选取较小频率为10Hz时:

图7较小频率显示图

选取中间频率为12000Hz时:

图8中间频率显示图

选取较大频率为23000Hz时:

图9较大频率显示图

心得体会

在单片机应用系统设计时,必须先确定该系统的技术要求,这是系统设计的依据和出发点,整个设计过程都必须围绕这个技术要求来工作。

在设计时遵循从整体到局部也即自上而下的原则。

把复杂的问题分解为若干个比较简单的、容易处理的问题,分别单个的加以解决。

将总任务分解成可以独立表达的子任务,这些子任务再向下分,直到每个子任务足够简单,能够直接而容易的实现为止。

在程序调试时应按各个功能模块分别调试。

在程序设计时,正确合理的设计是非常重要的,正确的程序设计包括程序的结构是否合理,一些循环结构和循环指令的使用是否恰当,能否使用较少的循环次数或较快的指令,是否能把某些延迟等待的操作改为中断申请服务,能否把某些计算方法和查表技术适当简化等。

另外程序的设计要具有可扩展性,程序的结构要标准化,便于阅读、修改和扩充。

通过本次课程设计,我更加地了解和掌握单片机的基本知识和基本的编写程序,也更加深入地了解单片机这么课程,掌握汇编语言的设计和调试方法。

对于认识到自己在知识方面存在的不足,明确今后的学习方向是非常有益的。

参考文献

《单片机原理与应用》王迎旭等编机械工业出版社

《51系列单片机设计实例》楼然苗等编北京航空航天大学出版社

《计算机硬件技术基础实验教程》黄勤等编重庆大学出版社

《微型计算机接口技术及应用》刘乐善主编华中科技大学出版社

《单片微型计算机原理及接口技术》陈光东等华中科技大学出版社

 

附录A仿真总图

 

附录B程序清单

#include

unsignedcharcodedispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//定义数码管位选码

unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};

unsignedchardispbuf[8]={0,0,0,0,0,0,10,10};//显示数码组

unsignedchartemp[8];//暂存数组

unsignedchardispcount;//扫描位的记录

unsignedcharT0count;//计数次数

unsignedchartimecount;//定时器中断次数

bitflag;//定义标志位

unsignedlongx;//定义变量用来存放频率值

/*******初始化模块*******/

voidmain(void)

{

unsignedchari;

TMOD=0x15;//定义定时器0为计数方式,定时器1为计时方式,均工作在方式1

TH0=0;//定时器0初值高8位为0

TL0=0;//定时器0初值低8为0

TH1=(65536-5000)/256;//定时器1初值高8位

TL1=(65536-5000)%256;//定时器初值低8位

TR1=1;//启动定时器1

TR0=1;//启动定时器0

ET0=1;//开定时器0中断

ET1=1;//开定时器1中断

EA=1;//开总中断

/*******信号频率测量*******/

while

(1)

{

if(flag==1)//如果定时时间到了1s

{

flag=0;//标志位清零

x=T0count*65536+TH0*256+TL0;//获得整形的频率值

/*******数码管显示*******/

for(i=0;i<8;i++)

{

temp[i]=0;//赞存缓冲区清零

}

i=0;

while(x/10)//将频率值的每一位分离出来,存进temp数组

{

temp[i]=x%10;

x=x/10;

i++;

}

temp[i]=x;

for(i=0;i<6;i++)

{

dispbuf[i]=temp[i];//将暂存数组的数据赋给显示数组

}

timecount=0;//计时清零

T0count=0;//计数清零

TH0=0;//计时器0初值清零

TL0=0;//计时器0初值清零

TR0=1;//重新启动定时器0

}

}

}

/*******程序中断*******/

voidt0(void)interrupt1using0

{

T0count++;

}

voidt1(void)interrupt3using0

{

TH1=(65536-5000)/256;

TL1=(65536-5000)%256;//重装初值

timecount++;

if(timecount==200)

{

TR0=0;//关闭定时器0,为了读出定时器0计数个数

timecount=0;//timecount清零,重新计时

flag=1;//置标志位通知主程序1s已到

}

/*******数码管扫描*******/

P2=0xff;//关闭所有数码管

P0=dispcode[dispbuf[dispcount]];//先确定相应数码管的段码,送入段码

P2=dispbit[dispcount];//送入位码

dispcount++;//下一次扫描下一位数码管

if(dispcount==8)//8位数码管

{

dispcount=0;//扫描完第7个,回头扫描第0个

}

}

电气信息学院课程设计评分标准

环节

项目

评价

及格

不及格

实践环节(70%)

1、设计方案合理性与创造性

2、开发板焊接及其调试完成情况

3、硬件设计或软件编程完成情况

4、硬件测试或软件调试结果*

5、解决问题能力及答辩情况

6、纪律和出勤情况

设计报告(30%)

1、设计报告内容完整、规范,

2、图纸正确、清晰,

3、设计步骤规范、正确,

4、设计结果可行

综合评价

 

课程设计成绩评定为:

□优□良□中□及格□不及格

 

指导老师签名:

________________

日期:

________________

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 简洁抽象

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1