频率计的设计报告Word下载.docx

上传人:b****6 文档编号:21638303 上传时间:2023-01-31 格式:DOCX 页数:14 大小:161.20KB
下载 相关 举报
频率计的设计报告Word下载.docx_第1页
第1页 / 共14页
频率计的设计报告Word下载.docx_第2页
第2页 / 共14页
频率计的设计报告Word下载.docx_第3页
第3页 / 共14页
频率计的设计报告Word下载.docx_第4页
第4页 / 共14页
频率计的设计报告Word下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

频率计的设计报告Word下载.docx

《频率计的设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《频率计的设计报告Word下载.docx(14页珍藏版)》请在冰豆网上搜索。

频率计的设计报告Word下载.docx

2.2.3显示模块:

数据经74LS595送出,显示电路采用四位共阴极数码管动态显示。

如图3(四位数码管)、图4(74LS595):

图3:

四位数码管图4:

74LS595

3.系统硬件电路设计

3.1系统原理框图

本方案主要以单片机为核心,利用单片机的计数定时功能来实现频率的计数并且利用单片机的动态扫描把测出的数据送到数字显示电路显示。

如图5:

四位位数码管

3.2AT89S52的介绍

8位单片机是MSC-51系列产品升级版[5],有世界著名半导体公司ATMEL在购买MSC-51设计结构后,利用自身优势技术——(掉电不丢数据)闪存生产技术对旧技术进行改进和扩展,同时使用新的半导体生产工艺,最终得到成型产品。

与此同时,世界上其他的著名公司也通过基本的51内核,结合公司自身技术进行改进生产,推广一批如51F020等高性能单片机。

AT89S52片内集成256字节程序运行空间、8K字节Flash存储空间,支持最大64K外部存储扩展。

根据不同的运行速度和功耗的要求,时钟频率可以设置在0-33M之间。

片内资源有4组I/O控制端口、3个定时器、8个中断、软件设置低能耗模式、看门狗和断电保护。

可以在4V到5.5V宽电压范围内正常工作。

不断发展的半导体工艺也让该单片机的功耗不断降低。

同时,该单片机支持计算机并口下载,简单的数字芯片就可以制成下载线,仅仅几块钱的价格让该型号单片机畅销10年不衰。

根据不同场合的要求,这款单片机提供了多种封装,本次设计根据最小系统有时需要更换单片机的具体情况,使用双列直插DIP-40的封装。

3.1.1AT89S52引脚

AT89S52引脚如下图6所示:

图6:

AT89S52引脚图

3.2.2复位电路及时钟电路

复位电路和时钟电路是维持单片机最小系统运行的基本模块。

复位电路通常分为两种:

上电复位(图7)和手动复位(图8)。

图7:

上电复位图8:

手动复位

有时系统在运行过程中出现程序跑飞的情况,在程序开发过程中,经常需要手动复位。

所以本次设计选用手动复位。

高频率的时钟有利于程序更快的运行,也有可以实现更高的信号采样率,从而实现更多的功能[6]。

但是告诉对系统要求较高,而且功耗大,运行环境苛刻。

考虑到单片机本身用在控制,并非高速信号采样处理,所以选取合适的频率即可。

合适频率的晶振对于选频信号强度准确度都有好处,本次设计选取12.000M无源晶振接入XTAL1和XTAL2引脚。

并联2个30pF陶瓷电容帮助起振。

单片机最小系统如图1所示。

3.2.3引脚功能

VCC:

电源电压;

GND:

地;

P0口:

P0口是一个8位漏极开路的双向I/O口。

作为输出口,每位能驱动8个TTL逻辑电平。

对P0端口写“1”时,引脚用作高阻抗输入。

当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。

在这种模式下,P0具有内部上拉电阻。

在flash编程时,P0口用来接收指令字节;

在程序校验时,输出指令字节。

程序校验时,需要外部上拉电阻[7]。

P1口:

P1口是一个具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL逻辑电平。

对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。

作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流。

此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入和定时器/计数器2的触发输入,P1口功能具体如表1所示。

