嵌入式实时时钟的设计

合集下载

嵌入式实时时间显示

嵌入式实时时间显示

任务
OSStart();//启动系统
6
} //开始任务 void start_task(void *pdata) { OS_CPU_SR cpu_sr=0;
pdata = pdata; OS_ENTER_CRITICAL();//进入临界区(无法被中断打断) OSTaskCreate(led_task,(void *)0,(OS_STK*)&LED_TASK_STK[LED_STK_SIZE-1],LED_TASK_PRIO);// 创 建 LED 任务 OSTaskCreate(time_task,(void *)0,(OS_STK*)&TIME_TASK_STK[TIME_STK_SIZE-1],TIME_TASK_PRIO);// 创建时间任务 OSTaskSuspend(START_TASK_PRIO); //挂起开始任务. OS_EXIT_CRITICAL(); //退出临界区(可以被中断打断) } //指示灯任务 void led_task(void *pdata) { pdata = pdat初始化 系统初始化 创建开始任务
启动系统
开始任务 创建指示灯任务 创建显示任务 挂起开始任务
指示灯任务
显示任务 获取时间、温度
LED 取反 延时进行任务切换
得到日期 显示数据 延时进行任务切换
2、主要程序
//开始任务
#define START_TASK_PRIO 10 //开始任务的优先级设置为最低
RTC 由两个主要部分组成,第一部分(APB1 接口)用来和 APB1 总线相连。此 单元还包含一组 16 位寄存器,可通过 APB1 总线对其进行读写操作。APB1 接口 由 APB1 总线时钟驱动,用来与 APB1 总线连接。另一部分(RTC 核心)由一组可编 程计数器组成,分成两个主要模块。第一个模块是 RTC 的预分频模块,它可编程 产生 1 秒的 RTC 时间基准 TR_CLK。RTC 的预分频模块包含了一个 20 位的可编程 分频器(RTC 预分频器)。如果在 RTC_CR 寄存器中设置了相应的允许位,则在每 个 TR_CLK 周期中 RTC 产生一个中断(秒中断)。第二个模块是一个 32 位的可编程 计数器,可被初始化为当前的系统时间,一个 32 位的时钟计数器,按秒钟计算, 可以记录 4294967296 秒,约合 136 年左右,作为一般应用,这已经是足够了的。

基于ARM920T的SamsungS3C2440A嵌入式系统实啦时钟的分析与研究

基于ARM920T的SamsungS3C2440A嵌入式系统实啦时钟的分析与研究
RI C Ma hn sLt . ,它 是 由英 国Ac r 公 司 S c ie d ” on
个 焦 点 。 而 相 当数 量 的 嵌 入 式 系统 对 实 时性 要
提 供 技 术 和 1 名 工 程 师 、 美 国 苹 果 电脑 和 VLS 2 I
T c n lg 出资 合 手组 建 的美 英混 血公 司 。是微 处 eh oo y
架 构 下嵌 入 式 系统 的 核 心 部 件 ,被 广 泛 的 应 用 到
工 业控 制 、 无 线 通 讯 、消 费 类 电子 产 品等 很 多领
域 。AR ( v n e S c ie ) ,既 可 以 M Ad a c dRIC Ma hn s
收 稿 日 期 :2 1-1-2 01 0 4 基金项目:校级教改基金项 目 ( 0 1 J B 2 1XJGY XM0 ) 7
时性。
关键词 :嵌 入式系统 ;AR M微处理器 ;实 时时钟 中 图分 类号 :T 3 P 1 6 文献标识码 :A 文章编 号 :1 0 —0 3 ( 0 2 0 ( 一 0 9 3 9 1 4 2 1 ) 3 上) 0 9 —0 0
Do: .9 9 Jis .0 9 1 4 2 1 .( ) 3 i 1 3 6 / . n 1 0-0 .0 3 上 .1 0 s 3 2
随 着 更 多 应 用 在 嵌 入 式 系统 系统
嵌 入 式 系统 依 托 微 电 子 技 术 、操 作 系统 等 相 关 技 术 的快 速 发 展 , 目前 已经 渗 透 到 E常 生 活 、 t 工 业 生 产 、 通 信 和 交 通 运 输 工 具 等 众 多领 域 ,极 大 地 推 动 了 信 息 社 会 的 构 建 和 发 展 。嵌 入 式 系统 技 术 涵盖 了 计 算 机 、 电 子 与 通 信 、 自动 控 制 等众 多领 域 , 已 经 成 为 相 关 领 域 研 究 、应 用 和 开 发 专 业技 术人 员必须 掌握 的 重要 技 术之一 。

