单片机课程方案设计书数字频率计Word下载.docx

上传人:b****6 文档编号:18991816 上传时间:2023-01-02 格式:DOCX 页数:19 大小:264.73KB
下载 相关 举报
单片机课程方案设计书数字频率计Word下载.docx_第1页
第1页 / 共19页
单片机课程方案设计书数字频率计Word下载.docx_第2页
第2页 / 共19页
单片机课程方案设计书数字频率计Word下载.docx_第3页
第3页 / 共19页
单片机课程方案设计书数字频率计Word下载.docx_第4页
第4页 / 共19页
单片机课程方案设计书数字频率计Word下载.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

单片机课程方案设计书数字频率计Word下载.docx

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

单片机课程方案设计书数字频率计Word下载.docx

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

在EPROM编程时,P0口接收指令字节,同时输出指令字节在程序校验时。

程序校验时需要外接上拉电阻。

P1口:

P1口是一带有内部上拉电阻的8位双向I/O口。

P1口的输出缓冲能接受或输出4个TTL逻辑门电路。

当对P1口写1时,它们被内部的上拉电阻拉升为高电平,此时可以作为输入端使用。

当作为输入端使用时,P1口因为内部存在上拉电阻,所以当外部被拉低时会输出一个低电流(IIL)。

P2口:

P2是一带有内部上拉电阻的8位双向的I/O端口。

P2口的输出缓冲能驱动4个TTL逻辑门电路。

当向P2口写1时,通过内部上拉电阻把端口拉到高电平,此时可以用作输入口。

作为输入口,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出电流(IIL)。

P2口在访问外部程序存储器或16位地址的外部数据存储器(例如MOVX@DPTR)时,P2口送出高8位地址数据。

在这种情况下,P2口使用强大的内部上拉电阻功能当输出1时。

当利用8位地址线访问外部数据存储器时(例MOVX@R1),P2口输出特殊功能寄存器的内容。

当EPROM编程或校验时,P2口同时接收高8位地址和一些控制信号。

P3口:

P3是一带有内部上拉电阻的8位双向的I/O端口。

P3口的输出缓冲能驱动4个TTL逻辑门电路。

当向P3口写1时,通过内部上拉电阻把端口拉到高电平,此时可以用作输入口。

P3口同时具有AT89C51的多种特殊功能,具体如下表1所示:

端口引脚

第二功能

P3.0

RXD(串行输入口)

P3.1

TXD(串行输出口)

P3.2

(外部中断0)

P3.3

(外部中断1)

P3.4

T0(定时器0)

P3.5

T1(定时器1)

P3.6

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

P3.7

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

表1P3口的第二功能

RST:

复位输入。

当振荡器工作时,RST引脚出现两个机器周期的高电平将使单片机复位。

ALE/

:

当访问外部存储器时,地址锁存允许是一输出脉冲,用以锁存地址的低8位字节。

当在Flash编程时还可以作为编程脉冲输出(

)。

一般情况下,ALE是以晶振频率的1/6输出,可以用作外部时钟或定时目的。

但也要注意,每当访问外部数据存储器时将跳过一个ALE脉冲。

程序存储允许时外部程序存储器的读选通信号。

当AT89C52执行外部程序存储器的指令时,每个机器周期

两次有效,除了当访问外部数据存储器时,

将跳过两个信号。

/VPP:

外部访问允许。

为了使单片机能够有效的传送外部数据存储器从0000H到FFFH单元的指令,

必须同GND相连接。

需要主要的是,如果加密位1被编程,复位时EA端会自动内部锁存。

当执行内部编程指令时,

应该接到VCC端。

XTAL1:

振荡器反相放大器以及内部时钟电路的输入端。

XTAL2:

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

在本次设计中,采用89C51作为CPU处理器,充分利用其硬件资源,结合D触发器CD4013,分频器CD4060,模拟转换开关CD4051,计数器74LS90等数字处理芯片,主要控制两大硬件模块,量程切换以及显示模块。

下面还将详细说明。

(3)、信号调理及放大整形模块:

放大整形系统包括衰减器、跟随器、放大器、施密特触发器。

它将正弦输入信号Vx整形成同频率方波Vo,幅值过大的被测信号经过分压器分压送入后级放大器,以避免波形失真。

由运算放大器构成的射级跟随器起阻抗变换作用,使输入阻抗提高。

同相输入的运算放大器的放大倍数为(R1+R2)/R1,改变R1的大小可以改变放大倍数。

系统的整形电路由施密特触发器组成,整形后的方波送到闸门以便计数。

由于输入的信号幅度是不确定、可能很大也有可能很小,这样对于输入信号的测量就不方便了,过大可能会把器件烧毁,过小可能器件检测不到,所以在设计中采用了这个信号调理电路对输入的波形进行阻抗变换、放大限幅和整形,信号调理部分电路具体实现电路原理图和参数如下图4:

图4信号放大模块电路图

(4)、时基信号产生电路:

CD4013------双上升沿D触发器,引脚及功能见如下图5:

图5D触发器引脚及功能图

CD4013由两个相同的、相互独立的数据型触发器构成。

每个触发器有独立的数据置位复位时钟输入和Q及Q非输出。

此器件可用作移位寄存器,且通过将Q非输出连接到数据输入,可用作计数器和触发器。

在时钟上升沿触发时,加在D输入端的逻辑电平传送到Q输出端。

置位和复位或复位线上的高电平完成。

CD4060------14位二进制串行计数器,引脚及功能见如下图6:

CD4060由一震荡器和14极二进制串行计数器位组成,震荡器的结构可以是RC或晶振电路。

CR为高电平时,计数器清零且振荡器使用无效,所有的计数器位均为主从触发器CP1非(和CP0)的下降沿计数器以二进制进行计数,在时钟脉冲线上使用施密特触发器对时钟上升和下降时间无限制。

图6进制串行计数器引脚及功能图

时基信号的产生原理:

本电路采用32768HZ晶体震荡器,利用CD4060芯片经过14级分频得到2HZ的信号(32768/214),在经过CD4013双D触发器经过二分频得到0.5HZ的方波,即输出秒脉冲信号使单片机进行计数。

(5)、显示模块

1602基本技术:

1)、主要功能

A、40通道点阵LCD驱动。

B、可选择当作行驱动或列驱动。

C、输入/输出信号:

输出,能产生20×

2个LCD驱动波形。

输入,接受控制器送出的串行数据和控制信号,偏压(V1∽V6)。

D、通过单片机控制将所测的频率信号读数显示出来。

2)、技术参数

2.1)极限参数表2:

名称

符号

标准值

单位

MIN

TYPE

MAX

电路电源

VDD-VSS

-0.3

7.0

V

LCD驱动电压

VDD-VEE

VDD-13.5

VDD+0.3

输入电压

VIN

静电电压

-

100

工作温度

-20

+70

°

C

储存温度

-30

+80

表2极限参数表

2.2)电参数表3:

测试条件

单位

输入高电平

VIH

2.2

VDD

输入低电平

VIL

0.6

输出高电平

VOH

IOH=0.2mA

2.4

输出低电平

VOL

IOL=1.2mA

0.4

工作电流

IDD

VDD=5.0V

2.0

mA

液晶驱动电压

VDD-VEE

Ta=0°

4.9

Ta=25°

4.7

Ta=50°

4.5

表3电参数表

3)、时序特性表4:

项目

测试条件

允许时间周期

TCYCE

5.1a5.1b

1000

ns

允许脉冲宽度,高电平

PWEH

450

--

允许上升和下降时间

tErtEf

25

地址建立时间

tAS

140

数据延迟时间

tDDR

320

数据建立时间

tDSW

195

数据保持时间

tH

10

DATAHOLDTIME

tDHR

20

地址保持时间

tAH

表4时序特性表

4)、引脚和指令功能

4.1)模块引脚功能表5:

引线号

功能

1

Vss

接地

0V

2

5V±

10%

3

VEE

保证VDD-VEE=4.5∽5V电压差

4

RS

寄存器选择信号

H:

数据寄存器L:

指令寄存器

5

R/W

读/写信号

读L:

6

E

片选信号

下降沿触发,锁存数据

7

|

14

DB0

DB7

数据线

数据传输

表5模块引脚功能表

4.2)寄存器选择功能表6:

操作

指令寄存器(IR)写入

忙标志和地址计数器读出

数据寄存器(DR)写入

数据寄存器读出

表6寄存器功能选择表

4.3)指令功能

格式:

RSR/WDB7DB6DB5DB4DB3DB2DB1DB0

共11种指令:

清除,返回,输入方式设置,显示开关,控制,移位,功能设置,CGRAM地址设

置,DDRAM地址设置,读忙标志,写数据到CG/DDRAM,读数据由CG/DDRAM。

5)、显示位与DDRAM地址的对应关系表7:

显示位序号

12345………………40

DDRAM

地址(HEX)

第一行

0001020304..……………..27

第二行

4041424344…………….....67

表7显示位与DDRAM地址关系表

(6)、软件设计

1)、主程序main流程图

图7主程序流程图

(2)、程序

/*简易数字频率计:

T1定时计器,T0计数器,由P34(/T0)口输入待测频率*/

/*T1定时1S,在这1S内T1的计数值就是待测的频率值。

*/

#include<

reg52.h>

//头文件

intrins.h>

#defineucharunsignedchar//宏定义

