
基于51单片机的时钟秒表.doc
20页目 录摘要 11 设计目的及要求 21.1 设计目的 21.2 设计要求 22 设计方案选择 32.1 芯片简介 32.2 总体设计思路 32.3 单元电路设计 4 2.3.1 时钟模块 42.3.2 复位电路模块 42.3.3 控制模块 52.3.4 显示模块 53 软件设计 63.1整体程序设计思路 63.2 程序流图 63.3 主要程序代码 84 仿真调试 114.1 keil简介 114.1 keil与protues联调 114.2仿真实现 125 硬件实现 125.1 程序下载步骤 125.1 硬件调试 136 拓展 146.1 设计原理 146.2 主要程序清单 146.3 仿真实现 157 心得体会 16参考文献 17摘要本设计的数字秒表系统采用STC89C52单片机为中心器件,利用其定时器/计数器原理,结合LED数码管以及按键电路来设计计时器将软、硬件有机地结合起来,使得系统能够实现四位LED显示,显示时间为00.00~99.99秒,计时精度为0.01秒,能正确地进行计时同时,我在此基础上,又设计了时钟秒表定时器,可以显示年、月、日、星期、时间进制、时、分、秒、、以及闹钟启/停状态,可以实现时间的调整,时钟/秒表功能的转换,闹钟的启/停。
其中软件系统采用C语言编写程序,包括显示程序,定时中断服务,延时程序等,并在keil中调试运行,硬件系统利用PROTEUS强大的功能来实现,简单切易于观察,在仿真中就可以观察到实际的工作状态,利用单片机开发板可下载程序,实现硬件实现关键词:秒表,时钟,定时/计数器1 设计目的及要求1.1 设计目的本设计主要是应用Proteus软件和嵌入式C语言编程工具,结合单片机原理及应用、微机原理与接口技术等专业课程,强化和巩固专业理论基础,掌握Proteus仿真的技巧和嵌入式C语言编程工具,提高单片机开发能力,并为嵌入式开发打下基础1.2 设计要求试用定时器/计数器设计一个简单的秒表,能显示计时状态和结果要求进行电路仿真实验,并使用C语言进行程序的开发2 设计方案选择2.1芯片简介本设计选择采用STC89C52单片机为核心STC89C52是一个低电压、高性能CMOS8位单片机带有64K字节的可反复擦写的程序存储器和128字节的存取数据存储器RAM,这种器件采用ATMEL公司的高密度、不容易丢失存储技术生产,并且能够与MCS-52系列的单片机兼容片内含有8位中央处理器和闪烁存储单位,有较强的功能的STC89C52单片机能够被应用到控制领域中。
STC89C52提供以下的功能标准:4K字节闪烁存储器,128字节随机存取数据存储器,32个I/O口,2个16位定时/计数器,1个5向量两级中断结构,1个串行通信口,片内振荡器和时钟电路另外,STC89C52还可以进行0HZ的静态逻辑操作,并支持两种软件的节电模式闲散方式停止中央处理器的工作,能够允许随机存取数据存储器、定时/计数器、串行通信口及中断系统继续工作2.2 总体设计思路 本设计使用89C52芯片作为控制芯片,复位电路和时钟电路构成单片机最小系统利用P1口8个引脚接上拉电阻,然后连接四位共阴极数码管段选段即P0.0—P0.7分别连接共阴极数码管的A—DP脚,P1.0—P1.3分别反相器74HC04再与数码管的位选端1—4脚连接,实现秒表的显示利用P3.2和P3.3分别连接了2个按键,分别用来控制秒表复位、开始/暂停单片机控制原理图如下: 图2.2 单片机控制原理图2.3单元电路设计 本设计主要分为时钟电路模块,复位电路模块,显示模块和控制模块。
设计方案如下:2.3.1 时钟模块 图2.3 时钟电路如上图所示,89C52单片机的时钟信号通常用内部振荡方法得到,在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振)或陶瓷谐振器,就构成了内部振荡方法由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲晶振通常选择6MHz、12MHz、24MHz本设计采用12MHz晶振图中电容C1、C2起到稳固振荡频率、快速起振的作用电容值一般为5—30pF本设计选用22pF电容2.3.2 复位电路模块 图2.4 复位电路复位操作完成电路的初始化,使单片机从一种确定的状态开始运行由上图可知,控制模块实际上就是单片机的最小系统本设计采用常用的上电且开关复位电路上电后,由于电容的充电,使RST持续一段高电平时间当单片机已在运行中时,按下复位键也能使RST持续一段时间的高电平,从而实现上电且开关复位的操作此处,C3电容取20uF,R1=1K2.3.3 控制模块控制部分电路连接如下图所示: 图2.5 控制电路 单片机检测按键的原理是:单片机的I/O口既可作为输出也可作为输入使用,当检测按键时,用的是它的输入功能,我们把按键的一端接地,另一端与单片机的某个I/O口相连,开始时先给该I/O口赋一高电平,然后让单片机不断的检测该I/O口是否变为低电平,当按键闭合时,即相当于该I/O口通过按键与地相连,变成低电平,程序一旦检测到I/O口变为低电平则说明按键被放下,然后执行相应的指令。
本设计如图2.5所示,1个独立按键K2接到P3口的P3.2端,K2键即既可以当作开始键又可以当作暂停键,同时也可当复位键同时借助于复位电路中按键K1也可以实现秒表的复位,当需要秒表重新计时,利用K1键复位,当程序出现错误时,可以随时使电路复位2.3.4 显示模块显示部分电路设计如下图: 图2.6 显示模块电路图显示电路我们采用的是数码管显示电路用4个共阴极LED显示,LED是七段式显示器,内部有7个条形发光二极管和1个小圆点发光二极管组成,根据各管的亮暗组合成字符在用数码管显示时,我们有静态和动态两种选择,静态显示程序简单,显示稳定,但是占用端口比较多;动态显示所使用的端口比较少,可以节省单片机的I/O口在设计中,我们采用LED动态显示,用P0口驱动显示由于P0口的输出级是开漏电路,用它驱动时需要外接上拉电阻才能输出高电平P1.O—P1.3提供位选择共阴极数码管用非门74HC04反相驱动3 软件设计(1) 实现计时利用单片机内部T0计时器实现计时,首先给定时器工作方式寄存器TMOD赋值0x01选定T0定时器工作在方式1接着确定定时初值TH0=(65536—10000)/256;TL0=(65536—10000)%256实现10ms的定时,利用中断一次实现0.01秒定时。
(2)实现时间显示利用单片机P1端口控制数码管的位选,利用P0端口控制数码管的段选,只要两个数码管位选段选间隔的时间适当,就可以实现动态显示时间 (3)实现按键控制利用单片机P3复用端口输入按键控制命令,可以将与P3.2端口相连的按键定义为启动/暂停按键,复位按键3.1 整体程序设计思路 此次设计中,定时/计数器选择定时/计数器T0,工作于工作方式1,即16位定时/计数器利用定时器定时中断,每定时10ms即产生一次中断每发生一次中断即定时0.01s,没发生100次中断即定时1sP3.2口为秒表启动/暂停控制按键,在键值处理子程序中,每检测到一次低电平,按键K1计数值加一,当此值为奇数时,秒表启动,当此值为偶数时,秒表暂停P3.3口为秒表复位控制按键,每检测到一次低电平,秒表停止计时,显示恢复为00.00另外,独立按键在闭合时存在抖动现象,所以编写键盘检测程序时,需在检测按下时加入去抖延时,检测松手时就不用了3.2 程序流图主程序: 中断子程序: 按键检测子程序: 3.3 主要程序代码#include