基于ds1302和单片机的时钟设计

基于ds1302和单片机的时钟设计

计算机课程设计报告题目:基于DS1302与LM016L的实时电子时钟的设计与仿真学院:测试与光电工程学院专业名称:测控技术与仪器班级学号: 12081207学生姓名:卜振翔指导教师:课程设计任务书测控技术与仪器系120812 班学号12081207 姓名卜振翔课题名称:基于DS1302与LM016L的实时电子时钟设计与仿真课题要求:利用单片机、DS1302、液晶LM016L等实现实时电子钟,能显示年、月、日、时间。

可用Keil uVision2和Proteus 7.2仿真实现。

本程序旨在训练基本编程能力、熟悉嵌入式的C言语开发,掌握嵌入式系统编程的方法和技巧。

本设计需按照以下要求进行:(1)需要DS1302、液晶LM016L搭建硬件电路;(2)在搭建好的硬件电路上完成液晶LM016L的驱动代码,及这个系统的年、月、日显示。

可以在实现以上基本模块后进一步扩展时间的设置、万年历等。

软件调试完成后需进行课程设计报告的撰写,报告格式完全参照学校的本科毕业设计报告格式。

指导教师:摘要本设计是以89C52单片机为核心,以DS1302为时钟芯片、LM016L(LCD1602)为显示器以及ds18b20和相关电子元器件做成的具有24小时制的电子实时时钟。

这种电子实时时钟不仅具有了一般数字钟的性能,而且还具备显示年、月、日、星期及温度显示的拓展功能,并可以通过四个按钮实现时钟运行与停止,日期和时间的设置,如果我们要设置时间和日期,只需在利用按键进行调整。

在电子产品盛行的今天,以单片机为核心的民用电器具有性能优越、可靠性好、性价比高的特点,因此本设计是具有实际可操作性的。

关键词:51单片机 ds1302 lcd1602 ds18b20 按键控制目录第一部分:题目要求 (5)第二部分:方案论证与选择 (5)第三部分:电路设计与参数选择 (9)第四部分:系统软件设计 (12)第五部分:系统调试与仪器使用 (14)第六部分:测试数据与结果分析 (15)第七部分:使用说明书 (15)总结 (16)附录:源程序清单 (17)参考文献 (28)第一部分题目要求本次设计的这种24小时制功能钟,可以在液晶屏上显示时、分、秒、年、月、日、星期,并且我们可以通过按钮来控制时钟的运行及停止(按钮S1控制时钟停止运行并且闪烁需要设置位,按钮S2控制相应位数字(星期为字母)的加,S3控制相应位的数字减),采用+5V直流流电源供电,在断电情况下,DS1302以自己具备的备用电源进行其内部供电以保证下次开启时不会出现时间和日期错误。

嵌入式系统的实时性要求

嵌入式系统的实时性要求

嵌入式系统的实时性要求嵌入式系统是一种具有特定功能和固定任务的计算机系统,它通常被嵌入到一种特定的设备或系统中,用于控制、监测或执行特定的功能。

与通用计算机系统相比,嵌入式系统对实时性的要求更高,即需要在特定的时间范围内完成任务并响应外部事件。

本文将深入探讨嵌入式系统中实时性的要求及其相关问题。

嵌入式系统中的实时性是指系统在特定时间限制下对外部事件的响应能力。

实时性要求分为硬实时和软实时。

硬实时指系统必须在严格的时间限制内完成任务,任何延迟都将导致严重的后果。

例如,飞机上的自动驾驶系统必须在特定的时间范围内对各种传感器数据进行处理和响应,以确保飞行安全。

另一方面,软实时系统允许一定的延迟,但仍需要在较短的时间内完成任务。

例如,医疗设备中的数据处理可以有一定的延迟,但是需要在较短的时间内给出结果。

实时性对嵌入式系统的重要性不言而喻。

首先,嵌入式系统通常用于控制和监控关键设备或系统,如汽车、医疗设备、工业自动化等。

任何时间延迟或任务未能按时完成都可能导致严重事故或损失。

其次,在某些应用领域,如金融交易系统和航空航天领域,对实时性要求极高。

延迟或任务未能按时完成都可能导致严重的经济损失或人身伤害。

