14-可设置八个闹钟的智能时钟程序
智能电子闹钟设计
辽东学院毕业论文智能电子闹钟设计学生姓名: XXXX 学号: XXXX 班级: XXXX 专业:计算机应用技术指导教师: XXXX2012年12月摘要本系统设计是基于STC89C51RC的一种带8K闪烁可编程可擦除只读存储器(FPETOM-FlashProgrammabalandErasableReadOnlyMemory)的低电压、高性能CMOS8位微型处理器,即单片机芯片。
单片机的可擦除只读存储器可以反复擦除1000次,内部FLASH擦写次数为100000次以上。
该芯片使用高密度非易失存储制造技术,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器集成在单个芯片中,使得STC89C51RC成为了一种性价比极高的微型处理器芯片,在许多电路设计中都得到了应用。
由单片机控制数码管的显示,,修改设置时间采用操作方便的键盘,整点报时系统使用无源蜂鸣器,通过调节输入方波的占功比,达到美妙旋律的声音实现报时的功能,整个系统设计比较完善,有显示时间日期、整点报时、时间日期调节设置的功能,除些之外还介绍了单片机和汇编程序一些经验和方法,以便将单片机的汇编程序经过局部的修改就可以移植到单片机上,实现不同的功能,节约重新开发的时间。
最后总结了一些关于在做基于单片机的智能闹钟所遇到的问题和困难,其最大的特点是只读存储器可以反复擦除,精简版本高效微控制器STC89C51RC单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案,也是它应用较为广泛的原因。
关键词:STC89C51RC单片机;数码管;蜂鸣器AbstractThe system design is based on a STC89C51RC with 8 k scintillation programmable can erase read only memory (FPETOM - FlashProgrammabalandErasableReadOnlyMemory) low voltage, high performance CMOS8 a micro processor, namely microcontroller chip. SCM can erase read-only memory can be repeated erase 1000 times, internal FLASH integration.it number for 100000 times or more. The chip using high density nonvolatile storage manufacturing technology, and industry standard MCS - 51 instruction set and output pipe JiaoXiang compatible. Because of the multi-function eight CPU and scintillation memory integrated on a single chip, make the STC89C51RC become a kind of high performance microprocessor chip, in many circuit design have been applied.The single-chip microcomputer control, digital tube display,, modify the setup time use convenient operation keyboard, integral point time systems use passive buzzer, through the control input square-wave occupy work than to the voice of melody to realize the function of the time, the whole system design is perfect, have show time date, on the hour time, time date regulation setting function, in addition to some outside still introduces the SCM and assembler some experience and methods to MCU assembly program through local modification can be transplanted into single chip microcomputer, the realization of different function, save to development time. Finally, summarized the about doing based on single chip microcomputer intelligent alarm clock meet problems and difficulties, its biggest characteristic is to read only memory can be repeated erase, streamlined version efficient micro controller STC89C51RC microcontroller as many embedded control system provides a high flexibility and cheap scheme, it is more widely application of reason.Keywords: STC89C51RC microcontroller; Digital tube; buzzer目录前言 (5)1.电子时钟的设计原理和方法 (6)1.1设计原理 (6)2.硬件电路的设计 (7)2.1 STC89C51RC简介 (7)2.2 键盘电路的设计 (8)2.3蜂鸣器驱动电路 (9)2.4 数码管驱动电路 (10)2.5 晶振电路 (11)3软件部分的设计 (12)3.1主程序部分的设计 (12)3.2中断计时器及时间进位 (13)3.3 闹钟子函数 (14)3.4 按键扫描 (15)3.5 时钟闹钟设置 (16)3.6 显示数字函数 (17)3.7 显示界面函数 (17)3.8 闹钟记录及读取 (18)4总结 (22)5参考文献 (23)6致谢 (24)附录A:电路原理图 (25)附录B:源程序 (26)前言随着科学技术的发展和电子技术产业结构调整,单片机开始迅速发展,由于家用电器逐渐普及,市场对于智能时钟控制系统的需求也越来越大。
智能闹钟操作方法步骤
智能闹钟操作方法步骤
智能闹钟的操作方法步骤如下:
1. 将智能闹钟插入电源,确保它有足够的电量。
2. 打开智能闹钟的启动按钮或使用遥控器打开电源。
3. 在智能闹钟的显示屏上会显示当前的时间。
如果时间不准确,您可以根据需要进行调整。
4. 设置闹钟时间。
在闹钟设置菜单中,选择设置时间的选项。
您可以使用按钮或遥控器进行时间的增加或减少,然后按确认按钮来保存设置。
5. 设置闹铃音乐或铃声。
在闹钟设置菜单中,选择设置铃声的选项。
您可以选择预设的音乐或铃声,也可以连接蓝牙设备或USB设备来播放您喜欢的音乐。
6. 设置闹铃模式。
在闹钟设置菜单中,选择设置闹铃模式的选项。
您可以选择单次闹铃或重复闹铃,以及设定每天或特定日期的闹铃。
7. 设置其他功能。
如果您的智能闹钟具有其他功能,例如天气预报、电台或语音控制等,您可以在相应的设置菜单中进行设置。
8. 确认设置。
在完成所有设置后,按确认按钮来保存设置。
9. 关闭智能闹钟。
如果您不需要使用闹钟功能,可以选择关闭智能闹钟的选项。
您可以设定定时关闭或手动关闭闹钟。
10. 如果需要,您还可以随时对闹钟进行调整或重新设置。
请注意,以上步骤只是一个一般的操作流程示例,实际操作可能因不同的智能闹钟品牌和型号而略有不同。
建议您在使用前详细阅读使用手册或参考相关说明。
Android系统中闹钟设置程序设计源程序
---------------------------------------------------------------范文最新推荐------------------------------------------------------ Android系统中闹钟设置程序设计+源程序摘要Android 是Google 在2007 年11 月推出了一个专为移动设备设计的软件平台。
Android 是一个针对移动设备的程序集,它包括操作系统、用户界面、中间件和应用程序,拥有移动电话工作所需的全部软件。
本从Android系统出现的背景和意义出发,简单介绍了Java语言,之后又介绍了Android系统的核心模块和相关技术,并对Android系统的主要组件进行了研究。
搭建了Android系统的开发环境,创建了简单的Android应用,分析了Android工程的目录结构。
最后开始Android闹钟程序的编写,实现了时间的动态显示、闹钟的设臵、闹钟的删除、重复响起闹钟的设臵、时间到了的时候的提醒、退出闹钟程序时的提醒等功能。
11517关键词AndroidJava开发环境闹钟程序1 / 13毕业设计说明书(论文)外文摘要TitleThe setup program of alarm clock designed in the Android systemAbstractAndroid is a special software platform designed for mobile devices launched by Google in November 2007. Android is a set of procedures for mobile devices, including the operating system, user interface, middleware and applications, with all the necessary software needed by mobile phone. Starting from the background and significance of the Android system, a brief introduction to the Java language, and then introduced in the core modules and related technologies of the Android system, and the main components of Android system. Set up the development environment of Android system, create a simple application of Android, analysis directory structure of the Android project. Last began to write Android alarm clock program,realize functions of time dynamic display, set of the alarm clock, delete of the alarm clock , settings of---------------------------------------------------------------范文最新推荐------------------------------------------------------the re-sounded alarm, reminding when time came, reminding when the alarm clock program exit.KeywordsAndroidJavadevelopment environmentalarm clock program1.1 Android出现的背景和意义Android 是Google 在2007 年11 月推出了一个专为移动设备设计的软件平台。
八位数显示时钟的设计方案与制作
毕业设计<论文)题目:八位数显示时钟的设计与制作2018年8月28日毕业设计任务书1.毕业设计题目:八位数显时钟题目类型实验研究题目来源教师科研题毕业设计内容要求:<一)设计任务:1、用单片机设计8位数显电子时钟;2、走时,误差精度控制在1s/天;3、调时,小时、分钟加减调整及闪烁显示;4、闹铃,可以设置三组闹铃,默认闹铃时间为1分钟,可按任意键推出闹铃。
<二)涉及要求:1、总体方案设计及框图;2、设计原理电路图及分析;3、独立编写程序;4、完成protues仿真设计;5、使用protel设计pcb并制作、调试电路。
2.主要参考资料[1]电子工业出版社[51单片机典型系统开发实例精讲]白延敏;[2]复旦大学出版社[单片微型机原理、应用和实验] 张友德;[3]海纳电子资讯网[IC中文资料];摘要时间是现代社会中不可缺少的一项参数,无论是平时生活还是社会生产都需要对时间进行控制,有的场合对其精确性还有很高的要求.采用单片机进行计时,对于社会生产有着十分重要的作用。
本文首先介绍了电子时钟的特点和功能,然后对单片机和LCD 显示做了详细的介绍,提出了系统总体设计方案,并设计了各部分硬件模块和软件流程,再用Protues软件进行了仿真和调试,结果证明了该设计系统的可行性。
由于AT89S52系列单片机的控制器运算能力强,处理速度快,可以精确计时,很好地解决了实际生产生活中对计时高精确度的要求,因此该设计在现代社会中具有广泛的适用性。
关键字:单片机;LCD1602液晶显示器;C程序设计目录第一章系统设计要求及功能51.1设计本电子定时闹钟的目的和意义51.2本LCD电子闹钟的特点和功能介绍51.2.1本电子钟设计特点51.2.2本电子钟的主要功能5第二章方案设计与比较62.1数字时钟方案62.2显示方案7第三章系统硬件的设计83.1单片机的选择及管脚介绍83.1.1单片机的选择及主要性能83.1.2单片机管脚介绍93.2LCD1602的管脚及功能介绍113.2.1引脚说明113.2.2控制器接口说明123.3总体设计133.3.1系统说明133.3.2整体系统框图133.4各部分功能实现143.5元件清单143.6电子钟电路原理图153.7时钟仿真各功能分析及图解16第四章软件总体设计方案204.1主程序流程图:204.2、闹钟的实现22第五章课程设计结果分析23致谢24参考文献25附录26<1)控制电路的C语言源程序26<2)8位数显时钟成品展示图35第一章系统设计要求及功能1.1 设计本电子定时闹钟的目的和意义1、复习和巩固所学过的知识,利用此毕业设计正好可以对所学过的知识进行系统的回顾和总结。
2023年智能闹钟使用手册
2023年智能闹钟使用手册智能闹钟是一种智能家居设备,它不仅能显示时间,还能提供多种实用功能。
2023年的智能闹钟新升级了一系列功能,为用户带来更便捷的生活体验。
本使用手册将详细介绍2023年智能闹钟的功能和使用方法,帮助用户快速上手并充分发挥智能闹钟的潜力。
1. 基本设置在使用智能闹钟之前,首先需要进行基本设置。
请按照以下步骤进行:1.1 插电源:将智能闹钟插入电源插座,确保正常供电。
1.2 连接网络:智能闹钟支持Wi-Fi连接,通过设置菜单中的网络选项,输入Wi-Fi密码即可连接。
1.3 时间调整:智能闹钟将自动与网络同步时间,若需手动调整,请进入设置菜单进行修改。
2. 闹钟功能智能闹钟最常用的功能之一就是闹钟功能。
为了更好地使用闹钟功能,请按照以下步骤进行操作:2.1 设置闹钟时间:点击主屏幕上的“闹钟”图标,进入闹钟设置界面,选择添加新闹钟并设置闹钟时间。
2.2 闹铃音调:选择合适的闹铃音调,可通过预设音调或者自定义音乐作为闹铃声音。
2.3 重复设置:根据个人需求,设置是否重复闹钟。
可以选择按天、工作日、周末或特定日期重复。
2.4 其他设置:根据需求,可以进一步设置闹钟振动、渐增音量等功能。
3. 语音助手2023年智能闹钟升级了全新的语音助手,使用户能够通过语音与闹钟进行交互。
以下是一些常用的语音指令示例:3.1 设置闹钟:用户可以通过语音命令告诉智能闹钟设定指定时间的闹钟,例如:“设置明天早上7点的闹钟”。
3.2 查询天气:用户可以通过语音命令获取当日或未来几天的天气情况,例如:“今天天气怎么样?”。
3.3 播放音乐:用户可以通过语音命令让智能闹钟为其播放喜欢的音乐,例如:“播放一首轻音乐”。
4. 应用推送智能闹钟还支持应用推送功能,将手机上的应用推送至闹钟显示屏幕上,提供更便捷的信息查看。
以下是如何使用应用推送的步骤:4.1 连接手机:通过智能闹钟的设置菜单中的“添加手机”选项,将手机与闹钟绑定,确保连接成功。
带定时功能的闹铃时钟设计
课程设计任务书设计题目带定时功能的闹铃时钟设计学生姓名设计要求:1、有电源开具关及指示灯,有复位按键。
2、接通电源后,蜂鸣器连续两次发出响声,同时工作指示灯LED闪动,表示程序执行,数码管显示“0000”3、接着设置当前时间。
按K1键,LED停止闪动,即进入时间设置状态;按K2键调整小时,每按一次数值增1;按K3键调整时间。
设置完成后,按K4,LED恢复闪烁,即设置完成,进入正常走时状态。
4、设置闹铃时间,进入正常走时状态后再按K2键,即进入闹铃时间设定状态,K2为设置闹铃功能键,再按k2,小时调整;按k3,分钟调整。
5、闹铃开、关设置。
闹铃时间设定完后,再按k4,进入闹铃开、关设置。
若设置为开,启动闹铃后连续3次发出响声;若设置为关,关闭闹铃时发出1次响声。
6、掌握程序模块化设计思想。
程序设计时可分解为走时、闹铃设置、显示、检查闹铃时间、执行闹铃时间处理、调整等部分组成。
每部分均通过子程序实现。
再过主程序的调用,使其有机联系,最终实现定时闹铃时钟功能。
学生应完成的工作:该组学生设计的是带定时功能的闹铃时钟,首先要查资料,画出设计原理图,然后编写设计程序,按照原理图焊接电路,烧程序最后写课程设计论文。
冯晓明同学负责设计复位电路,该电路有电容和电阻及一个按键组成;周绍彬同学负责设计时钟电路,该时钟电路有两个电容和一个晶振组成;扈会荣负责设计电源电路部分,该电路有稳压管,桥堆,变压器组成;马捡选同学负责整个电路的设计工作,把该组组员的设计组合到一起。
参考文献阅读:[1] 张迎新. 《单片机微型计算机原理及应用》.北京国防工业出版社,1999[2] 赵曙光.《可编程逻辑器件,原理,开发与应用》.西安,西安电子科技大学, 2000[3] 付家才.《单片机控制工程实践技术》.北京,化学工业出版社,2004[4] 李全利.迟荣强.《单片机原理及接口技术》.北京,高等教育出版社,2004工作计划:5月6日—5月8日查资料,画出设计原理图5月9日—5月10日编写设计程序5月13—5月14日按照原理图焊接电路5月15—5月16日烧程序,仿真5月17—日写课程设计报告任务下达日期:2013 年5 月 6 日任务完成日期:2013 年5 月17日指导教师(签名):学生(签名):带定时功能的闹铃时钟设计摘要:单片机是在一片半导体硅片上集成了CPU、存储器、并行I/O、串行I/O、定时器、中断系统、系统时钟电路及系统总线的微型计算机。
提醒功能的软件
提醒功能的软件提醒功能的软件是指能够在预定时间点提醒用户完成特定任务或事件的应用程序。
这种软件可以帮助用户更好地组织和管理自己的时间,提高工作和生活的效率。
以下是几款常见的提醒功能软件。
1. 闹钟类软件闹钟类软件是最基础和常见的一种提醒功能软件。
用户可以设置具体的时间点,当时间到达时,软件会发出铃声或震动来提醒用户。
这种软件常见于手机系统和智能手表等设备,用户可以根据自己的需求设置多个定时提醒,如起床、吃饭、工作会议等。
2. 日程管理类软件日程管理类软件可以帮助用户更好地安排和管理自己的日程活动。
用户可以在软件中创建不同的日程,添加具体的任务和事件,并设置提醒时间。
当提醒时间到达时,软件会自动发送提醒通知给用户。
这类软件通常有多个视图,如日历、列表等,方便用户查看和管理日程。
例如,Google日历、微软Outlook 等。
3. 待办事项类软件待办事项类软件是一种更加简洁而便捷的提醒功能软件。
用户可以在软件中添加待办事项,设置截止时间和提醒时间。
当提醒时间到达时,软件会通知用户完成任务。
这种软件通常有简洁的界面和一些额外功能,如标签分类、优先级设置等,方便用户管理和跟踪任务的进展。
例如,Wunderlist、Todoist等。
4. 健康管理类软件健康管理类软件主要用于提醒用户注意健康问题。
例如,在手机应用商店中有一些健康管理类软件可以设置提醒用户定时喝水、休息、眼保健操等,以防止长时间使用电子设备带来的健康问题。
这类软件通常会配有一些特别设计的提醒功能,如定时闪屏、休息提醒等。
总之,提醒功能的软件是人们日常生活和工作不可或缺的一部分。
无论是基本的闹钟类软件,还是更复杂的日程管理类软件、待办事项类软件,都能帮助用户更好地规划和安排自己的时间,提高工作和生活的效率。
随着科技的不断发展,提醒功能的软件将越来越智能化和个性化,逐渐成为人们生活中的得力助手。
设置8个闹钟时间的智能时钟
可设置8个闹钟时间的智能时钟普通的家用时钟一般只能设置一个闹钟时间,但很多人均需为工作日、周末、早晨、午休等不同时段设置不同的闹钟时间。
如果是使用普通的闹钟,只好每次休息前重新设置,很不方便,有时甚至会出现忘记更改闹钟设置而睡过头的情况。
针对这种情况,本人利用89C51单片机设计了一款有8种闹钟设置的时钟,通过一段时间的使用,情况良好。
1、元件清单共阴极数码管8个4511七段译码芯片1片ATMEL89C51单片机1片24C08EEPROM 1片24M晶振1个9V变压器(3V A)1个LM317输出可调稳压IC 1个整流桥堆1个470uF电容1个100uF电容1个10uF电容1个0.1uF电容1个33pF电容2个蜂鸣器1个9014(或其它NPN管)8个ksp92(或其它PNP管)1个二极管2个1K欧电阻16个470欧电阻1个10K欧可调电阻1个按钮开关4个可装四节电池的电池盒1个万能板(约12CM*17CM)1块所有元件按以下的电路图焊接在一块万能板上。
注意LM317的输出应由低调高,以免烧IC。
1、电路图1、功能简介该时钟以24小时制显示时间,并可显示2000年至2049年之间的任何日期及星期,日期与时间经按键可相互切换,可输入8个闹钟时间设置,每个闹钟设置包括响铃的时间(小时与分钟)、对工作日有效还是对周末有效的标志,以及本项设置是否启用的标志等三部分。
这8个闹钟设置均保存在EEPROM中,即使掉电也不用重新输入。
当然使用者可通过按钮对任何一个设置作修改。
数码管可经按钮关闭显示,避免夜间刺眼、影响睡眠。
调节LM317输出电压,可改变数码管亮度,但电压不能低于后备电池的电压,否则后备电池供电。
用四节1.5V电池串联作后备电源,保证市电停电时时钟继续走时。
时钟的精度取决于晶振频率的精度。
2、程序清单本程序用C语言编写,经Keil C51编译成二进制码后写入89C51内的EPROM内即可。
#include "atmel\at89x51.h"#include "intrins.h"unsigned char hour,min,sec,year,month,day,weekday; //当前时间、日期、星期unsigned int count_down; //1秒钟计时用bit led_on; //数码管是否点亮的标志unsigned char display[8]; //8位数码管要显示的数据unsigned char attr; //八个数码管的闪烁控制字节,当为0时,对应数码管闪bit flash; //LED闪烁开关,与attr共同决定数码管是否闪烁unsigned char show_status; //LED显示状态标志// 0:设置闹钟数据// 1:显示当前日期及星期// 2:显示当前时间// 3:设置当前日期// 4:设置当前时间bit km; //按键已去抖动标志bit kp; //按键已处理标志bit sound; //蜂鸣器响标志bit alarm_stop; //蜂鸣器响后用户手工按停标志struct { unsigned char h; //小时unsigned char m; //分钟} alarm[8]; //8个闹钟项unsigned char alarm_en; //闹钟项启用标志unsigned char alarm_wk; //闹钟项周末启用标志unsigned char cur_alarm_set; //当前设置的闹钟项unsigned char cur_alarm_active; //当前到点的闹钟项bit new_alarm_info; //闹钟项内容已修改标志sbit sound_output = P1^5; //蜂鸣器驱动端口,输出0时蜂鸣器响sbit SDA_PIN = P1^6; //EEPROM数据线端口sbit SCL_PIN = P1^7; //EEPROM时钟线端口void I2cDelay() //EEPROM操作时需要的延时函数{ _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();}void DelayX1ms(unsigned char count) //延迟函数,参数为毫秒数{unsigned char i,j;for(i=0;i<count;i++)for(j=0;j<240;j++) ;}void Start() //I2C启动,24C08使用I2C方式{ SDA_PIN=1; I2cDelay();SCL_PIN=1; I2cDelay();SDA_PIN=0; I2cDelay();SCL_PIN=0;}void Stop() //I2C停止{ I2cDelay(); SDA_PIN=0;I2cDelay(); SCL_PIN=1;I2cDelay(); SDA_PIN=1;I2cDelay();}bit SendByte(unsigned char value) //发送1字节数据给EEPROM {unsigned char i;bit no_ack=0;for(i=0;i<8;i++) //发送8位数据{ I2cDelay();if(value&0x80) SDA_PIN=1;else SDA_PIN=0;value=value<<1;I2cDelay(); SCL_PIN=1;I2cDelay();I2cDelay(); SCL_PIN=0;}I2cDelay(); SDA_PIN=1; //确认脉冲周期,等待EEPROM的确认I2cDelay(); SCL_PIN=1;I2cDelay();if(SDA_PIN==1) no_ack=1;I2cDelay(); SCL_PIN=0;return no_ack;}void mywrite(unsigned char address,unsigned char value) //向EEPROM写1字节{ Start(); SendByte(0xa0); SendByte(address);SendByte(value); Stop(); DelayX1ms(10);}unsigned char ReadByte() //从EEPROM接收1字节{unsigned char i,bval;bval=0;for(i=0;i<8;i++) //接收8位数据{ I2cDelay();SDA_PIN=1; //从P1输入数据时,先往P1输入“1”I2cDelay(); SCL_PIN=1;I2cDelay(); bval=bval<<1; if(SDA_PIN) bval=bval|0x01;I2cDelay(); SCL_PIN=0;}I2cDelay(); SDA_PIN=1; //确认脉冲周期,不送出确认I2cDelay(); SCL_PIN=1;I2cDelay();I2cDelay();return(bval);}unsigned char myread(unsigned char address) //从EEPROM读入1字节数据{unsigned char tmp;Start(); SendByte(0xa0); SendByte(address);Start(); SendByte(0xa1); tmp=ReadByte();Stop(); DelayX1ms(2);return(tmp);}void Timer0ISR(void) interrupt 1 using 3 //定时器0中断程序,用于走时,1/8000秒一次{unsigned char tmp,tmp_days;count_down--;if(count_down==1 || count_down==2001 || count_down==4001 || count_down==6001){ flash=~flash; //数码管闪烁的开关量if(sound && flash) sound_output=0; //驱动蜂鸣器else sound_output=1; //关闭蜂鸣器return;}/***计算当前日期为星期几***/if(count_down==3000){ if(year==0) weekday=5; //2000年1月1日为星期六else { tmp=(year-1)/4+1; tmp=(year-tmp)+tmp*2;weekday=(tmp+5)%7; //计算出当前年的1月1日为星期几}tmp_days=0;for(tmp=1;tmp<month;tmp++)if(tmp==1 || tmp==3 || tmp==5 || tmp==7 || tmp==8 || tmp==10)tmp_days=tmp_days+31;else if(tmp==4 || tmp==6 || tmp==9 || tmp==11)tmp_days=tmp_days+30;else if(tmp==2){ if(year%4==0) tmp_days=tmp_days+29;else tmp_days=tmp_days+28;}tmp_days=tmp_days+day-1; weekday=(weekday+tmp_days%7)%7+1;return;}/*** 查询是否有闹钟时间项符合触发条件***/if(count_down==5000){ if((alarm_stop || sound) && alarm[cur_alarm_active].m!=min) //触发后1分钟{ alarm_stop=0; sound=0; } //自动关蜂鸣器if(sound==0 && alarm_stop==0) //没有已触发的闹钟项for(tmp=0;tmp<8;tmp++) //则查询8个闹钟项内是否有符合条件的{ if(((alarm_en>>tmp)&1)==0) continue; //该闹钟项不启用if(((alarm_wk>>tmp)&1)==1) //该闹钟项周末有效{ if(weekday!=6 && weekday!=7) continue; } //当前不是星期六或星期天else{ if(weekday==6 || weekday==7) continue; }if(alarm[tmp].h==hour && alarm[tmp].m==min) //比较当前时间与该{ sound=1; cur_alarm_active=tmp; break; } //闹钟项的时间}return;}if(count_down==0) //过了一秒钟{ count_down=8000;sec++;if(sec==60){ sec=0;min++;if(min==60){ min=0;hour++;if(hour==24){ hour=0; day++;switch(day){ case 29: if(month==2 && year%4) { day=1; month=3; }break;case 30: if(month==2 && year%4==0) { day=1; month=3; }break;case 31: if(month==4 || month==6 || month==9 || month==11){ day=1; month++; }break;case 32: day=1; month++;if(month==13) { month=1; year++; }}}}}}}void Timer1ISR(void) interrupt 3 using 2 //定时器2中断,用于按键扫描{unsigned char keytmp;char tmp;TH1=0x15; TL1=0xa0; //每30ms中断一次/*** 当前显示的内容***/if(show_status==0) //当前正在设置闹钟项{ display[0]=cur_alarm_set; display[1]=0xf;display[2]=alarm[cur_alarm_set].h/10; display[3]=alarm[cur_alarm_set].h%10;display[4]=alarm[cur_alarm_set].m/10; display[5]=alarm[cur_alarm_set].m%10;display[6]=(alarm_wk>>cur_alarm_set)&1; display[7]=(alarm_en>>cur_alarm_set)&1;}if(show_status==1 || show_status==3) //当前显示或设置日期{ display[0]=year/10; display[1]=year%10; display[2]=month/10;display[3]=month%10; display[4]=day/10; display[5]=day%10;display[6]=0xf; display[7]=weekday;}if(show_status==2 || show_status==4) //当前显示或设置时间{ display[0]=hour/10; display[1]=hour%10; display[2]=min/10;display[3]=min%10; display[4]=sec/10; display[5]=sec%10;display[6]=0xf; display[7]=0xf; //最后两后无显示}/*** 按键扫描及处理***/keytmp=~(P1) & 0x0f;if(keytmp==0) { km=0; kp=0; }else{ if(km==0) km=1;else{ if(kp==0){ kp=1;if(keytmp==1) //第一个按钮{ if(sound) { alarm_stop=1; sound=0; } //如果闹钟正响,按此键停止else if((show_status==1 || show_status==2) && led_on) //正显示日期或时间{ show_status=0; cur_alarm_set=0; attr=0x3f; } //进入闹钟设置else if(show_status==0) //如正在设置闹钟时间项{ show_status=2; new_alarm_info=1; attr=0xff; } //返回当前时间显示return;}if(keytmp==2 && led_on) //第二个按钮,仅当数码管打开时有效{ switch(attr){ case 0xff: if(show_status==1) show_status=2; //在显示时间与日期间切换else if(show_status==2) show_status=1;break;case 0x3f: if(show_status==0) cur_alarm_set=(cur_alarm_set+1)%8;else if(show_status==3)year=(year+1)%50; //当前日期的“年”加1else if(show_status==4)hour=(hour+1)%24; //当前时间的“时”加1break;case 0xcf: if(show_status==0) //闹钟设置的“时”加1 alarm[cur_alarm_set].h=(alarm[cur_alarm_set].h+1)%24;else if(show_status==3){ month++; //当前日期的“月”加1if(month==13) month=1; }else if(show_status==4)min=(min+1)%60; //当前时间的“分”加1break;case 0xf3: if(show_status==0)alarm[cur_alarm_set].m=(alarm[cur_alarm_set].m+1)%60;else if(show_status==3){day++; //当前日期的“日”加1if(day==32) day=1; }else if(show_status==4){count_down=8000;sec=(sec+1)%60; } //当前时间的“秒”加1break;case 0xfd: if(show_status==0)alarm_wk^=0x1<<cur_alarm_set; //周末标志位切换break;case 0xfe: if(show_status==0)alarm_en^=0x1<<cur_alarm_set; //启用标志位切换} //end of switch(attr)return;} //end of if(keytmp==1)if(keytmp==4) //第三个按钮{ switch(attr){ case 0xff: if(show_status==1 || show_status==2)led_on=~led_on; //打开或关闭数码管显示break;case 0x3f: if(show_status==0) //如果正在设置闹钟{ if(cur_alarm_set==0) cur_alarm_set=7;else cur_alarm_set--;}else if(show_status==3) //当前日期的“年”减1{ if(year==0) year=49; else year--; }else if(show_status==4) //当前时间的“时”减1{ tmp=hour-1; if(tmp<0) hour=23; else hour=tmp; }break;case 0xcf: if(show_status==0) //闹钟设置的“时”减1{ tmp=alarm[cur_alarm_set].h-1;if(tmp<0) alarm[cur_alarm_set].h=23;else alarm[cur_alarm_set].h=tmp;}else if(show_status==3){ month--; //当前日期的“月”减1if(month==0) month=12; }else if(show_status==4){ tmp=min-1; //当前时间的“分”减1if(tmp<0) min=59; else min=tmp; }break;case 0xf3: if(show_status==0) //闹钟设置的“分钟”减1{ tmp=alarm[cur_alarm_set].m-1;if(tmp<0) alarm[cur_alarm_set].m=59;else alarm[cur_alarm_set].m=tmp;}else if(show_status==3){ day--; //当前日期的“日”减1if(day==0) day=31; }else if(show_status==4){ tmp=sec-1; //当前时间的“秒”减1count_down=8000;if(tmp<0) sec=59; else sec=tmp; }break;case 0xfd: if(show_status==0) //切换周末标志alarm_wk^=0x1<<cur_alarm_set;break;case 0xfe: if(show_status==0) //切换启用标志alarm_en^=0x1<<cur_alarm_set;} //end of switch(attr)return;} //end of if(keytmp==2)if(keytmp==8 & led_on) //第四个按钮,仅当数码管打开时有效{ switch(attr){ case 0xff: if(show_status==1) //如果当前显示日期show_status=3; //切换到调准日期状态else if(show_status==2) //如果当前显示时间show_status=4; //切换到调准时间状态attr=0x3f; break; //第一、二个数码管闪烁case 0x3f: attr=0xcf; break; //第三、四个数码管闪烁case 0xcf: attr=0xf3; break; //第五、六个数码管闪烁case 0xf3: if(show_status==0) attr=0xfd; //第七个数码管闪烁else if(show_status==3){ show_status=1; attr=0xff; } //恢复正常显示日期else if(show_status==4){ show_status=2; attr=0xff; } //恢复正常显示时间break;case 0xfd: if(show_status==0) attr=0xfe; //第八个数码管闪烁break;case 0xfe: if(show_status==0) attr=0x3f; //第一、二个数码管闪烁}} // end of if(keytmp==4)} // end of if(kp==0)} // end of if(km==0)} // end of if(keytmp!=0)}main(){unsigned char i;hour=23; min=58; sec=30; year=2; month=4; day=25;count_down=8000;flash=0; attr=0xff; led_on=1;km=0; kp=0; show_status=2; //加电后显示当前时间new_alarm_info=0; sound=0; alarm_stop=0;for(i=0;i<8;i++) //从EEPROM中读入8个闹钟设置{ alarm[i].h=myread(i*2); alarm[i].m=myread(i*2+1); }alarm_en=myread(i*2); alarm_wk=myread(i*2+1);IE=0; IP=0; //disable all interrupt and lower priorityTMOD=0x12; //timer 0 is set to mode 2,auto_reloading,timer1,mode 1TH0=6; TL0=6; //timer0 parameters for 0.125msTH1=0x15; TL1=0xa0; //timer1 parameters for 30msTR0=1; TR1=1; //timer0 interrupt most importantET0=1; ET1=1; EA=1; //enable interrupt functionwhile(1){ if(led_on)for(i=0;i<8;i++){ P2=0;if(flash || attr&(0x80>>i)){ P0=display[i]; P2=0x80>>i; DelayX1ms(1); }}else P2=0;if(new_alarm_info){ P2=0; //暂时关闭数码管new_alarm_info=0; //写入EEPROMfor(i=0;i<8;i++) { mywrite(i*2,alarm[i].h); mywrite(i*2+1,alarm[i].m); } mywrite(i*2,alarm_en); mywrite(i*2+1,alarm_wk);}}}。
学习计划定时闹钟软件推荐
学习计划定时闹钟软件推荐在市场上,有很多种不同类型的定时闹钟软件,它们各有特点,能够满足不同用户的需求。
本文将介绍几款功能强大、易用的学习计划定时闹钟软件,希望能够帮助大家更好地利用时间,提高学习效率。
1. ForestForest是一款非常有趣的定时闹钟软件,它的特点是通过“种树”来帮助用户集中注意力。
在设定学习计划时,用户可以选择一个具体的学习任务,然后设定学习时间,点击开始种树。
在学习的过程中,如果用户打开手机进行其他事务,设定的树木就会被砍倒,这样就会减少用户的学习动力。
通过这种方式,Forest可以帮助用户集中注意力,提高学习效率。
此外,Forest还有一个很有趣的功能,就是可以和朋友一起种树。
用户可以邀请朋友一起使用这个软件,在学习的过程中互相监督,从而增强学习动力。
这种社交功能可以帮助用户更好地坚持学习计划,提高学习效率。
2. TodaitTodait是一款功能强大的学习计划定时闹钟软件,它可以帮助用户制定详细的学习计划,并提供打卡、统计等功能,帮助用户更好地管理学习时间。
在使用Todait时,用户可以选择具体的学习任务和学习时间,软件会根据用户的情况进行学习计划的制定,提供合理的学习安排。
在学习的过程中,软件会提醒用户按时完成学习任务,并提供打卡功能,帮助用户记录学习的情况,并进行统计分析,从而了解自己的学习情况,提高学习效率。
此外,Todait还提供了丰富的学习资源,用户可以在软件中找到各种学习资料和题库,帮助用户更好地进行学习。
这些学习资源包括各种学科的知识点、习题、模拟考试等,用户可以根据自己的需要进行选择,帮助用户更好地进行学习。
3. Clockwork TomatoClockwork Tomato是一款专门针对番茄工作法的学习计划定时闹钟软件。
番茄工作法是一种时间管理方法,通过将工作时间划分成若干个25分钟的工作时间和短暂的休息时间,从而提高工作效率。
在使用Clockwork Tomato时,用户可以根据自己的学习任务设定具体的工作时间和休息时间,软件会提醒用户按时进行工作和休息,帮助用户更好地管理学习时间,提高学习效率。
用数码管(8位)显示的数字时钟程序
用数码管(8位)显示的数字时钟程序
一、程序概述
本程序使用单片机AT89S52,通过数码管(8位)显示当前时间,支持12小时制和24小时制切换,精度为秒。
二、程序实现
程序首先定义了数码管的连接方式和每个数字的位图数据,然后定义了时间变量和函数,包括:
1.初始化函数:设置数码管端口和时钟计数器的计数方式。
2.读时钟函数:读取时钟计数器及寄存器,返回当前时间的小时、分钟和秒数。
3.显示函数:将当前时间转化为8个数码管显示的位图数据,用数字和符号映射表将数字和符号的位图数据与数码管连接方式对应起来,输出到数码管上。
在主函数中,程序初始化后循环执行读时钟函数和显示函数,实现时钟的实时显示。
三、程序特点
1.采用8位数码管显示,时间更加直观。
2.支持12小时制和24小时制切换,适用于不同场景。
3.实现精度为秒的实时显示,更加准确。
四、程序优化
1.增加闹钟功能,提醒用户打卡或者起床。
2.加入温度传感器模块,实现显示温度的功能。
3.优化显示效果,增加字体和颜色等选项。
五、程序应用
本程序可应用于家庭、办公室、学校等场合,用于显示时间,提醒用户合理安排时间和时间管理,也可作为DIY电子制作的教学和实验材料,提高学生的动手实践能力和电子信息技术水平。
2017手机闹钟软件app排行榜前十名
2017手机闹钟软件app排行榜前十名2017手机闹钟软件排行前十名哪款好呢?智能手机苹果安卓手机闹钟软件app排行榜有哪些?下面是小编精心为你们整理的关于2017手机闹钟软件app排行榜前十名的相关内容,希望你们会喜欢! 2017手机闹钟软件app排行榜前十名_比较好的手机闹钟软件排行榜_苹果智能闹钟软件排行榜2017手机闹钟软件app排行榜1、天天闹钟天天闹钟天天闹钟:一款专为安卓手机用户量身定制的闹钟软件,全面超越了安卓手机系统自带闹钟。
提供大家常用的起床闹钟、会议提醒、语音备忘、倒计时等多种功能,天天闹钟专注于安卓手机用户,我们的目标是成为最强大最好用的安卓闹钟软件,天天闹钟将陪你度过每一个重要的时刻!【软件特色】1.超越系统功能:强大的响铃时间设定、铃声音量、延迟响铃时间设定、晃动手机延时响铃功能、震动闹钟等;2.个性闹钟定制:起床、生日、备忘等多种自定义闹钟提供完美解决个人生活提醒解决方案;3.智能语音闹钟:随心添加语音闹铃,个性更好用;4.智能备份还原:智能备份闹钟数据到手机,还原历史闹钟记录! 2017手机闹钟软件app排行榜2、闹钟达人闹钟达人科学实验证明不科学的叫床方法会导致一整天都精神萎靡,不要在意小编的言语不当。
这款闹钟达人可以用最温和有效的方式把你从深度睡眠中逐渐唤醒,再不用被粗暴的闹钟从睡梦中拖出来,大概现在的上班族学生啊最难受的事情就是早上起床了,有时候闹钟闹不醒或者闹钟傲娇不闹了直接导致上班上学迟到,使用合理的闹钟方式才是王道!【软件特色】完大年要上班开学了,早起又成了大家的困扰。
不必担心,起床困难户请看过来,闹钟达人来了!全宇宙顶尖科技闹钟,界面简单、功能强大!你曾被“杀伤性叫醒”方式摧残过吗?不用怕!“科学起床闹钟”让你免除起床的痛苦,在白譟声中唤醒潜意识,让沉睡的大脑渐渐苏醒。
你曾因为闹钟叫不醒你而误点、误机、误约会吗?不用怕!“暴力起牀闹钟”让您准点起牀,不再迟到!更有多功能个性化定制闹钟伴随左右。
智能电子钟用户手册2023
智能电子钟用户手册2023欢迎使用智能电子钟!本用户手册将详细介绍如何正确使用和操作您的智能电子钟,以确保您能够充分利用其功能和特性。
请仔细阅读以下内容,并按照说明进行操作。
1. 产品介绍智能电子钟是一款集时钟、闹钟、温度显示、语音助手等多功能于一体的智能设备。
它不仅具备准确的时间显示功能,还能提供定时闹铃、温度监测等实用功能,以及语音助手让您更方便地操作。
2. 功能操作2.1 时间设置智能电子钟具有自动对时功能,接通电源后会自动对准确时间进行同步。
如果需要手动设置时间,可按照以下步骤操作:- 进入设置界面,选择时间设置选项。
- 通过方向键或触摸屏进行时间的调整。
- 确认设置并退出。
2.2 闹铃设置智能电子钟提供多个闹铃设置,您可以根据需要设置多个不同的闹铃时间。
设置步骤如下:- 进入设置界面,选择闹铃设置选项。
- 通过方向键或触摸屏选择添加闹铃或编辑已有闹铃。
- 设置闹铃时间和重复模式。
- 退出设置。
2.3 温度显示智能电子钟可以实时显示室内温度,您可以随时了解当前的温度情况。
温度显示默认为摄氏度,您也可以根据需要切换到华氏度。
3. 语音助手智能电子钟内置了语音助手功能,您可以通过语音与时钟进行交互和操作。
声控唤醒命令为“Hi Clock”,之后可以进行相应的指令,例如调整时间、设置闹铃等。
4. 其他功能除了以上介绍的主要功能外,智能电子钟还具备一些其他实用的功能,例如闹钟震动、自动亮度调节等,您可以在设置界面进行相应设置。
5. 注意事项为了确保您正常使用智能电子钟,以下事项需要特别注意:- 请按照说明书中的操作步骤进行操作,以免造成不必要的困扰。
- 请注意防止智能电子钟受到水或其他液体的浸泡,以免损坏内部电子元件。
- 请避免将智能电子钟暴露在高温、潮湿或尘埃较多的环境中,以免影响正常使用或导致损坏。
感谢您阅读本智能电子钟用户手册,希望以上内容能够帮助您更好地使用和操作智能电子钟。
如有任何疑问或问题,请随时联系我们的客服人员,我们将竭诚为您提供帮助。
电子时钟设计DS++可调闹钟+程序清单
电子时钟设计DS++可调闹钟+程序清单本文主要介绍一种新型的电子时钟设计,名为DS++可调闹钟。
这种电子时钟不仅能够显示当前日期和时间,而且其可调节的闹钟功能也十分实用。
同时,我们还提供程序清单,供各位读者借鉴学习。
1. 电子时钟设计的背景和目标电子时钟已经成为人们日常生活中不可或缺的物品之一。
在市场上,人们可以买到各种各样的电子时钟,从简单的数字显示到智能语音交互。
然而,我们常常发现,在时钟设计中,用户体验常常被忽视。
比如,有的时钟功能繁杂,使用起来困难;有的时钟质量低劣,经常出现故障。
为了解决这些问题,我们决定设计一种更为智能且易用的电子时钟,就是DS++可调闹钟。
本次电子时钟设计的目标是:1)提供准确的时间显示和日期显示;2)提供可调闹钟功能和提示功能;3)简单易用,方便用户使用。
2. DS++可调闹钟设计方案2.1 电路原理图DS++可调闹钟的电路包括微处理器、振荡器、液晶显示模块、蜂鸣器、按键等部分。
主控芯片采用AT89S52(51系列微控制器),与液晶显示模块通过IIC总线通信。
振荡器采用32.768kHz的石英晶体振荡器,保证时钟的准确性。
2.2 功能模块设计液晶显示模块的设计是优化DS++可调闹钟的关键。
我们选用了1602A型液晶显示屏,显示内容包括日期、时间和闹钟状态。
闹钟模块是DS++可调闹钟的核心模块之一,它通过可调节的闹钟时间和闹钟提示音,方便用户设置并响铃提醒。
2.3 电路调试及测试在电路设计和焊接完成后,我们需要进行电路调试和测试。
在调试过程中,我们主要测试了电子时钟的时间显示、日期显示、闹钟设置等功能。
同时,我们还测试了与之相协调的同时供电设备,比如移动电源和插座电源。
3. 程序清单DS++可调闹钟的程序基于Keil/µVision IDE的汇编语言编写。
半个时钟周期内的指令流水线技术使得程序库在嵌入式微控制器上的表现达到质的提升,且运行速度更快。
DS++可调闹钟的程序清单如下:- 初始化电路;- 显示日期、时间;- 等待用户按键;-用户按键相应操作;- 播放闹钟提示音;- 关闭闹钟。
如何在华为手机上设置和使用智能闹钟
如何在华为手机上设置和使用智能闹钟智能手机已经成为我们日常生活中不可或缺的一部分。
除了基本的通信功能,智能手机还提供了众多实用的功能,其中之一就是智能闹钟。
华为手机作为一款功能强大的智能手机品牌,其智能闹钟功能也非常出色。
本文将介绍如何在华为手机上设置和使用智能闹钟。
一、打开闹钟设置1.解锁你的华为手机,进入主屏幕。
2.在主屏幕上找到“时钟”图标,点击打开时钟应用。
3.在时钟应用中,你会看到闹钟的选项。
点击进入闹钟设置界面。
二、设置闹钟时间1.在闹钟设置界面,你可以看到已经设置的闹钟列表。
如果你是第一次使用闹钟功能,列表中可能为空。
2.点击右下角的“+”按钮,进入设置新闹钟界面。
3.在设置新闹钟界面,你可以选择闹钟的时间。
点击时间选择框,滑动选择小时和分钟。
4.选择好时间后,点击确定。
三、选择闹钟重复模式1.在设置新闹钟界面,你可以选择闹钟的重复模式。
点击重复模式选项,你可以选择单次、每天、工作日等多种重复模式。
2.根据个人需求选择相应的重复模式。
四、设置闹钟铃声1.在设置新闹钟界面,你可以选择闹钟的铃声。
点击铃声选项,你可以看到系统提供的多种铃声。
2.点击你喜欢的铃声,即可设置为闹钟铃声。
五、设置闹钟标签1.在设置新闹钟界面,你可以为闹钟设置一个标签。
点击标签选项,输入你喜欢的标签名称。
2.设置好标签后,点击确定。
六、保存并启用闹钟1.在设置新闹钟界面,点击右上角的保存按钮,保存闹钟设置。
2.回到闹钟设置界面,你会看到已经设置的闹钟列表中出现了你刚刚设置的闹钟。
3.点击闹钟列表中的闹钟,你可以选择启用或禁用该闹钟。
启用后,该闹钟将在设定的时间响起。
七、使用智能闹钟1.当闹钟时间到达时,你的华为手机将会发出铃声提醒你。
2.你可以选择关闭闹钟,或者点击稍后提醒来延迟闹钟提醒。
3.如果你想删除某个闹钟,可以在闹钟设置界面长按该闹钟,然后选择删除。
八、其他设置和注意事项1.华为手机的智能闹钟还提供了其他一些设置选项,例如振动、渐响等。
如何在智能电视上使用电子时钟应用
如何在智能电视上使用电子时钟应用智能电视的普及使得人们在家中享受到了更加便捷丰富的娱乐方式。
除了观看电视节目和在线视频,智能电视还提供了许多实用的应用程序,如电子时钟应用。
电子时钟应用不仅仅可以告诉我们时间,还可以提供更多的功能和信息。
但是,许多用户可能不知道如何在智能电视上正确地使用电子时钟应用。
本文将介绍如何在智能电视上使用电子时钟应用,并提供一些实用的使用技巧和注意事项。
一、安装电子时钟应用使用智能电视的第一步是安装电子时钟应用。
通常,智能电视上已经预装了一些常用的应用程序,包括电子时钟应用。
如果您的智能电视上没有预装电子时钟应用,可以通过应用商店进行搜索和下载。
对于不同品牌的智能电视,应用商店的位置和操作方法可能会有所不同,您可以查找对应的操作手册或者在网络上寻找相关的使用指南。
二、设置时间和日期电子时钟应用需要正确的时间和日期信息才能正常运行。
在首次打开电子时钟应用之前,您需要在智能电视的设置菜单中设置时间和日期。
一般来说,设置菜单可以通过遥控器上的菜单键或者输入特定的快捷键来打开。
在设置菜单中,您可以找到日期和时间选项,并进行相应的设置。
如果智能电视连接了互联网,时间和日期一般会自动与网络同步。
三、选择时钟样式电子时钟应用通常有不同的时钟样式可供选择。
您可以根据个人的喜好和需求选择适合自己的时钟样式。
常见的时钟样式包括数字时钟、模拟时钟、多时区时钟等。
一些电子时钟应用还提供了自定义时钟样式的功能,您可以根据自己的喜好进行设置。
选择好时钟样式后,您可以在电子时钟应用中进行相应的设置和调整。
四、添加闹钟和提醒事项除了显示时间,电子时钟应用还可以用作闹钟和提醒事项的工具。
您可以在电子时钟应用中添加闹钟并设置响铃时间和铃声,这样就可以在指定的时间自动响铃提醒您。
另外,您还可以添加提醒事项,并设置提醒的日期、时间和内容。
这些功能非常实用,可以帮助您合理规划时间和提醒重要的事项。
五、设置屏幕保护功能电子时钟应用通常还带有屏幕保护功能,可以在电视屏幕长时间处于静止状态时显示时钟或其他画面,以防止屏幕出现静态图像的“烧屏”现象。
时间管理大师app时钟
时间管理大师app时钟简介时间是我们每个人都共同拥有的资源,而如何高效地管理时间,成为了现代社会中最重要的技能之一。
为了帮助人们更好地管理时间,许多时间管理工具和应用被开发出来,其中一款备受瞩目的应用就是时间管理大师app时钟。
时间管理大师app时钟是一款功能丰富、简洁易用的时间管理应用。
它提供了各种工具和功能,帮助用户更好地掌控时间,提高工作效率,实现自我管理的目标。
主要功能1. 闹钟提醒功能时间管理大师app时钟内置了强大的闹钟提醒功能,用户可以设置多个闹钟提醒,确保不会错过任何重要的约会、会议或任务。
用户可以根据自己的需求,在应用中设置每日、每周或者一次性的闹钟。
同时,用户还可以为每个闹钟设置自定义的铃声和震动模式,确保提醒方式更贴合个人喜好。
2. 多重时钟显示时间管理大师app时钟还提供了多重时钟显示功能,用户可以在应用中添加多个时钟,同时显示多个不同城市的时间。
这对于经常需要进行跨时区沟通的用户来说非常方便,他们不需要时刻计算时差,只需一眼就能获知全球各地的时间信息。
3. 任务管理时间管理大师app时钟还内置了强大的任务管理功能,帮助用户更好地规划和管理自己的任务。
用户可以将任务添加到应用中,设定优先级、截止日期、提醒时间等重要信息。
此外,用户还可以为不同的任务添加标签、附件和备注,更好地组织和查找任务。
4. 播放器时间管理大师app时钟还集成了一个简单的音频播放器,用户可以在应用中播放自己喜欢的音乐或海量音频资源。
这样,用户可以在忙碌的工作中享受音乐带来的放松和愉悦,提升工作效率。
5. 番茄钟技术时间管理大师app时钟还支持番茄钟技术,这是一种高效的时间管理方法。
用户可以在应用中设置番茄钟,按照固定的工作时间和休息时间间隔,进行高效的工作和休息。
通过使用番茄钟技术,用户可以有效地提高工作效率、防止拖延和疲劳。
优势和用户收益1. 简洁易用时间管理大师app时钟的设计十分简洁,界面友好,操作流畅。
可设置八个闹钟的智能时钟(原理图+程序)
可设置8个闹钟时间的智能时钟广东珠海曾向文普通的家用时钟一般只能设置一个闹钟时间,但很多人均需为工作日、周末、早晨、午休等不同时段设置不同的闹钟时间。
如果是使用普通的闹钟,只好每次休息前重新设置,很不方便,有时甚至会出现忘记更改闹钟设置而睡过头的情况。
针对这种情况,本人利用89C51单片机设计了一款有8种闹钟设置的时钟,通过一段时间的使用,情况良好。
1、元件清单共阴极数码管8个4511七段译码芯片1片ATMEL89C51单片机1片24C08EEPROM 1片24M晶振1个9V变压器(3V A)1个LM317输出可调稳压IC 1个整流桥堆1个470uF电容1个100uF电容1个10uF电容1个0.1uF电容1个33pF电容2个蜂鸣器1个9014(或其它NPN管)8个ksp92(或其它PNP管)1个二极管2个1K欧电阻16个470欧电阻1个10K欧可调电阻1个10K欧电阻4个按钮开关4个可装四节电池的电池盒1个万能板(约12CM*17CM)1块所有元件按以下的电路图焊接在一块万能板上。
注意LM317的输出应由低调高,以免烧IC。
电路图2、功能简介该时钟以24小时制显示时间,并可显示2000年至2049年之间的任何日期及星期,日期与时间经按键可相互切换,可输入8个闹钟时间设置,每个闹钟设置包括响铃的时间(小时与分钟)、对工作日有效还是对周末有效的标志,以及本项设置是否启用的标志等三部分。
这8个闹钟设置均保存在EEPROM中,即使掉电也不用重新输入。
当然使用者可通过按钮对任何一个设置作修改。
数码管可经按钮关闭显示,避免夜间刺眼、影响睡眠。
调节LM317输出电压,可改变数码管亮度,但电压不能低于后备电池的电压,否则后备电池供电。
用四节1.25V电池串联作后备电源,保证市电停电时时钟继续走时。
时钟的精度取决于晶振频率的精度。
3、程序清单本程序用C语言编写,经Keil C51编译成二进制码后写入89C51内的EPROM内即可。
可调闹钟
8888888888888888888888888888888888888888888888888888888888888888888888888888 8888888888888888888888888888888888; 可调闹钟;?8888888888888888888888888888888888888888888888888888888888888888888888888 88888888888888888888888888888888;******************************************; 控制位(三极管定义)kzSs bit p2.7kzSg bit p2.6KZFS BIT P2.5KZFG BIT P2.4; *******************************************SHI EQU 7FH ; 分的总存区SHI_G EQU 7EH ;分的个位存区SHI_S EQU 7DH ;分的十位存区FEN EQU 6FHFEN_G EQU 6EHFEN_S EQU 6DHBBST EQU 6CHBBFT EQU 6BHTTY EQU 22HFLG EQU 20H.0XSD equ 21hSHIn EQU 5FH ; 闹分的总存区SHIn_G EQU 5EH ;闹分的个位存区SHIn_S EQU 5DH ;闹分的十位存区∙2009-12-13 17:57∙回复∙∙暂_无名4楼FENn EQU 4FH∙FENn_G EQU 4EHFENn_S EQU 4DH;**************************************ORG 000HLJMP STARTORG 001BH ;程序开头LJMP DOSORG 0030H;**************************************; 程序初始化START:CLR p2.3CLR BBST ;辨调时时数码管跳?CLR BBFT ;辨调分时数码管跳?MOV SHI,#12H ;置零MOV 25H,#00hMOV SHI_S,#00HMOV SHI_G,#00HMOV FEN,#00HMOV FEN_G,#00HMOV FEN_S,#00HMOV SHIn,#00HMOV SHIn_S,#00HMOV SHIn_G,#00HMOV FENn,#00HMOV FENn_G,#00HMOV FENn_S,#00H∙2009-12-13 17:57∙回复∙∙暂_无名∙5楼MOV SP,#60HMOV TMOD,#10HMOV TH1,#3CH ; 送中断初值MOV TL1,#0B0HMOV R7 ,#10MOV R6,#00HMOV R4,#2MOV r2,#5SETB EA ; 开启中断SETB ET1SETB TR1;**************************************; 主程序MAIN:LCALL GDO ; 调用子程序模块化LCALL XSOlcall cxnz;*******************************************************************************************;独立式按键程序SW7:LCALL XSOJB P1.7,TTSW6 ; 进入调时LCALL XSOJB P1.7,TTSW6FOO:JB P1.7,SWJS ;放松?LCALL XSOLJMP FOOSWJS:SETB BBST∙2009-12-13 17:57∙回复∙∙暂_无名∙6楼JB P1.5,SWBS ; 加时键按下?LCALL XSOJB P1.5,SWBSJNB xsd,swjsCLR xsdMOV A,SHIDA ACJNE A,#24h,LOOP5MOV A,#00HLOOP5:MOV SHI, ASWBS:LCALL GDOLCALL XSOJB P1.7,SWJS ; 保时LCALL XSOJB P1.7,SWJSROO:JB P1.7, SWJF ;放松LCALL GDOLCALL XSOLJMP ROOTTSW6:LJMP SW6SWJF:CLR BBST ;保存时后调分调分SETB BBFTLCALL XSOJB P1.5,SWFHLCALL XSOJB P1.5,SWFHJNB xsd,swjfCLR xsdMOV A,FEN∙2009-12-13 17:57∙回复∙∙暂_无名∙7楼ADD A,#01DA ACJNE A,#60h,LOOP6MOV A,#00HLOOP6:MOV FEN,ALCALL GDOSWFH:JB P1.7,SWJF ; 保分返回LCALL XSOJB P1.7,SWJFYOO:JB P1.7,fff ;放松LCALL GDOLCALL XSOLJMP YOOfff:MOV TH1,#3CH ; 送中断初值MOV TL1,#0B0HCLR BBFTLJMP MAINSW6:JB P1.6,TTSW4 ; 进入调闹LCALL XSOJB P1.6,TTSW4AOOn:JB P1.6,SWJSn ;放松?LCALL xsoLJMP AOOnSWJSn:SETB BBSTJB P1.5,SWBSn ; 加时键按下?LCALL XSONJB P1.5,SWBSnJNB xsd,swjsnCLR XSDMOV A,SHIN∙2009-12-13 17:57∙回复∙∙暂_无名∙8楼ADD A,#01DA ACJNE A,#24h,LOOP8MOV A,#00HLOOP8:MOV SHIN, ASWBSn:LCALL GDONLCALL XSONJB P1.6,SWJSn ; 保时LCALL XSONJB P1.6,SWJSnROOn:JB P1.6, SWJFn ;放松LCALL GDONLCALL XSONLJMP ROOnTTSW4:LJMP SW4SWJFn:CLR BBSTSETB BBFTLCALL XSONJB P1.5,SWFHn ;保存时后调分调分LCALL XSONJB P1.5,SWFHnJNB xsd,swjfnCLR xsdMOV A,FENNADD A,#01DA ACJNE A,#60h,LOOP7MOV A,#00HLOOP7:MOV FENN,ALCALL GDONLCALL XSON∙2009-12-13 17:57∙回复∙暂_无名∙9楼SWFHn:JB P1.6,SWJFn ; 保分返回LCALL XSONJB P1.6,SWJFnYOOn:JB P1.6,fffn ;放松LCALL GDONLCALL XSONLJMP YOOnffFn:CLR BBFTLJMP MAINSW4:LCALL XSOJB P1.5,lmain ; 进入闹时切换LCALL XSOJB P1.5,lmainyyy:lcall gdonLCALL XSOnWOO:JB P1.5,lmain ;放松?ljmp yyylmain:ljmp main;*******************************************************************************************;高底分离子程序GDO:MOV A,SHIANL A,#0FHMOV SHI_G,AMOV A,SHIANL A,#0F0HSWAP AMOV SHI_S,AMOV A,FENANL A,#0FH∙2009-12-13 17:57∙回复∙10楼MOV FEN_G,AMOV A,FENANL A,#0F0HSWAP AMOV FEN_S,ARET;****************************************;闹高底分离子程序GDOn:MOV A,SHInANL A,#0FHMOV SHIn_G,AMOV A,SHInANL A,#0F0HSWAP AMOV SHIn_S,AMOV A,FENnANL A,#0FHMOV FENn_G,AMOV A,FENnANL A,#0F0HSWAP AMOV FENn_S,ARET;***************************************;时显示子程序XSO:JNB BBST,SSBTTJB TTY,SSBTTMOV A,#0FFHLJMP MMMSSBTT:MOV A,SHI_SMOV DPTR,#TABMOVC A,@A+DPTRMMM:MOV P0,ACLR KZSSDJNZ R6,$SETB KZSSSGT:JNB BBST,SGBTTJB TTY,SGBTT∙2009-12-13 17:57∙回复∙11楼MOV A,#0FFHLJMP NNNSGBTT:MOV A,SHI_GMOV DPTR,#TABMOVC A,@A+DPTRNNN:MOV P0,AMOV C, FLGMOV P0.7,CCLR KZSGDJNZ R6,$SETB KZSGFST:JNB BBFT,FSBTTJB TTY,FSBTTMOV A,#0FFHLJMP LLLFSBTT:MOV A,FEN_SMOV DPTR,#TABSMOVC A,@A+DPTRLLL:MOV P0,AMOV C, FLGMOV P0.6,CCLR KZFSDJNZ R6,$SETB KZFSFGT:JNB BBFT,FGBTTJB TTY,FGBTTMOV A,#0FFHLJMP KKKFGBTT:MOV A,FEN_GMOV DPTR,#TABMOVC A,@A+DPTRKKK:MOV P0,ACLR KZFGDJNZ R6,$SETB KZFGRET;*************************************** ;闹显示子程序XSOn:JNB BBST,SSBTTnJB TTY,SSBTTnMOV A,#0FFHLJMP MMMnSSBTTn:MOV A,SHIn_SMOV DPTR,#TABMOVC A,@A+DPTRMMMn:MOV P0,ACLR KZSSDJNZ R6,$∙2009-12-13 17:57∙回复12楼SETB KZSSSGTn:JNB BBST,SGBTTnJB TTY,SGBTTnMOV A,#0FFHLJMP NNNnSGBTTn:MOV A,SHIn_GMOV DPTR,#TABMOVC A,@A+DPTRNNNn:MOV P0,AMOV C, FLGMOV P0.7,CCLR KZSGDJNZ R6,$SETB KZSGFSTn:JNB BBFT,FSBTTnJB TTY,FSBTTnMOV A,#0FFHLJMP LLLnFSBTTn:MOV A,FENn_SMOV DPTR,#TABSMOVC A,@A+DPTRLLLn:MOV P0,AMOV C, FLGMOV P0.6,CCLR KZFSDJNZ R6,$SETB KZFSFGTn:JNB BBFT,FGBTTnJB TTY,FGBTTnMOV A,#0FFHLJMP KKKnFGBTTn:MOV A,FENn_GMOV DPTR,#TABMOVC A,@A+DPTRKKKn:MOV P0,ACLR KZFGDJNZ R6,$SETB KZFGRET;************************************;定时中断子程序DOS:PUSH ACCPUSH PSWMOV TH1,#3CHMOV TL1,#0B0Hdjnz r2,T01 ;给250ms 限制跳跃速度mov r2,#5∙2009-12-13 17:57∙回复13楼CPL TTYT01:DJNZ R5,T02 ; 给150ms 限制加仪速度MOV R5,#6SETB XSDT02:DJNZ R7,EXIT ;给0.5s 秒点MOV R7,#10CPL FLGDJNZ R4,EXITMOV R4,#2 ;给2 X 0.5s =1 S秒点MOV A,25HADD A,#01DA ACJNE A,#60H,LOOP4MOV 25H,#00HMOV A,FENADD A,#01DA ACJNE A,#60h,LOOP0MOV FEN,#00HMOV A,SHIADD A,#01DA ACJNE A,#24h,LOOP3MOV A,#00HLJMP LOOP4LOOP0:MOV FEN,ALJMP EXITLOOP3:MOV SHI,ALJMP EXITLOOP4:MOV 25H,AEXIT:POP PSWPOP ACCRETi;************************************cxnz:LCALL XSOmov a,shincjne a,shi,hhhmov a,fenncjne a,fen,hhhsetb p2.3ljmp hhhhh:clr p2.3hh:LCALL XSOretTAB:DB 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h TABS:DB 0c0h,0f9h,64H,70H,59H,52H,42H,0F8H,40H,50HEND。
八道计时器
八道计时器
设置倒计时器的时钟、分钟和秒钟,并启动它。
或者,您可以设置日期和时间来计算事件(或过去)的天数、小时数和秒数。
在设定的时间会显示一个计时器来触发提醒,并播放预先选择的声音。
在设置计时器时,您可以单击“测试”按钮以预览提醒并检查声音大小。
单击“重置”按钮可以通过初始值启动计时器。
单击“停止”(“开始”)按钮可以停止(启动)计时器。
您可以将不同时间设置的在线计时器的链接添加到浏览器的收藏夹中。
打开这样的链接会将该计时器设置为预定义的时间。
在假日列表中,您可以为列表中的任何假日启动倒计时定时器,或者为您自己的活动或假日创建新的定时器。
请确保与您的朋友分享您的计时器。
触摸屏闹钟操作方法
触摸屏闹钟操作方法触摸屏闹钟是一种智能化的电子产品,具有操作简单、功能齐全、方便实用的特点。
下面将详细介绍触摸屏闹钟的操作方法。
1. 时钟设置:在触摸屏闹钟上有一个显示时钟的区域,一般包括小时、分钟和秒。
可以通过轻触这个区域来设置时钟。
按下一次时钟区域,小时数字会闪动,说明可以通过触摸屏上的"+" 或"-" 按钮来调整小时数,调整完成后再次轻触时钟区域,此时分钟数字开始闪动,可以通过同样的方法来设置分钟数。
同样地,轻触时钟区域可以设置秒钟数。
设置完成后,再次轻触时钟区域即可保存设置。
2. 闹钟设置:触摸屏闹钟一般都具备多个闹钟设置功能,可以设置多个不同的闹钟时间。
在闹钟设置界面,可以通过"+" 或"-" 按钮来增加或减少闹钟个数。
点击某个闹钟的时间显示区域,数字会闪动,可以通过"+/-" 按钮来设置闹钟的小时和分钟。
此外,还可以设置闹铃的音量大小,一般有多个档位可供选择。
设置完成后,保存并退出设置界面。
3. 声音设置:触摸屏闹钟一般具有多种声音可供选择。
在设置界面中,可以找到声音设置选项,点击进入声音设置界面。
在此界面上,可以通过滑动条或"+"、“-”按钮来调节闹钟铃声的音量大小。
此外,还可以选择不同的闹钟铃声,有些触摸屏闹钟还提供了自定义铃声的功能。
4. 亮度调节:触摸屏闹钟一般具有背光灯,可以通过调节亮度来适应不同的环境。
在设置界面中,可以找到亮度调节选项,点击进入亮度调节界面。
在此界面上,可以通过滑动条或"+"、“-”按钮来调节屏幕的亮度。
根据个人需求,可以选择合适的亮度水平。
5. 休眠模式:触摸屏闹钟一般具有休眠模式,以节省能量和延长电池使用寿命。
在设置界面中,可以找到休眠模式选项,点击进入休眠模式设置界面。
在此界面上,可以设置休眠的时间段。
当达到设定的休眠时间后,触摸屏闹钟将自动进入休眠模式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
可设置8个闹钟时间的智能时钟广东珠海曾向文普通的家用时钟一般只能设置一个闹钟时间,但很多人均需为工作日、周末、早晨、午休等不同时段设置不同的闹钟时间。
如果是使用普通的闹钟,只好每次休息前重新设置,很不方便,有时甚至会出现忘记更改闹钟设置而睡过头的情况。
针对这种情况,本人利用89C51单片机设计了一款有8种闹钟设置的时钟,通过一段时间的使用,情况良好。
1、元件清单共阴极数码管8个4511七段译码芯片1片A TMEL89C51单片机1片24C08EEPROM 1片24M晶振1个9V变压器(3V A)1个LM317输出可调稳压IC 1个整流桥堆1个470uF电容1个100uF电容1个10uF电容1个0.1uF电容1个33pF电容2个蜂鸣器1个9014(或其它NPN管)8个ksp92(或其它PNP管)1个二极管2个1K欧电阻16个470欧电阻1个10K欧可调电阻1个10K欧电阻4个按钮开关4个可装四节电池的电池盒1个万能板(约12CM*17CM)1块所有元件按以下的电路图焊接在一块万能板上。
注应意LM317的输出由低调高,以免烧IC。
2、电路图3、功能简介该时钟以24小时制显示时间,并可显示2000年至2049年之间的任何日期及星期,日期与时间经按键可相互切换,可输入8个闹钟时间设置,每个闹钟设置包括响铃的时间(小时与分钟)、对工作日有效还是对周末有效的标志,以及本项设置是否启用的标志等三部分。
这8个闹钟设置均保存在EEPROM中,即使掉电也不用重新输入。
当然使用者可通过按钮对任何一个设置作修改。
数码管可经按钮关闭显示,避免夜间刺眼、影响睡眠。
调节LM317输出电压,可改变数码管亮度,但电压不能低于后备电池的电压,否则后备电池供电。
用四节1.5V电池串联作后备电源,保证市电停电时时钟继续走时。
时钟的精度取决于晶振频率的精度。
4、程序清单本程序用C语言编写,经Keil C51编译成二进制码后写入89C51内的EPROM内即可。
#include "atmel\at89x51.h"#include "intrins.h"unsigned char hour,min,sec,year,month,day,weekday; //当前时间、日期、星期unsigned int count_down; //1秒钟计时用bit led_on; //数码管是否点亮的标志unsigned char display[8]; //8位数码管要显示的数据unsigned char attr; //八个数码管的闪烁控制字节,当为0时,对应数码管闪bit flash; //LED 闪烁开关,与attr共同决定数码管是否闪烁unsigned char show_status; //LED 显示状态标志// 0:设置闹钟数据// 1:显示当前日期及星期// 2:显示当前时间// 3:设置当前日期// 4:设置当前时间bit km; //按键已去抖动标志bit kp; //按键已处理标志bit sound; //蜂鸣器响标志bit alarm_stop; //蜂鸣器响后用户手工按停标志struct { unsigned char h; //小时unsigned char m; //分钟} alarm[8]; //8个闹钟项unsigned char alarm_en; //闹钟项启用标志unsigned char alarm_wk; //闹钟项周末启用标志unsigned char cur_alarm_set; //当前设置的闹钟项unsigned char cur_alarm_active; //当前到点的闹钟项bit new_alarm_info; //闹钟项内容已修改标志sbit sound_output = P1^5; //蜂鸣器驱动端口,输出0时蜂鸣器响sbit SDA_PIN = P1^6; //EEPROM数据线端口sbit SCL_PIN = P1^7; //EEPROM时钟线端口void I2cDelay() //EEPROM操作时需要的延时函数{ _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();}void DelayX1ms(unsigned char count) //延迟函数,参数为毫秒数{unsigned char i,j;for(i=0;i<count;i++)for(j=0;j<240;j++) ;}void Start() //I2C启动,24C08使用I2C方式{ SDA_PIN=1; I2cDelay();SCL_PIN=1; I2cDelay();SDA_PIN=0; I2cDelay();SCL_PIN=0;}void Stop() //I2C停止{ I2cDelay(); SDA_PIN=0;I2cDelay(); SCL_PIN=1;I2cDelay(); SDA_PIN=1;I2cDelay();}bit SendByte(unsigned char value) //发送1字节数据给EEPROM {unsigned char i;bit no_ack=0;for(i=0;i<8;i++) //发送8位数据{ I2cDelay();if(value&0x80) SDA_PIN=1;else SDA_PIN=0;value=value<<1;I2cDelay(); SCL_PIN=1;I2cDelay();I2cDelay(); SCL_PIN=0;}I2cDelay(); SDA_PIN=1; //确认脉冲周期,等待EEPROM的确认I2cDelay(); SCL_PIN=1;I2cDelay();if(SDA_PIN==1) no_ack=1;I2cDelay(); SCL_PIN=0;return no_ack;}void mywrite(unsigned char address,unsigned char value) //向EEPROM写1字节{ Start(); SendByte(0xa0); SendByte(address);SendByte(value); Stop(); DelayX1ms(10);}unsigned char ReadByte() //从EEPROM接收1字节{unsigned char i,bval;bval=0;for(i=0;i<8;i++) //接收8位数据{ I2cDelay();SDA_PIN=1; //从P1输入数据时,先往P1输入“1”I2cDelay(); SCL_PIN=1;I2cDelay(); bval=bval<<1; if(SDA_PIN) bval=bval|0x01;I2cDelay(); SCL_PIN=0;}I2cDelay(); SDA_PIN=1; //确认脉冲周期,不送出确认I2cDelay(); SCL_PIN=1;I2cDelay();I2cDelay();return(bval);}unsigned char myread(unsigned char address) //从EEPROM读入1字节数据{unsigned char tmp;Start(); SendByte(0xa0); SendByte(address);Start(); SendByte(0xa1); tmp=ReadByte();Stop(); DelayX1ms(2);return(tmp);}void Timer0ISR(void) interrupt 1 using 3 //定时器0中断程序,用于走时,1/8000秒一次{unsigned char tmp,tmp_days;count_down--;if(count_down==1 || count_down==2001 || count_down==4001 || count_down==6001){ flash=~flash; //数码管闪烁的开关量if(sound && flash) sound_output=0; //驱动蜂鸣器else sound_output=1; //关闭蜂鸣器return;}/*** 计算当前日期为星期几***/if(count_down==3000){ if(year==0) weekday=5; //2000年1月1日为星期六else { tmp=(year-1)/4+1; tmp=(year-tmp)+tmp*2;weekday=(tmp+5)%7; //计算出当前年的1月1日为星期几}tmp_days=0;for(tmp=1;tmp<month;tmp++)if(tmp==1 || tmp==3 || tmp==5 || tmp==7 || tmp==8 || tmp==10)tmp_days=tmp_days+31;else if(tmp==4 || tmp==6 || tmp==9 || tmp==11)tmp_days=tmp_days+30;else if(tmp==2){ if(year%4==0) tmp_days=tmp_days+29;else tmp_days=tmp_days+28;}tmp_days=tmp_days+day-1; weekday=(weekday+tmp_days%7)%7+1;return;}/*** 查询是否有闹钟时间项符合触发条件***/if(count_down==5000){ if((alarm_stop || sound) && alarm[cur_alarm_active].m!=min) //触发后1分钟{ alarm_stop=0; sound=0; } //自动关蜂鸣器if(sound==0 && alarm_stop==0) //没有已触发的闹钟项for(tmp=0;tmp<8;tmp++) //则查询8个闹钟项内是否有符合条件的{ if(((alarm_en>>tmp)&1)==0) continue; //该闹钟项不启用if(((alarm_wk>>tmp)&1)==1) //该闹钟项周末有效{ if(weekday!=6 && weekday!=7) continue; } //当前不是星期六或星期天else{ if(weekday==6 || weekday==7) continue; }if(alarm[tmp].h==hour && alarm[tmp].m==min) //比较当前时间与该{ sound=1; cur_alarm_active=tmp; break; } //闹钟项的时间}return;}if(count_down==0) //过了一秒钟{ count_down=8000;sec++;if(sec==60){ sec=0;min++;if(min==60){ min=0;hour++;if(hour==24){ hour=0; day++;switch(day){ case 29: if(month==2 && year%4) { day=1; month=3; }break;case 30: if(month==2 && year%4==0) { day=1; month=3; }break;case 31: if(month==4 || month==6 || month==9 || month==11){ day=1; month++; }break;case 32: day=1; month++;if(month==13) { month=1; year++; }}}}}}}void Timer1ISR(void) interrupt 3 using 2 //定时器2中断,用于按键扫描{unsigned char keytmp;char tmp;TH1=0x15; TL1=0xa0; // 每30ms中断一次/*** 当前显示的内容***/if(show_status==0) //当前正在设置闹钟项{ display[0]=cur_alarm_set; display[1]=0xf;display[2]=alarm[cur_alarm_set].h/10; display[3]=alarm[cur_alarm_set].h%10;display[4]=alarm[cur_alarm_set].m/10; display[5]=alarm[cur_alarm_set].m%10;display[6]=(alarm_wk>>cur_alarm_set)&1; display[7]=(alarm_en>>cur_alarm_set)&1;}if(show_status==1 || show_status==3) //当前显示或设置日期{ display[0]=year/10; display[1]=year%10; display[2]=month/10;display[3]=month%10; display[4]=day/10; display[5]=day%10;display[6]=0xf; display[7]=weekday;}if(show_status==2 || show_status==4) //当前显示或设置时间{ display[0]=hour/10; display[1]=hour%10; display[2]=min/10;display[3]=min%10; display[4]=sec/10; display[5]=sec%10;display[6]=0xf; display[7]=0xf; //最后两后无显示}/*** 按键扫描及处理***/keytmp=~(P1) & 0x0f;if(keytmp==0) { km=0; kp=0; }else{ if(km==0) km=1;else{ if(kp==0){ kp=1;if(keytmp==1) //第一个按钮{ if(sound) { alarm_stop=1; sound=0; } //如果闹钟正响,按此键停止else if((show_status==1 || show_status==2) && led_on) //正显示日期或时间{ show_status=0; cur_alarm_set=0; attr=0x3f; } //进入闹钟设置else if(show_status==0) //如正在设置闹钟时间项{ show_status=2; new_alarm_info=1; attr=0xff; } //返回当前时间显示return;}if(keytmp==2 && led_on) //第二个按钮,仅当数码管打开时有效{ switch(attr){ case 0xff: if(show_status==1) show_status=2; //在显示时间与日期间切换else if(show_status==2) show_status=1;break;case 0x3f: if(show_status==0) cur_alarm_set=(cur_alarm_set+1)%8;else if(show_status==3)year=(year+1)%50; //当前日期的“年”加1else if(show_status==4)hour=(hour+1)%24; //当前时间的“时”加1break;case 0xcf: if(show_status==0) //闹钟设置的“时”加1alarm[cur_alarm_set].h=(alarm[cur_alarm_set].h+1)%24;else if(show_status==3){ month++; //当前日期的“月”加1if(month==13) month=1; }else if(show_status==4)min=(min+1)%60; //当前时间的“分”加1break;case 0xf3: if(show_status==0)alarm[cur_alarm_set].m=(alarm[cur_alarm_set].m+1)%60;else if(show_status==3){day++; //当前日期的“日”加1if(day==32) day=1; }else if(show_status==4){count_down=8000;sec=(sec+1)%60; } //当前时间的“秒”加1break;case 0xfd: if(show_status==0)alarm_wk^=0x1<<cur_alarm_set; //周末标志位切换break;case 0xfe: if(show_status==0)alarm_en^=0x1<<cur_alarm_set; //启用标志位切换} //end of if(keytmp==1)if(keytmp==4) //第三个按钮{ switch(attr){ case 0xff: if(show_status==1 || show_status==2)led_on=~led_on; //打开或关闭数码管显示break;case 0x3f: if(show_status==0) //如果正在设置闹钟{ if(cur_alarm_set==0) cur_alarm_set=7;else cur_alarm_set--;}else if(show_status==3) //当前日期的“年”减1{ if(year==0) year=49; else year--; }else if(show_status==4) //当前时间的“时”减1{ tmp=hour-1; if(tmp<0) hour=23; else hour=tmp; }break;case 0xcf: if(show_status==0) //闹钟设置的“时”减1{ tmp=alarm[cur_alarm_set].h-1;if(tmp<0) alarm[cur_alarm_set].h=23;else alarm[cur_alarm_set].h=tmp;}else if(show_status==3){ month--; //当前日期的“月”减1if(month==0) month=12; }else if(show_status==4){ tmp=min-1; //当前时间的“分”减1if(tmp<0) min=59; else min=tmp; }break;case 0xf3: if(show_status==0) //闹钟设置的“分钟”减1{ tmp=alarm[cur_alarm_set].m-1;if(tmp<0) alarm[cur_alarm_set].m=59;else alarm[cur_alarm_set].m=tmp;}else if(show_status==3){ day--; //当前日期的“日”减1if(day==0) day=31; }else if(show_status==4){ tmp=sec-1; //当前时间的“秒”减1count_down=8000;if(tmp<0) sec=59; else sec=tmp; }break;case 0xfd: if(show_status==0) //切换周末标志alarm_wk^=0x1<<cur_alarm_set;break;case 0xfe: if(show_status==0) //切换启用标志alarm_en^=0x1<<cur_alarm_set;} //end of if(keytmp==2)if(keytmp==8 & led_on) //第四个按钮,仅当数码管打开时有效{ switch(attr){ case 0xff: if(show_status==1) //如果当前显示日期show_status=3; //切换到调准日期状态else if(show_status==2) //如果当前显示时间show_status=4; //切换到调准时间状态attr=0x3f; break; //第一、二个数码管闪烁case 0x3f: attr=0xcf; break; //第三、四个数码管闪烁case 0xcf: attr=0xf3; break; //第五、六个数码管闪烁case 0xf3: if(show_status==0) attr=0xfd; //第七个数码管闪烁else if(show_status==3){ show_status=1; attr=0xff; } //恢复正常显示日期else if(show_status==4){ show_status=2; attr=0xff; } //恢复正常显示时间break;case 0xfd: if(show_status==0) attr=0xfe; //第八个数码管闪烁break;case 0xfe: if(show_status==0) attr=0x3f; //第一、二个数码管闪烁}} // end of if(keytmp==4)} // end of if(kp==0)} // end of if(km==0)} // end of if(keytmp!=0)}main(){unsigned char i;hour=23; min=58; sec=30; year=2; month=4; day=25;count_down=8000;flash=0; attr=0xff; led_on=1;km=0; kp=0; show_status=2; //加电后显示当前时间new_alarm_info=0; sound=0; alarm_stop=0;for(i=0;i<8;i++) //从EEPROM中读入8个闹钟设置{ alarm[i].h=myread(i*2); alarm[i].m=myread(i*2+1); }alarm_en=myread(i*2); alarm_wk=myread(i*2+1);IE=0; IP=0; //disable all interrupt and lower priorityTMOD=0x12; //timer 0 is set to mode 2,auto_reloading,timer1,mode 1 TH0=6; TL0=6; //timer0 parameters for 0.125msTH1=0x15; TL1=0xa0; //timer1 parameters for 30msTR0=1; TR1=1; //timer0 interrupt most importantET0=1; ET1=1; EA=1; //enable interrupt functionwhile(1){ if(led_on)for(i=0;i<8;i++){ P2=0;if(flash || attr&(0x80>>i)){ P0=display[i]; P2=0x80>>i; DelayX1ms(1); }}else P2=0;if(new_alarm_info){ P2=0; //暂时关闭数码管new_alarm_info=0; //写入EEPROMfor(i=0;i<8;i++) { mywrite(i*2,alarm[i].h); mywrite(i*2+1,alarm[i].m); }mywrite(i*2,alarm_en); mywrite(i*2+1,alarm_wk);}}}。