52单片机的秒表参考模板.docx

上传人:b****5 文档编号:7962926 上传时间:2023-01-27 格式:DOCX 页数:13 大小:452.76KB
下载 相关 举报
52单片机的秒表参考模板.docx_第1页
第1页 / 共13页
52单片机的秒表参考模板.docx_第2页
第2页 / 共13页
52单片机的秒表参考模板.docx_第3页
第3页 / 共13页
52单片机的秒表参考模板.docx_第4页
第4页 / 共13页
52单片机的秒表参考模板.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

52单片机的秒表参考模板.docx

《52单片机的秒表参考模板.docx》由会员分享,可在线阅读,更多相关《52单片机的秒表参考模板.docx(13页珍藏版)》请在冰豆网上搜索。

52单片机的秒表参考模板.docx

52单片机的秒表参考模板

1单片机的应用领域

目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。

导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种职能IC卡,名用豪华车辆的安全保障系统,摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。

更不用说自动控制领域的机器人、智能仪表、医疗器械了。

因此,的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。

单片机广发应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分为如下几个范畴:

1.1在智能仪器仪表上的应用

单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用与仪器仪表中,结合不同类型的传感器,可实现诸如电压、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。

采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。

例如精密的测量设备(示波器,各种分析仪)。

1.2在工业控制中的应用

用单片机可以构成形式多样的控制系统、数据采集系统。

例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二极管控制系统等。

1.3在家用电器中的应用

可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭煲、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子称量设备,五花八门,无所不在。

1.4在计算机网络和通信领域中的应用

现代的单片机普遍具备通信接口,可以很方便的与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上实现了单片机智能控制,从手机、电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可以兼得移动电话,集群移动通信,无线电对讲机等。

1.5单片机在医用设备领域中的应用

单片机在医用设备中的用途亦相当广泛,例如易用呼吸机,各种分析仪,监护仪,超生趁断设备及病床呼叫系统等等。

1.6在各大型电器中的模块化的应用

某些专用单片机设计用于实现特定功能,从而在各种电路中进行模块化应用,而不要求使用人员了解其内部结构。

如音乐集成单片机,看似简单的功能,微缩在纯电子芯片中(有别于磁带机的原理),就需要复习的类似与计算机的原理。

如:

音乐信号一数字的形式存于存储器中(类似于ROM),由微控制器读出,转化为模拟音乐电信号(类似于声卡)

1.7单片机在汽车设备领域中应用

AT89C52单片机在汽车电子中的应用非常广泛,例如汽车中的发动机控制器,基于CAN总线的汽车发动机智能电子控制器,GPS导航系统,abs防抱死系统,制动系统等等。

此外,单片机在工商、金融、科研、教育,国防航空航天等领域都有着十分广泛的用途。

以89c52为例讲解单片机的引脚及相关AT89C52单片机的引脚图如图1所示.

图1单片机引脚图

40个引脚按引脚功能大致可分为4个种类:

电源、时钟、控制和I/O引脚。

  1.电源:

(1)VCC·芯片电源,接+5V;

 

(2)VSS·接地端;

注:

用万用表测试单片机引脚电压一般为0V或者5V,这是标准的TTL电平。

但有时候在单片机程序正在工作时候测试结果并不是这个值而是介于0V~+5V之间,其实这是万用表的响应速度没这么快而已,在某一个瞬间单片机引脚电压仍保持在0V或5V。

2.时钟:

XTAL1、XTAL2·晶体振荡电路反相输入端和输出端。

3.控制线:

控制线共有4根:

(1)ALE/PROG:

地址锁存允许/片内EPROM编程脉冲

ALE功能:

用来锁存P0口送出的低8位地址

PROG功能:

片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。

(2)PSEN:

(3)RST/VPD:

复位、备用电源。

RST(Reset)功能:

复位输入端。

VPD功能:

在Vcc钓点的情况下,接备用电源。

(4)EA/Vpp:

内外ROM选择/片内EPROM编程电源。

EA功能:

内外ROM选择端。

Vpp功能:

片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。

4.I/O线。

89C52共有4个8位并行I/O端:

P0、P1、P2、P3、口,共32个引脚。

P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)

5.P3口第一功能:

P3.0RXD串行输入口

P3.1TXD串行输出口