实现嵌入式系统的实时性要求涉及多个方面。

首先,硬件的选择和设计对实时性至关重要。

高性能CPU、快速的总线和存储器、高精度的时钟等硬件组件可以提高系统的实时性能。

其次,实时操作系统(RTOS)的选择也非常关键。

RTOS提供了丰富的实时性能支持,如任务调度、中断处理和事件机制等,以确保任务按时完成。

此外,优化算法和数据结构、避免资源竞争和死锁以及合理的系统架构设计等也是实现实时性要求的关键因素。

然而,要实现嵌入式系统的实时性并不容易。

实时性要求往往会带来额外的复杂性和挑战。

首先,实时系统的设计和开发需要更高的要求和标准。

对于硬实时系统来说,响应时间必须能被精确测量和预测,否则可能导致系统错误。

其次,实时系统的测试和验证也更困难,因为在实时环境下很难模拟所有可能的情况和外部事件。

电子钟设计报告

电子钟设计报告
方案二
采用AT89C52,AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为我们提供许多较复杂系统控制应用场合。硬件实体电路一般会采用功能和优点更为突出的AT89C52单片机。
图23DS1302的时钟电路图24DS1302的管脚图
二、
(1)
DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置“0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如下图4所示。DS1302的控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0,位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。表.2为DS1302的日历、时间寄存器内容:“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP”是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。
Keil C51的使用步骤如下:
(1)驱动软件
(2)新建工程
(3)选择CPU
(4)添加源程序文件
(5)编写程序
(6)设置开发环境参数
(7)编译源程序,烧录文件
编译成功后会生成HEX文件,该文件可以被载入并最终烧录到具体芯片中。

基于嵌入式系统的实时控制模块设计与实现

基于嵌入式系统的实时控制模块设计与实现
摘 要 提 出一 个使 用 C 1 片机 的 嵌 入 式 系统 在 通 信 测 试 仪 器 中 实现 实时 控 制 功 能 的 案 例 ,给 出 了硬 件 及 软 件 5单
嵌 入 式 系 统 ; 实 时控 制 :通 信 测 试 仪 器
设计方案 ,并指 出了设计 中需注意的问题 。该设计成 功地应 用于某通信测试仪 器中,较好地 实现 了预期 的 目标 。
a 叶技22 第5 第 期 0 年 2卷 9 1
E e t n c S i & T c . e . 5. 2 1 lcr i c . o e h /S p 1 02
基 于 嵌入 式 系统 的 实 时控 制模 块 设 计 与 实现
顾 良
( 中国电子科技集 团第 5 0研究所 微波部 ,上海 2 0 6 ) 00 3
GU i n La g
( ea m n o M c w v ni e n ,T e 0 eerhIst eo t E C hnhi 0 0 3 h a D pr et f i o aeE g er g h R sa tu fh C T ,S aga 20 6 ,C i ) t r n i 5 c n it e n
上位机
检波
射频 接 收 频综 、 频 发 生频 综 、 波 器组 件 、 频 输入 射 滤 射 模 块 、 频输 出模 块 等 实 时 控 制作 用 。对 射 频 检 波 信 射
号 进行 A D转 换 以获 取 数 据 。 与上 位 计 算 机 进 行 通 /
信 等功 能¨ 。 J 根据 待 实现 的系统 功能要 求 , 合 考虑 系统 资 源 , 综 及 芯片性 价 比等 因素 , 定采 用 以 C 1单 片机 为 主 控 确 5
Absr c T e a t o rp s sa c s fp romi gi o ta t h u h rp o o e a e o e fr n n a c mmu iain e ts tte r a—i o t lf n t n n c to sts e h e ltme c nr u ci o o

stm32g431rb嵌入式闹钟综合设计

stm32g431rb嵌入式闹钟综合设计

stm32g431rb嵌入式闹钟综合设计
嵌入式闹钟的综合设计需要涉及到硬件和软件两方面的知识,下面是一个大致的设计流程。

硬件部分:
1. 确定主控芯片,这里为STM32G431RB。

2. 选择合适的时钟模块,例如DS3231等。

3. 描述电路图,将时钟模块与主控芯片相连,确定它们之间的通信协议。

4. 确定LED显示模块、蜂鸣器等外设,按照电路图连接到主控芯片上。

5. 确定电源模块。

软件部分:
1. 确定开发环境,例如Keil、IAR等。

2. 配置主控芯片的开发环境,包括时钟、GPIO、UART等。