在flash编程和校验时,P1口接收低8位地址字节。

表1P1口的第二种功能说明表

引脚号

第二功能

P1.0

T2(定时器/计数器T2的外部计数输入),时钟输出

P1.1

T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)

P1.5

MOSI(在系统编程用)

P1.6

MISO(在系统编程用)

P1.7

SCK(在系统编程用)

P2口:

P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。

对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。

在访问外部程序存储器或用16位地址读取外部数据存储器时,P2口送出高八位地址。

在这种应用中,P2口使用很强的内部上拉发送1。

在使用8位地址访问外部数据存储器时,P2口输出P2锁存器的内容。

在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。

P3口:

P3口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。

对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。

P3口亦作为AT89C51特殊功能(第二功能)使用,P3口功能如表2所示。

在flash编程和校验时,P3口也接收一些控制信号。

表2P3口的第二种功能说明表

P3.0

RXD(串行输入)

P3.1

TXD(串行输出)

P3.2

(外部中断0)

P3.3

(外部中断1)

P3.4

T0(定时器0外部输入)

P3.5

T1(定时器1外部输入)

P3.6

(外部数据存储器写选通)

P3.7

RST:

复位输入。

晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。

看门狗计时完成后,RST脚输出96个晶振周期的高电平。

特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。

DISRTO默认状态下,复位高电平有效。

XTAL1:

振荡器反相放大器和内部时钟发生电路的输入端。

XTAL2:

振荡器反相放大器的输出端。

3.2.4单片机引脚分配

根据系统设计及各模块的分析得出,单片机的引脚分配如表3所示。

表3单片机端口分配表

模块

端口

功能

显示模块

P0.0-P0.4、P2.0-P2.7

数码管频率值显示

P1.4-P1.6

LED单位显示

分频模块

P1.0-P1.2

通道选择

P1.3

清零

 

4.程序流程图与源程序

4.1程序流程图

程序流程图如图9所示:

图9:

程序流程图

4.2主程序

#include<

reg51.h>

stdio.h>

math.h>

intrins.h>

/*************************************************

定义位变量

*************************************************/

sbitSCL=P0^3;

//移位;

sbitRCL1=P0^1;

//RCL1,RCL2位码锁存时钟;

sbitRCL2=P0^2;

sbitSDATA=P0^0;

//数据位;

sbitkey=P1^0;

/************************************************

定义数组

*************************************************/

Unsignedcharcodeled1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xf1,0x38,0x39};

//0~9,r,l,c不带小数点;

段位代码宏定义

#definek000x8000

#definek010x4000

#definek020x2000

#definek030x1000

#definek100x0800

#definek110x0400

#definek120x0200

#definek130x0100

#definek200x0080

#definek210x0040

#definek220x0020

#definek230x0010

unsignedchara[4]={0};

bitint_flag;

//定时器01S到标志位

unsignedcharvolatileint_count=0;

//定时器0中断次数

unsignedcharvolatileT1count=0;

//定时器1中断次数

unsignedlongsum;

//1S内脉冲总个数

函数名:

voiddelay()

出口参数:

入口参数:

功能:

延时函数(100ms)

voiddelay(void)

{

unsignedintl;

for(l=0;

l<

500;

l++);

}

Data_Out(unsignedintn_LED,unsignedcharData_595)

n_led,data_595;

段码及显示的数据

发送数据并显示

voidData_Out(unsignedintn_LED,unsignedcharData_595)

{

unsignedchary;

RCL2=1;

//输出锁存时钟,上升有效

RCL1=1;

RCL2=0;

//段码清零;

for(y=0;

y<

8;

y++)

{

SCL=0;

//数据输入时钟,上升沿有效

SDATA=0;

SCL=1;

RCL1=0;

//发送位选信号;

16;

y++)

if((n_LED&

0x0001)==0x0001){SDATA=1;

0x0001)!

=0x0001){SDATA=0;

n_LED>

>

=1;

SCL=1;

//发送段信号;

if((Data_595&

0x80)==0x80){SDATA=1;

0x80)!

=0x80){SDATA=0;

Data_595<

<

delay();

//延迟一会;

}