P3.2INT0外部中断0(低电平有效)、

P3.3INT1外部中断1(低电平有效)

P3.4T0定时计数器0

P3.5T1定时计数器1

P3.6WR外部数据存储器写选通(低电平有效)

P3.7RD外部数据存储器写选通(低电平有效)

2系统设计任务和要求以及方案硬件设计

2.1设计任务

设计一个单片机控制的秒表系统。

利用单片机的定时器、计数器定时和记数的原理,结合显示电路、LED数码管以及按键来设计计时器。

将软、硬件有机的结合起来,使得系统能够正确的进行加计时,数码管能够正确的显示时间。

2.2设计要求

1.开机时数码显示00。

2两位LED显示,相识时间为00~99秒。

3.每一秒钟,计数器自动加1。

4.按键控制计数,分别控制开始计数、停止计数和归零,功能分配如下所示:

按键K1:

控制秒表的启动、停止

按键K2:

控制数码管显示清零

2.3系统总体方案

本系统采用89C52系列单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合硬件电路如电源电路,晶振电路,复位电路,显示电路,以及一些按键电路等来设计计数器,将软、硬件有机的结合起来。

其中软件系统采用C语言编写程序,包括显示程序,加1技术程序,演示程序,按键消抖程序等,并在WAVE中调试运行,硬件系统利用PROTEUS强大功能来实现,简单且易于观察,在仿真中就可以观察到实际的工作状态。

系统框图如图2所示。

显示电路

外围电路

单片机

电源电路

键盘电路

图2系统框图

2.4硬件电路设计

本系统中,硬件电路主要有电源电路,晶振电路,复位电路,显示电路,以及一些按键电路等。

(1)单片机简介

本系统设计采用89C52系列单片机。

AT89C52是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器。

该器件采用ATMEL高密度非意识存储器制造技术制造,与工业标准的MCS-52指令集和输出管脚相兼容(由于在微机原理中学过C-52的具体知识,这里不再详细说明)。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C52是一种高效的微控制器。

(2)电源电路

电源电路是系统最基本的部分电路,任何电路都离不开电源部分,由于三端集成稳压器件所组成的稳压电源线路简单,性能稳定,工作可靠,调整方便,已逐渐取代分立元件,在生产中被广泛采用,由于是小系统,我们采用7809电源提供+5V稳压电压。

(1)晶体振荡电路

MCS-52单片机内部的振荡电路是一个高增益反相器,引线XTAL1和XTAL2分别为反向振荡放大器的输入及内部时钟工作电路的输入和来自反向振荡器的输出,该反向放大器可以配置为片内振荡器。

这里,我们选用52单片机12MHz的内部振荡方式,电路如下:

电容器C1、C2起稳定振荡频率,快速起振的作用,C1和C2可在20-100PF之间取,这里取30P,接线时要晶体振荡器X1极可能接近单片机。

电路图如图3所示。

图3晶体振荡电路图

(2)复位电路

采用上电+按键复位电路,上电后,由于电容充电,使RST持续一段高电平时间。

当单片机已在运行之中时,按下复位键也能使用RST持续一段时间的高电平,从而实现上电加开关复位的操作。

这不仅能使单片机复位,而且还能使单片机的外围芯片也同时复位。

电路图如图4所示。

图4复位电路

(3)显示电路

显示电路既可以选用液晶显示器,也可以选用数码管显示。

我们采用的是数码管显示电路。

用2个共阳极LED显示,LED是七段式显示器,内部有7个条形发光二极管和1个小圆点发光二极管组成,根据各管的亮暗组合成字符。

再用数码管显示时,我们静态和动态两种选择,静态显示程序简单,显示稳定,但是占用端口比较多;动态显示所使用的端口比较少,可以节省单片机的I/O口。

在设计中,我们采用LED动态显示,用P0口驱动显示。

由于P0口输出级是开漏电路,用它驱动是需要上拉电阻才能输出高电平。

电路图如图5所示。

图5显示电路图

(4)键盘电路

在按键电路中,我们可以在I/O口直接接按键,或者通过I/O设计一个键盘,然后通过键盘扫描程序判断是否有键按下等。

键盘扫描电路节省I/O口,但程序有些复杂,在这里,由于我们所用的按键较少,且系统是一个小系统,有足够的I/O口可以使用,为了使程序简化,我们采用按键电路,用部分P1口做开关,P1.1为开始停止,P1.0为清零,外用中断INT1开始,另外用软件发消除振动。