3. 编写驱动程序,控制时钟模块、LED显示模块、蜂鸣器等外设。

4. 编写闹钟响铃算法,并实现闹钟设置功能。

5. 编写与用户交互的界面,例如LCD显示屏或者键盘操作等。

6. 实现RTC实时时钟功能,保持系统时间的正确性。

最后,还需要进行调试和测试,确保系统的正常运行。

基于STC89C52单片机时钟的设计与实现

基于STC89C52单片机时钟的设计与实现

基于STC89C52单片机时钟的设计与实现1. 本文概述本文主要介绍了基于STC89C52单片机和DS1302时钟芯片的电子时钟设计与实现。

该电子时钟系统具有年月日等基本时间显示功能,并集成了秒表计时处理、闹钟定时、蜂鸣器和温度显示等附加功能。

系统采用LCD1602作为液晶显示器件,通过单片机对时钟和温度等数据进行处理后传输至LCD进行显示。

用户可以通过按键对时间进行调节,同时,单片机还通过扩展外围接口实现了温度采集等功能。

本文的目标是提供一个功能丰富、易于操作的电子时钟系统,为学习和应用单片机技术提供一个实用的案例。

2. 系统设计要求在设计基于STC89C52单片机的时钟系统时,我们需要考虑以下几个关键的设计要求:时钟系统必须具备基本的时间显示功能,能够以小时、分钟和秒为单位准确显示当前时间。

系统还应支持设置闹钟功能,允许用户设定特定的时间点进行提醒。

系统需要保证长时间稳定运行,具备良好的抗干扰能力,确保在各种环境下都能准确计时。

还应具备一定的容错能力,即使在操作失误或外部干扰的情况下,也能保证系统的正常运行。

用户界面应简洁直观,便于用户快速理解和操作。

时钟的显示部分应清晰可见,即使在光线较暗的环境下也能保持良好的可视性。

同时,设置和调整时间的操作应简单易懂,方便用户进行日常使用。

在设计时钟系统时,应考虑到未来可能的功能扩展,如温度显示、日期显示等。

系统的设计应具有一定的灵活性和扩展性,以便在未来可以轻松添加新的功能模块。

鉴于时钟系统可能需要长时间运行,能耗是一个重要的考虑因素。

设计时应选择低功耗的元件,并优化电源管理策略,以延长电池寿命或减少能源消耗。

在满足上述所有要求的同时,还需要控制成本,确保产品的市场竞争力。

这可能涉及到对单片机的编程优化、选择性价比高的外围元件等措施。

通过满足上述设计要求,我们可以确保开发出一个功能完善、稳定可靠、用户友好、易于扩展、节能环保且成本效益高的STC89C52单片机时钟系统。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.设计题目制作一个实时时钟,实现实时的效果并且可以对时间进行调节,同时可以随时播报时间的时钟。

2. 设计方案我要用ds1302时钟模块实现时间,用lcd1602液晶显示实现时间的显示,用独立按键K1,K2,K3,K4并用相应的中断实现对时间的调节和校准并且可以实现短按+1,长按+++功能,并可以随时播报语音,用老师实验书的方法加上相应的voice reader,格式化工厂,8位WAVE转换和winhex工具实现对wave音频文件的提取成c文件。

对于实现这样的功能,我想把其分为大体四个部分完成。

3. 设计的具体方法a.关于lcd1602液晶的设计字符型1602液晶是专门用来显示字母,数字,符号的点阵型液晶模块,这是一个16*2的模块,每行16个字符,一共可以显示两行。

这里主要需要用的是RS,RW,E三个控制引脚,以及对于用D0~D7负责给予数据或者命令,RS在高电平时是对于数据的选择,在低电平时是对于命令的选择,RW是在高电平时是读,在低电平时是写,通常要用写功能,因为一般液晶都是用来显示的。

E是使能端,使用的时候设为高电平。

其他的不用到所以在这里不进行介绍了,在开发板上,RS接在P2.6口,RW接P2.5口,E接P2.7口,D0~D7接在P0口。

对于1602的操作过程有如下:主要是先对1602进行初始化设计,然后是写命令RS=L,设置显示坐标,然后是写数据,RS=HLCD初始化的程序原理设计:由datasheet可知,由于本开发板给的液晶显示是4位的,所以先给8位转化为4位的指令(0x32),在四位线下的初始化指令是(0x28)(0x06)(0x01),设置显示模式(0x0c)开显示,不显示光标,光标也不闪烁,写一个,指针加一,清屏,设置数据的起点(0x80+0x00)是写第一行的,(0x80+0x40)写第二行的开始地址。