/*************数据分离************

Data_con()

将所需结果按单个字符输出

************************************/

voidData_con(floatx)

unsignedintresult;

result=x;

a[3]=result%10;

//低

a[2]=(result/10)%10;

a[1]=((result/10)/10)%10;

a[0]=(((result/10)/10)/10)%10;

xianshi1()

给出显示的数据位码及段码(频率显示)

voidxianshi1()//数据显示

Data_Out(k10,led1[a[3]]);

Data_Out(k11,led1[a[2]]);

Data_Out(k12,led1[a[1]]);

Data_Out(k13,led1[a[0]]);

/********定时器0初始化************

功能:

设定初值

*************************************/

voidinit_t0(void)

TMOD=(TMOD&

0xF0)||0x01;

//定时器0工作于方式1保存高4位,低4位清零,再给低0001

TH0=(65536-50000)/256;

//定时50ms

TL0=(65535-50000)%256;

/********定时器1初始化********/

voidinit_t1(void)

0x0F)|0x50;

//timer1forcount高四位清零,在给0101计数方式,方式1

TH1=0x00;

TL1=0x00;

/************************************************

主函数

实现主要功能

voidmain(void)

{EA=1;

//开总中断

init_t0();

//初始化定时器

init_t1();

TR0=1;

//定时器开始工作

TR1=1;

ET0=1;

//定时器TO溢出中断允许

ET1=1;

//计数器T1溢出中断允许

while

(1)

if(int_flag==1)//完成1秒计时,死循环,一只扫描是否完成1秒计时

int_flag=0;

sum=TL1+TH1*256;

//+T1count*65536;

//计算1秒内的脉冲个数

//以下将数据格式化,转成LED可显示的BCD码

Data_con(sum);

int_count=0x00;

T1count=0;

TH1=0x00;

//将计数器TO的值清0

TL1=0x00;

//将计数器T0的值清0

xianshi1();

/********定时器0中断服务程序*****

T0定时开启后,做+1,溢出后中断,

进入该程序,循环20次,即1S定时完成

**************************************/

voidint_t0(void)interrupt1

TH0=(65535-50000)/256;

int_count++;

if(int_count==20)

TR1=0;

int_flag=1;

//定时器TO定时结束标志位

5.设计心得

本次课程设计有较强的综合性,不仅要求设计者能灵活使用单片机,熟练使用单片计计数器和定时器,熟练编写顺序结构程序,循环结构程序以及分支结构程序,还要求对单片机的电路连接结构,对数码管管理芯片有明确清晰的了解与认识,否则在设计的第一步就会遇到障碍。

掌握了C语言的编写程序,学会了使用PROTUTES和KEIL的仿真来实现,同时掌握了如何收集、查阅、应用文献资料,如何根据实际需要有选择的阅读书籍和正确确定系统所要使用的元器件的类型。

而且在精神方面锻炼了思想、磨练了意志。

面对存在的困难首先分析问题根据目的要求确定可实现的部分,定出那不准的方面找同学和老师讨论研究,再完善、再修改、再发现问题、再解决培养了自己的耐心、恒心及遇事不乱的精神。

看着自己亲自通过自己的知识和努力设计的频率计,心里是很欣慰的,因为我从这次课程设计不仅仅只是得到了一个自己的产品,还学到了很多,例如面对问题要保持冷静,特别是在程序的编写这一块,要找出程序的错误一定要有一个冷静的头脑,否则很难发现错误甚至是越改越错。

另外我还认识到与他人合作的重要性,虚心向别人学习,吸取别人编写程序的一些好的风格与特点再融入到自己的程序中,都是一些不错的方法。

在本次综合设计试验中我的很多方面的能力都得到了提高,尤其在单片机软件编程方面让我感触颇深。

最后,感谢在这次课程设计中王党树老师和孙广清老师及彭倩老师提供的指导和帮助!

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

当前位置:首页 > 求职职场 > 职业规划

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

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