电路图如图6所示。

图6键盘电路图

2.5硬件主电路图设计

用pretues画出其硬件主电路图如图7所示。

图7硬件主电路图

3软件设计

3.1软件设计概述

在软件设计中,一般采用模块化的程序设计方法,它具有明显的优点。

把一个多功能的复杂的程序划分为若干个简单的、功能单一的程序模块,有利于程序的设计和调试,有利于程序的优化和分工,提高了程序的阅读性和可能性,使程序的结构层次一目了然。

应用系统的程序由包含多个模块的主程序和各种子程序组成。

各程序模块都要完成一个明确的任务,实现某个具体的功能,如:

加计数延时,计数和显示等,在具体需要时调用相应的模块即可。

功能描述:

用2位LED数码显示“秒表”,显示时间为00~99秒,每秒自动加:

1;一个:

“开始”“暂停”键,一个“清零”键。

3.2主程序流程图

这里采用顺序结构,通过对按键的扫描,判断要实现什么功能。

如图8所示。

图8主流程框图

3.3程序中个函数设计

(1)初始化函数设计

voidinit

()

{

TMOD=0x10;//定时器1工作方式1

TH1=0xd8;

TL=0xf0;//延时初始化设置

//TR1=1;

EA=1;//开总开关

ET1=1;//开定时

}

(2)显示函数设计

voidwrited(ucharnum'ucharaddr)

{

P2=0xff;//关显示

P0=dulatab[num];//送数据

P2=welatab[addr];

delay(4);

}

voiddisplay(ucharsec)

{

ucharsech,secl;

sech=sec/10;

secl=sec%10;

writeled(sech,0);

writeled(secl,1);

}

(3)按键函数设计

voidkeyscan()

{

if(start==0)

{

delay

(2);

if(start==0)

{

TR=~TR1;

while(start==0)

{

dislay(sec);

}

}

}

if(stop==0&&TR1==0)

{

delay

(2);

if(stop==0)

{

sec=0;

while(stop==0)

{

display(sec);

}

}

}

}

(4)延时函数设计

voiddelay(uchartime)

{

uchari,j;

for(i=0;i

{

for(j=0;j<110;j++)

}

}

3.4C语言主程序设计

主程序如下:

#include

#defineucharunsignedchar

sbitstart=P1^1;

sbitstop=P1^0;

ucharcodedulatab[]={0x3f,0x06,0x5b;0x4f,0x66,

ox6d,0x7d,0x07,0x7f,0x6f,0x40};//数字编码0-9

ucharcodewelatab[]={0xfe,0xfd};//位控制字

ucharmsec,sec;

voiddelay(uchartiame)//延时

{

uchari,j;

for(i=0;i

{

for(i=0;j<110;j++);

}

}

voidwriteled(ucharmun,addr)

{

P2=0xff;//关显示

P0=dulatab[num];//送数据

P2=welatab[addr];

delay(4);

}

voiddisplay(ucharsec)

{

ucharsech,secl;

sech=sec/10;

secl=sec%10;

writeled(sech,0);

writeled(secl,1);

}

voidinit

()

{

TMOD=0x10;//定时器1工作方式1

TH1=0xd8;

TL=0xf0;//延时初始化设置

//TR1=1;

EA=1;//开总开关

ET1=1;//开定时

}

voidkeyscan()

{

if(start==0)

{

delay

(2);

if(start==0)

{

TR=~TR1;

while(start==0)

{

dislay(sec);延时防抖

}

}

}

if(stop==0&&TR1==0)

{

delay

(2);//延时防抖

if(stop==0)

{

sec=0;

while(stop==0)

{

display(sec);

}

}

}

}

voidmain()

{

init();

while

(1)

{

display(sec);

keyscan();

}

}

voidtimer1()interrupt3

{

TH1=0xd8;

TL1=0xf0;

msec++;

if(msec==100)

{

msec=0;

sec++;

if(sec==100)

{

sec=0;

}

}

}

(本资料素材和资料部分来自网络,仅供参考。

请预览后才下载,期待您的好评与关注!

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

当前位置:首页 > 农林牧渔 > 林学

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

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