LCD的写入命令和写入数据:在写入命令时要让RS=L,RW=L,E=H,先开一下使能进行写入命令,再将使能关闭停止写入命令。

在写入数据时要注意时序图的准备时间,用软件延时来实现,RS=H,RW=L,E=H,D0~D7=数据,同样的也需要对这个进行使能的控制,由于在时序图中有这样的使能时间上的间隔,所以加上延时,可以有效的实现,不然可能会使在读/写操作的时候不能完整的读数据。

void LcdWriteData(uchar dat) //写入数据{LCD1602_E = 0; //使能清零LCD1602_RS = 1; //选择写入数据LCD1602_RW = 0; //选择写入LCD1602_DATAPINS = dat; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改Lcd1602_Delay1ms(1);LCD1602_E = 1; //写入时序Lcd1602_Delay1ms(5);LCD1602_E = 0;LCD1602_DATAPINS = dat << 4; //写入低四位Lcd1602_Delay1ms(1);LCD1602_E = 1; //写入时序Lcd1602_Delay1ms(5);LCD1602_E = 0;}以上附上我的写入命令的程序。

注意是4位的。

void LcdDisplay()//lcd显示程序{LcdWriteCom(0x80+0X40);LcdWriteData('0'+TIME[2]/16); //时,取十位LcdWriteData('0'+(TIME[2]&0x0f)); //取个位LcdWriteData('-');这是读取了DS1302的实时数据进行显示的程序,将TIME数组中的时,分,秒,星期,年,月,日分别取出他们的个位,和十位,因为是两位数,需要分别读出放入数据线上,进行传输,最后求显示出来。

b. DS1302初始化程序原理与设计DS1302是一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。

实时时钟可提供秒、分、时、日、星期、月和年,一个月小于31天时可以自动调整,且具有闰年补偿功能。

工作电压宽达 2.5~5.5V。

采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。

这是八个引脚,X1,X2接晶振,给DS1302提供稳定的时钟信号,CE(RST)接P3.5,I/O接P3.4,SCLK=P3.6,这是DS1302的时钟寄存器在使用的时候也要进行初始化,分为初始化和单字节读和单字节写。

DS1302是通过SPI串行总线跟单片机通信的,当进行一次读写操作时最少得读写两个字节,第一个字节是控制字节,就是一个命令,告诉DS1302是读还是写操作,是对RAM还是对CLOK寄存器操作。

第二个字节就是要读或写的数据了。

单字节读:只有在SCLK为低电平时,才能将CE置为高电平。

所以在进行操作之前先将SCLK置低电平,然后将CE置为高电平,接着开始在IO上面放入要传送的电平信号,然后跳变SCLK。

数据在SCLK上升沿时,DS1302读取数据,在SCLK下降沿时,DS1302放置数据到IO上,可以这样的理解,当进行单字节读时,显示DS1302将MCU中的数据(这个为指令的数据也就是命令)读入自己的RAM,这个过程由上升沿完成,将8个上升传完以后,再将数据写入某个外部寄存器中,这个由下降沿完成。

单字节写:只有在SCLK为低电平时,才能将RST置为高电平。

说以在进行操作之前先将SCLK置低电平,然后将RST置为高电平,开始在IO上面放入要传送的电平信号,然后跳变SCLK。

数据在SCLK上升沿时,DS1302读取数据,在SCLK下降沿时,DS1302放置数据到IO上void Ds1302Write(uchar addr, uchar dat)//ds1302的写入命令,{uchar n;RST = 0;_nop_();SCLK = 0;//先将SCLK置低电平。

_nop_();RST = 1; //然后将RST(CE)置高电平。

_nop_();for (n=0; n<8; n++)//开始传送八位地址命令{DSIO = addr & 0x01;//数据从低位开始传送addr >>= 1;SCLK = 1;//数据在上升沿时,DS1302读取数据_nop_();SCLK = 0;_nop_();}for (n=0; n<8; n++)//写入8位数据{DSIO = dat & 0x01;dat >>= 1;SCLK = 1;//数据在上升沿时,DS1302读取数据_nop_();SCLK = 0;_nop_();}RST = 0;//传送数据结束_nop_();}所有的数据传输在RET置一时进行,RST的输入信号有两种功能,首先是将RST接通控制逻辑,允许地址/命令序列送入移位寄存器,其次RST提供终止单字节或者多字节数据的传输手段,当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作,若RST置低时,终止此次数据传送I/O引脚变为高组态。

