一种基于AT89C51控制的高精度倒计时系统

发布者:phi31最新更新时间:2011-01-23 关键字:单片机 手机看文章 扫描二维码
随时随地手机看文章

  1  引  言

倒计时系统的任务, 就是对某一设定日期进行倒数, 并在显示屏显示当前至设定日期的时间, 以增强人们的关注度和紧迫感。开发实践表明: 以时钟芯片DS12C887为时钟模块、单片机AT89C51为控制模块的高精度倒计时系统具有精度高、能够长时间连续稳定地工作、使用方便的特点, 可较好满足实际需要。系统的硬件设计和软件设计如下。

2  系统的硬件设计

系统的控制模块由AT89C51单片机构成, 用于完成对串行口控制器的初始化和数据读写, 并对接收的各种数据进行识别、转储及显示。时钟芯片DS12C887提供高精度的年、月、日、时、分、秒时间,校准后直接与单片机相连。倒计时显示模块由LED数码管, 74HC595芯片和74LS245芯片组成。

系统总体框图如图1所示。

系统总体结构图
系统总体结构图
图1  系统总体结构图

2. 1  时钟模块及其与单片机的连接

时钟模块用于对时、分、秒、年、月、日和星期的计时, 由美国DALLAS 公司生产的时钟日历芯片DS12C887构成, 该芯片集成度高, 可提供年、月、日、时、分、秒, 设定每一时刻产生中断, 并且其外围电路设计简单, 性能好, 计时准确性高。DS12C887带有128字节RAM, 其中有11字节RAM 用来存储时间信息, 4字节RAM用来存储DS12C887的控制信息,为控制寄存器。用户可以在任何时候对其进行访问以对DS12C887进行控制操作, 有113字节的通用RAM 供用户使用。用户还可对DS12C887进行编程以实现多种方波的输出, 并对内部的三路中断通过软件进行控制。DS12C887为双列直插式封装, 与单片机的连接为: AD0~ AD7双向地址/数据复用线与单片机的P0口相联, 用于向单片机交换数据; AS地址选通输入脚与单片机的ALE 相联用于对地址锁存, 实现地址数据的复用; CS片选线与单片机的P2. 6相联, 用于选通时钟芯片; DS数据选通读输入引脚与单片机的读选通引脚相联, 用于实现对芯片数据的读控制; R /W读/写输入与单片机的写选通引脚相联, 用于实现对时钟芯片的写控制;MOT 直接接地, 选用INTEL 时序; IRQ 引脚与单片机的INT1相连, 用于为时间的采集提供时间基准。

2. 2  显示模块的设计

单片机将读入的DS12C887时间信息经过程序处理, 输出显示信号到P1口, 显示信息包括倒计时信息(当前距离设定时间的天数)和当前时间的星期、时、分、秒信息。显示电路主要由9个LED 数码管, 9 片74HC595 芯片和一片74LS245芯片组成。

设计采用动态显示方式, 即将所有位的段选线并联在一起由一个8位I /O 口控制。74HC595是硅结构的高速CMOS器件, 内置8 位移位寄存器和一个存储器, 具有三态输出功能, 当使能端OE 为低电平时, 将存储寄存器的数据输出到总线。利用74HC595并行输出端具有的输出锁存功能, 采用74HC595芯片的串入并出方式控制数码管的显示,具体的连接方式为: 芯片的Q7引脚和SER 引脚级联, 通过三个I/O口与单片机连接。74HC595的14脚( SER)为串行输入端, 12脚( RCLR) 为移位时钟端, 时钟上升沿将14脚数据移入寄存器; 11脚( SRCLR )为锁存时钟端, 时钟上升沿锁存数据; 8脚( E )为3态输出控制端, 接低电平时输出数据。输出数据和移位时钟均由单片机输出: 单片机P1. 0口输出数据, 在移位脉冲上升沿到来时数据移出进入74HC595; P1. 1 口输出移位脉冲; P1. 2口输出锁存脉冲。出现在并行输出端上的数据经74LS245驱动数码管显示, 由于数据已被锁存, 在传送下一组数据时, 前一组数据的内容不变, 以此方式进行数据的传送和显示, 故在显示模块软件中将P1. 0、P1. 1、P1. 2均定义为模拟串行口。调整键盘的接口有 4个键: 1个设定/确认键、1个修改+ 1键、1个修改- 1键、1个移位键。对应秒、分、时、倒计时、星期, 有5 个LED。LED亮, 表示对应的秒或分或星期或倒计时数据可按修改键修改。在设定时间状态, 首先移位为秒位, 对应秒移位LED亮, 按下移位键, 移位LED灯按秒→分→时→倒计时→星期逐次循环; 按下修改+ 1键或修改- 1 键可对相应位的数据进行+ 1或- 1操作。