#defineuintunsignedint//宏定义

sfr16DPTR=0x82。

//定义DPTR

bitstatus_F=1。

//状态标志位

uintaa,qian,bai,shi,ge,bb,wan,shiwan。

//定义变量

ucharcout。

unsignedlongtemp。

//定义长整型变量

/*数码管显示0-9*/

ucharcode

table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}。

/*子函数声明*/

voiddelay(uintz)。

voidinit()。

voiddisplay(uintshiwan,uintwan,uintqian,uintbai,uintshi,uintge)。

voidxtimer0()。

voidxtimer1()。

/*主函数*/

voidmain()

{

P0=0XFF。

//初始化P0口

init()。

//调用定时器,计数器初始化

while

(1)

{

if(aa==19)//定时20*50MS=1S

{

aa=0。

//定时完成一次后清0

status_F=1。

//完成计数

TR1=0。

//关闭T1定时槛,定时1S完成

delay(46)。

//延时较正误差

TR0=0。

//关闭T0

DPL=TL0。

//计数量的低8位

DPH=TH0。

//计数量的高8位

temp=DPTR+cout*65535。

//计数值放入变量

shiwan=temp%1000000/100000。

wan=temp%100000/10000。

qian=temp%10000/1000。

//显示千位

bai=temp%1000/100。

//显示百位

shi=temp%100/10。

//显示十位

ge=temp%10。

//显示个位

}

display(shiwan,wan,qian,bai,shi,ge)。

//调用显示函数

}

}

/*定时器,计数器初始化*/

voidinit()

temp=0。

//变量赋初值

aa=0。

cout=0。

IE=0X8A。

//开中断,T0,T1中断

TMOD=0x15。

//T1为定时器工作于方式1,T0为计数器工作于方式1

TH1=0x3c。

//定时器赋高8初值,12M晶振

TL1=0xb0。

//定时器赋低8初值,12M晶振

TH0=0。

//计数器赋高8初值初值

TL0=0。

//计数器赋低8初值

TR1=1。

//开定时器1

TR0=1。

//开计数器0

/*显示子函数*/

voiddisplay(uintshiwan,uintwan,uintqian,uintbai,uintshi,uintge)

P0=0xdf。

//P0口是位选11011111改成11111101==0XDF

P2=table[shiwan]。

//显示shiwan位

delay(5)。

P0=0xef。

//P0口是位选11101111改成11111110==0XFE

P2=table[wan]。

//显示wan位

delay(3)。

P0=0xf7。

//P0口是位选111101111改成01111111==0X7F

P2=table[qian]。

P0=0xfb。

//P0口是位选11111011改成10111111==0XBF

P2=table[bai]。

P0=0xfd。

//P0口是位选11111101改成11011111==0XDF

P2=table[shi]。

P0=0xfe。

//P0口是位选11111110改成11101111==0XEF

P2=table[ge]。

/*定时中断子函数*/

voidxtimer1()interrupt3

//定时器赋高8初值

//定时器赋低8初值

aa++。

/*计数器中断子函数*/

voidxtimer0()interrupt1

{

cout++。

/*延时子函数。

延时1MS*/

voiddelay(uintz)

uinti,j。

for(i=0。

i<

z。

i++)

for(j=0。

j<

110。

j++)。

//j上限为125

3.仿真结果与分析

此间易频率计的特点是由于加入了延时补偿,对于低频率脉冲能够准确计数,对于较高频率,则频率越高,误差越大。

但总体来讲,误差相对较小。

(1).在1~3257HZ,测量结果是准确的,如图8所示1HZ,1KHZ,3257HZ的仿真图:

图81HZ,1KHZ,3257HZ的仿真图

(2).在3258HZ~9.5KHZ的时候测量有误差并且慢慢减少。

在3258HZ时候达到最大误差0.03069%,如图9。

9.5KHZ时候达到最小误差0.01368%。

如图10:

图9测量3258HZ的仿真结果

图10测量95013HZ的仿真结果

(3).从9.6KHZ~999.7629KHZ,测量误差越来越大,在9.6KHZ为0.01458%,在999.7629KHZ

时为0.0237%

图11测量9.6KHZ、999.7629KHZ的仿真结果

四、结论

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

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

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

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

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

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

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

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

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

在设计过程中,得到了我的指导老师的悉心指导与帮助,在此一并表示衷心的感谢。

参考资料

[1]张毅坤,陈善久.单片微型计算机原理及应用.西安电子科技大学出版社,2002.

[2]张友德,赵志英,徐时亮.单片微机原理应用与实验.复旦大学出版社,2000.

[3]张毅刚,彭善元,董继承.单片机原理及应用.高等教育出版社,2003.

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

当前位置:首页 > 高等教育 > 哲学

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

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