写保护位:在任何写操作前都要写DS1302WRITE(0x8e,0x00)。

在初始化时,要用到的,然后写入数据以后再用写保护功能启用(0X8E,0X80)unsigned char code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x8b,0x87, 0x89, 0x8d};unsigned char code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x8a, 0x86, 0x88,0x8c};这是对数据的读和写控制命令。

//---DS1302时钟初始化2013年12月31日星期二09点00分00秒---////---存储顺序是秒分时日月周年,存储格式是用BCD码---//unsigned char TIME[7] = {0x00, 0x00, 0x09, 0x02,0x31, 0x12, 0x13};时钟/日历包含在7个寄存器中,数据在时钟/日历寄存器中是二进制编码的十进制格式存储的,也就是常说的BCD码存储的。

void Ds1302ReadTime()//ds1302实时读取命令。

{uchar n;for (n=0; n<7; n++)//读取7个字节的时钟信号:分秒时日月周年{TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);}}这是读取时钟的函数定义。

设计流程:1.关闭写保护2.串行输入控制指令3.输入控制指令,完成传输4.可选字节格式:(一般模式)5.突发模式6.打开写保护c.按键设计这里的按键的操作方式是这样的:当需要调节时间的时候,先按下K3,进入调节状态,按K1的时候是对各个调节位进行选择,顺序分别是秒,分,时,周,日,月,年。

当选好了要调节的位的时候,再看下K2进行具体的调节,当短按,也就是按一次松开的情况下,可以每次只跳变一个数,当按住不放时,数字开始一直跳变,呈加的形式,这样就具有了长按的功能,一切都调节结束以后再按下K3,让时钟初始化,读入给定调节的数据,进行从这个时刻的时间开始,当需要知道现在是什么时间的时候,只要按下K4,就能听到现在的时间,由于12C芯片的ROM是60K的,而语音文件的容量很大,所以只能播报:“现在是某某时某某分”下面分别来介绍,这些功能是如何完成的。

对于K3,设定的是连接P3.2口,并用一个外部中断0,当按键按下时启用外部中断,同时进行延时,再判断按键是否真的按下,如果按下的话,将setstate 也就是时钟设定的变量取反,这样就将进入时钟调节状态,(因为程序设计中当state=0时进行时钟值的读取,当state=1时不进行读取。

)这里用的是外部中断0要设IT0=1,EX0=1,EA=1.对于K1,先进行延时消抖,再进行将setplace加1,setplace是放在TIME[]中的,表示TIME[]中的各个位的对应数,这里对于长按的设计是while((i<200)&&(K1==0)) //检测按键是否松开,并且可以实现长按的效果。

{Delay1ms(1);i++;}使用在按键时间超过2S以后才开始++计数。

实现长按的功能,对于K2是在进行了选位的选择以后,开始的进行的每个位的具体的数字的调整,由于要给入DS1302的数据是BCD码,所以先进行转化,然后进行各个位的判断秒和分只能到59,时只能到23,日到31,月和年只到12,周只能到7,当大于额定值并且place=给定的位对应的数字的时候就可以了,例如:if((TIME[SetPlace]>=0x60)&&(SetPlace<2)) //分秒只能到59{TIME[SetPlace]=0;}对于K4的设计,K4使用的是外部中断1,接P3.3口,当按下的时候进行消抖处理,首先这里设定空数组buff[9]用来存放每次要读的声音,这个顺序是这样的,Buff[9]{现在是,X,十,X,时,X,十,X,分}读的顺序是先读buff[0]里的数据到song_state变量中,然后再进行判断选择,将buff[0]对应的信息找到相应的MAX和datax中存入其中,而存完了以后要对一个设定的变量N加一,当有的时候时间是1时1分的时候,前面的十位就不用显示了,只要显示个位就好了,所以要进行一下判断和选择,这些都做好了以后,再将长度放入一个变量中,并将T0开启,TMOD=0X02,TL0=0X83=TH0,ET0=1,TR0=1,并将PCA的捕捉匹配功能开启CR=1,if (TIME[2]/16==0) //以下的程序是对BUFF中的数据进行赋值。

相关文档
最新文档