3  系统的软件设计

系统的主程序包括: 对单片机串行口的设置以及初始化→读取DS12C887时钟芯片→判断是否计算倒计时→显示。初始化12887为24小时制, BCD码, 不允许中断, 分配12887的始地址为B000H, A寄存器的地址为B00AH, B 寄存器的地址为B00BH, C寄存器的地址为B00CH, D寄存器的地址为B00DH, DS12887的内部分配如表1所示。

表1  DS12887的内部分配。
DS12887的内部分配
DS12887的内部分配

显示子程序首先通过模拟串行口读取DS12C887的数据, 然后利用74HC595 对数据进行显示。具体步骤为: 显示子程序将P1. 0 置位 将P1. 0送入段码 将P1. 1送入移位脉冲 将P1. 2送入锁存脉冲 返回主程序。倒计时子程序首先由单片机读DSl2C887的时间单元, 并将其存放在以69H 为起始的单元中, 操作时先读取月份, 然后利用查表方法计算其下月份到预定时间的天数, 再利用查表方式判断其月份是31天、30天, 28天或29天,将查表得到的天数减去读取日期, 将二个天数相加就可得到实际天数。进行时、分、秒计算时, 可以直接利用预定时、分、秒减去读取的时、分、秒得到相差的时、分、秒, 完成后返回主程序。

4  结束语

综上, 所设计的倒计时系统由DS12C887构成时钟模块, 单片机AT89C51 对系统进行控制, 设定从模拟串行口读取DS12C887 的数据后, 再利用74HC595将数据送入数码管显示。系统经调试和参数整定后运行稳定可靠, 连续长期运行积累误差为零, 为高精度的倒计时系统。实践开发表明, 基于上述技术的倒计时系统具有结构紧凑、简单, 价格低廉, 可靠性高等特点, 便于实际应用。

关键字:单片机 引用地址:一种基于AT89C51控制的高精度倒计时系统

上一篇:QDE-2LCD与8051接口
下一篇:TURBO51嵌入式微处理器功能验证

推荐阅读最新更新时间:2024-03-16 12:31

编写STC单片机的ISP协议的方法介绍
STC单片机包含两个Flash块,在一块Flash中运行的程序可对另一块Flash进行擦除和重新编程.一般都将ISP程序存放在容量较小的一块Flash中(Block1),而将用户代码存放在容量较大的一块Flash中(Block0).Block1中的ISP程序对Block0中的用户代码进行擦除和重新编程. 在做STC单片机解密或是使用的朋友都知道,在STC单片机的程序存储区后,还有一段大约3K的代码,这段代码就是STC单片机的ISP程序,在STC单片机的数据手册里有关于对于ISP的生机资料,既然这段代码是可以升级的,那么我们就可以肯定这个区域是可以改写的,呵呵,这些涉及到了对STC单片机软解密的技术,我不多提了,大家可以动用自己
[单片机]
编写STC<font color='red'>单片机</font>的ISP协议的方法介绍
单片机的FLASH引导装载系统设计
前言 DSP系统的引导装载是指在系统加电时,由DSP将一段存储在外部非易失性存储器中的代码移植到内部高速存储器单元并执行的过程。这种方式即可利用外部存储单元扩展DSP本身有限的ROM资源,又能充分发挥DSP内部资源的高速效能。因此,引导装载系统的性能直接关系到整个DSP系统的可靠性和处理速度,是DSP系统设计中必不可少的重要环节。在装载系统中,外部非易失性存储器和DSP的性能尤为重要。FLASH是一种高密度、非易失性的电可擦写存储器,而且单位存储比特的价格比传统EPROM要低。为此,本文介绍了TMS320C6713浮点DSP芯片和SST公司提供的SST39VF400A FLASH存储器的基本特点,给出了使用该FLASH存储器设计
[应用]
STM32单片机(13) I2C读写AT24Cxx存储器实验
本程序主要利用I2C串行总线,实现AT24Cxx系列EEPROM存储器(此处是AT24C02)的读写,将数据写入,再读出发送至串口 可利用EEPROM存储器数据断电不消失性质存储一些配置数据等。 主程序 /******************************************************************************* * * 软件功能: I2C读写AT24Cxx系列EEPROM存储器 * *******************************************************************************/ #include stm3
[单片机]
学好单片机必须要了解的8个电路设计
单片机上拉电阻的选择 大家可以看到复位电路中电阻R1=10k时RST是高电平 ,而当R1=50时RST为低电平,很明显R1=10k时是错误的,单片机一直处在复位状态时根本无法工作。出现这样的原因是由于RST引脚内含三极管,即便在截止状态时也会有少量截止电流,当R取的非常大时,微弱的截止电流通过就产生了高电平。 LED串联电阻的计算问题 通常红色贴片LED:电压1.6V-2.4V,电流2-20mA,在2-5mA亮度有所变化,5mA以上亮度基本无变化。 端口出现不够用的情况 这时可以借助扩展芯片来实现,比如三八译码器74HC138来拓展。
[单片机]
学好<font color='red'>单片机</font>必须要了解的8个电路设计
高速单片机硬件关键参数设计概述
摘要:随着目前新技术、新工艺的不断出现,高速单片机的应用越来越广,对硬件的可靠性问题便提出更高的要求。本文将从硬件的可靠性角度描述高速单片机设计的关键点。 关键词:高速单片机 可靠性 特性阻抗 SI PI EMC 热设计 引 言 随着单片机的频率和集成度、单位面积的功率及数字信号速度的不断提高,而信号的幅度却不断降低,原先设计好的、使用很稳定的单片机系统, 现在可能出现莫名其妙的错误,分析原因,又找不出问题所在。另外,由于市场的需求,产品需要采用高速单片机来实现,设计人员如何快速掌握高速设计呢? 硬件设计包括逻辑设计和可靠性的设计。逻辑设计实现功能。硬件设计工程师可以直接通过验证功能是否实现,来判定是否满足需求。
[单片机]
51单片机低功耗工作模式
低功耗操作方式 在以电池供电的系统中有时为了降低电池的功耗在程序不运行时就要采用低功耗方式低功耗方式有两种—待机方式和掉电方式 低功耗方式是由电源控制寄存器PCON上一课我们提到过的来控制的电源控制寄存器是一个逐位定义的8位寄存器其格式如下   PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,单元地址是87H,其结构格式如下:    PCON电源管理寄存器结构 PCON D7 D6 D5 D4 D3 D2 D1 D0 位符号 SMOD - - - GF1 GF0 PD IDL PCON标志位说明: 在CHMOS型单片机中,除SMOD位外,其他位均为虚设的,SMOD是串行口波特率倍增位,当
[单片机]
基于串口的温度检测数据单片机仿真
  0 引言   本文研究的是一种基于串口的温度检测数据收发模块。利用DS18B20 温度传感器设计温度监测模块,精确到0.1℃,用液晶显示当前温度,然后通过串口调试助手向单片机发送指令。当单片机收到十六进制指令01时,将当前温度值以1s 为间隔传回PC 机显示,同时PC 机显示Turn on temp;当单片机收到十六进制指令02 时,停止温度值的回传,PC 机显示Turn off temp;当单片机收到其它指令时,PC 机显示Error。   1 总体设计   本系统功能由硬件和软件两大部份协调完成,硬件部分主要完成信息的显示;软件主要完成信号的处理及控制功能等。   本系统的硬件采用模块化设计,以AT89C52 单片
[单片机]
基于串口的温度检测数据<font color='red'>单片机</font>仿真
基于GSM模块Q2403A和8051单片机实现短消息收发系统的应用方案
基于GSM短消息的业务不需要建立拨号连接,只需把待发的消息加上目的地址发送至短消息中心,再由短消息中心转发到最终目标。GSM 短消息业务以其连接简单、费用低廉、覆盖范围广、实现方便等优点得到了广泛的应用。运用 GSM 短消息实现远程测控的可靠性较高、信号传播距离远、覆盖面积广,并且可以节省建网初期的巨额投资。 本文对基于GSM短消息收发系统的设计与实现作了具体描述,给出了系统的软硬件设计方案,对主要硬件,即GSM模块Q2403A 和8051单片机作了重点介绍。给出了系统的软件设计,包括PC与单片机通信部分和短消息收发部分。最后实现系统监控功能。 系统硬件实现 总体系统结构 该系统硬件主要由8051单片机扩展电路、Q2403
[单片机]
基于GSM模块Q2403A和80<font color='red'>51</font><font color='red'>单片机</font>实现短消息收发系统的应用方案
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved