基于单片机控制的教学打铃系统的设计与实现WORD

上传人:无*** 文档编号:85657535 上传时间:2022-05-06 格式:DOC 页数:37 大小:645.50KB
收藏 版权申诉 举报 下载
基于单片机控制的教学打铃系统的设计与实现WORD_第1页
第1页 / 共37页
基于单片机控制的教学打铃系统的设计与实现WORD_第2页
第2页 / 共37页
基于单片机控制的教学打铃系统的设计与实现WORD_第3页
第3页 / 共37页
资源描述:

《基于单片机控制的教学打铃系统的设计与实现WORD》由会员分享,可在线阅读,更多相关《基于单片机控制的教学打铃系统的设计与实现WORD(37页珍藏版)》请在装配图网上搜索。

1、文档可能无法思考全面,请浏览后下载! 微机控制系统应用方向学年设计任务书 学 院计算机与信息工程学院专 业计算机科学与技术课程名称微机控制系统应用方向题 目基于单片机控制的教学打铃系统的设计与实现 完成期限2013年7月3日2013年8月29日共8周内容及任务一、项目的目的1. 利用单片机设计简单的教学打铃系统;2. 掌握设计文档的撰写技巧。二、项目任务的主要内容和要求1. 能够用7段数码管或者LCD显示时间;2. 能够对当前的时间设置进行校正;3. 能够按照学校当前的作息时间进行打铃;4. 完成系统设计说明文稿。三、 项目设计(研究)思路1.7月3号到7月8号这段时间组织组员讨论和分析本系统

2、所需的功能,所需的硬件器件,并搭建电路;2.7月9号到8月21号这段时间进行本系统的程序设计,完成该系统所需的功能模块;3.8月22号到8月27号这段时间完成整个系统程序并进行系统测试;4.8月28号8月29号编写学年设计报告文档。四、具体成果形式和要求1.本系统是在proteus仿真软件里进行测试;2.能通过7段数码管显示当前时间;3.能利用蜂鸣器按照学校当前的作息时间进行打铃;4.通过按键可以进行当前时间的校正以及作息时间的修改。进度安起止日期工作内容29 / 37排12013年7月3日2013年7月8日全组人讨论硬件环境设计的思路以及软件设计的思路22013年7月9日2013年7月15日

3、能够在数码管中显示电子钟并且到一定时间时自动打铃22013年7月16日2013年8月21日实现能够对当前时间进行校正以及对作息时间进行修改32013年8月22日2013年8月27日完成整个打铃程序的运行42013年8月28日2013年8月29日编写学年设计文档主要参考资料1 张凤言.电子电路基础M.北京:高等教育出版社,1995.2 戴佳.51单片机C语言应用程序设计实例精讲M.北京:电子工业出版社,2008.3 孙江宏. Protel 99 电路设计与应用M.北京:机械工业出版社,2001.4 王水富.基于8051的自动打铃系统设计J.电脑编程技巧与维护,2009,1(17):23-26.5

4、 王书杰.基于校园网络的自动打铃系统设计J.科学技术与工程,2011,11(31):204-207. 6 王娟.基于单片机的多功能定时打铃钟设计J.湖南农机,2011,4(5):85-86.7 于永51单片机C语言常用模块与综合系统设计实例精讲M北京:电子工业出版社,2007.指导教师意见(签字): 年月日系(教研室)主任意见(签字): 年月日基于单片机控制的教学打铃系统的设计与实现设计说明书(封面) 学院名称: 滁州学院 班级名称: 计算机科学与技术专业10级(2)班 学生姓名: 方纪锋、贝兴芝、陈文君、陈丹丹、陈竞 学 号: 2010211081、2010211066、2010211073

5、、2010211068、2010211070 题 目: 基于单片机控制的教学打铃系统的设计与实现 指导教师 姓 名: 姚光顺 起止日期: 2013年7月3日2013年8月29日 目录第一部分:正文部分1一、绪论11 设计背景12 主要工作和方法13 本文结构2二、相关知识21 单片机介绍22 显示器简介43 蜂鸣器简介5三、系统设计51 需求分析52 系统硬件电路设计63 软件设计流程图94 显示程序设计105 按键设定程序设计10四、系统实现111 功能模块11五、系统测试与数据分析181 元件清单182 调试过程18六、结论19第二部分:参考文献20第三部分: 指导教师评语21第四部分:成

6、绩评定21附录22基于单片机控制的教学打铃系统的设计与实现第一部分:正文部分一、绪论1 设计背景目前自动打铃系统广泛应用于生活、工作等方方面面,在人们的日常生活中起到重要作用。例如,在学校生活中,每天上下课都离不开打铃器的使用。打铃器可以为上下课的学生和老师们提供时间提醒,同时,也可作为一个提醒学生们作息时间的时间表,让大家有一个时间意识,形成规律的生物钟,对自身的健康也有很大的好处的。对于那些上课精力过于集中、知识面拓展比较广的老师的拖堂现象也给了一个下课时间提醒,以免耽误学生们下一节课的上课时间。最原始的打铃器是人工根据时间通过敲钟来提醒,随着技术的发展,开始有了机械式打铃器。随着二十世纪

7、电子技术的发展和二十一世纪半导体技术和集成电路的发展,电子技术开始渗入到各行各业,打铃器也更多的向着智能型转变。设备的智能化离不开单片机的使用。基于以上原因,本学年设计了一款基于单片机的自动打铃系统,使用简单方便。2 主要工作和方法 本系统主要完成以下工作: 能够通过7段数码管显示时间; 能够通过按键对当前的时间设置进行校正; 能够按照学校当前的作息时间进行打铃; 能够通过按键对学校当前的作息时间进行修改。3 本文结构本文第1部分绪论主要说明了本文的设计背景、主要工作和实现方法。第2部分相关知识介绍了单片机的概念、结构,数码管的相关知识,蜂鸣器的相关知识。第3部分系统设计,阐述了需求分析、系统

8、硬件设计和系统工作流程设计。第4部分系统实现介绍了系统各个功能模块。第5部分系统测试与数据分析,介绍了所用元件和调试过程。二、相关知识1 单片机介绍 单片机概念本系统采用AT89C51系列单片机。AT89C51是一种带4K字节 FLASH存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控

9、制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 单片机结构AT89C51的结构如图2-1所示:图2-1 AT89C51管脚图AT89C51的管脚说明如下: VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚

10、写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FL

11、ASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口同时为闪烁编程和编程校验接收一些控制信号。P3口也可作为AT89C51的一些特殊功能口,如表2-1所示:表2-1 AT89C51特殊功能表管脚备选功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(计时器0外部输入)P3.5T1(计时器1外

12、部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通) RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引

13、脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入;XTAL2:来自反向振荡器的输出。2 显示

14、器件简介本系统的显示时间功能是按照一般电子表的显示进行设计的,让其显示6为数字时间信息即显示时、分、秒,再加上成本等因素,所以我们选择用7段数码管进行显示。一般的七段数码管拥有八个发光二极管用以显示十进制0至9的数字,也可以显示英文字母,包括十六进制和二十进制中的英文至(a至f)。七段数码管由四个直向、三个横向及上右下角一点的发光二极管组成,由以上向条发光体组合出不同的数字。除七段数码管外,还有十四及十六划的显示器,但现时已被点阵显示器所取代。七段数码管分为共阳极及共阴极,共阳极的七段数码管的正极(或阳极)为八个发光二极管的共有正极,其他接点为独立发光二极管的负极(或阴极),使用者只需把正极接

15、电,不同的负极接地就能控制七段数码管显示不同的数字。3 蜂鸣器简介蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。压电式蜂鸣器工作原理:当接通电源后(1.515V直流工作电压),多谐振荡器起振,输出1.52.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。电磁式蜂鸣器工作原理:接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。三、系统设计1 需求分析 设计任务 能够通过7段数码管显示时间; 能够通过按键对当前的时间设置进行校正;

16、能够按照学校当前的作息时间进行打铃; 能够通过按键对学校当前的作息时间进行修改。 基本要求该系统具备以下几点基本要求: 基本计时和显示功能(用24小时制进行显示)。 能够设置当前时间。 能够实现基本打铃功能, 按照表3-1显示的时间进行打铃。表3-1 作息时间表上午下午晚上7:50预备铃14:10预备铃19:20预备铃8:00第一节课上14:20第五节课上19:30第九节课上8:45第一节课下15:05第五节课下20:15第九节课下8:55第二节课上15:15第六节课上20:25第十节课上9:40第二节课下16:00第六节课下21:10第十节课下10:00第三节课上16:20第七节课上10:4

17、5第三节课下17:05第七节课下10:55第四节课上17:15第八节课上11:40第四节课下18:00第八节课下 性能指标该系统具备以下性能指标: 时钟:时(2位)、分(2位)、秒(2位),时分秒用“-”分开。 校对键:设置键,左移/右移键,加减键,确定/取消键,添加键。 响铃:蜂鸣器。2 系统硬件电路设计分析完单片机教学打铃系统原理及特点后,设计了以下硬件系统。 总体方案设计本系统是基于单片机AT89C51的教学打铃系统。系统硬件电路包括:AT89C51单片机的最小系统硬件电路、时钟电路、显示电路、打铃电路。本系统的结构框图如图3-1所示:图3-1 系统结构图 硬件电路图 该系统的硬件电路如

18、图3-2所示:图3-2 硬件电路图 按键电路本系统接有8个按键,按键的一端接地。另一端分别单片机的P1.0P1.7口。按键从上到下的功能分别是:设置按键、加按键、减按键,左移按键、右移按键、确定按键、取消按键和修改闹铃按键。按键电路模块如图3-3所示:图3-3 按键电路模块图 显示电路根据设计要求,该系统采用共阴极数码管,其公共端接单片机的P0口。数码管显示电路使用AT89C51的动态显示功能,数码管的八段(a、b、c、d、e、f、g、dp)接入单片机的P2口,数码管分别显示:“时”、“”、“分”、“”、“秒”。数码管显示电路如图3-4所示:图3-4 显示电路图 打铃电路打铃电路(接P3.7)

19、:当前时间与程序设定时间相同时,P3.7端输出高电平的方波,即打铃。打铃电路模块如图3-5所示:图3-5 打铃电路图3 软件设计流程图图3-6 主程序流程图4 显示程序设计利用12MHz中断做时钟源进行计时,每20次中断秒加1。流程图如图3-7 所示:s图3-7 定时中断程序流程图5 按键设定程序设计本系统接有8个按键从上到下的功能分别是:设置按键、加按键、减按键,左移按键、右移按键、确定按键、取消按键和修改闹铃按键。当P1口输出低电平时,按键被按下,执行校正时钟操作和修改作息时间操作。 校正时钟程序流程图图3-8 校正时钟程序流程图 修改作息时间流程图图3-9 修改作息时间流程图四、系统实现

20、1 功能模块 时钟显示模块设置确定时钟是利用定时器T0 溢出中断方式,通过设置T0参数确定计时的基数,再对基数的计数确定出秒数,分钟数和时数。再用数码管将时间显示出来,其模块程序如下:/电子钟中断处理函数void time()interrupt 1 /定时器0中断 TH0=(65536-50000)/256; /设置T0参数,定时50ms TL0=(65536-50000)%256; if(temp19)/定时20次,50ms*20=1s temp=0; second+; /秒加加if(second59) second=0; minute+; /分加加if(minute59) minute=0

21、; hour+; /时加加 if(hour23) hour=0; else temp+; /数码管显示函数void show() P0=dis0; P2=dis1second%10; delay(40); /显示秒P0=dis1; P2=dis1second/10; delay(40);P0=dis2; P2=dis110; delay(40);P0=dis3; P2=dis1minute%10; delay(40); /显示分P0=dis4; P2=dis1minute/10; delay(40);P0=dis5; P2=dis110; delay(40); P0=dis6; P2=dis1

22、hour%10; delay(40); /显示时P0=dis7; P2=dis1hour/10; delay(40);中断处理函数采用方式1,最大能计时65536次,所以在该函数中最大能定时50ms;由于显示是按秒进行显示的,所以需要定时20次才能到达1s。然后再显示函数中显示当前时间,其中P0口是用来选择用哪个数码管显示,P2口是用来显示当前数码管的数值。 时钟校正模块设置当数码管显示的时间与实际时间不符时,可对其数码管显示的时间进行校正,点击设置键进入时间调整的状态,可用加减键,左移右移键对秒,分,时进行调整。最后点击确定或取消键完成时间校正。其模块程序如下:/加时间void add()

23、if(setflag0) if(lr=0) /修改秒的个位 second+; if(second=60) second=0; if(lr=1) /修改秒的十位 second=second+10; if(second=60) second=0; if(lr=3) /修改分的个位 minute+; if(minute=60) minute=0; if(lr=4) /修改分的十位 minute=minute+10; if(minute=60) minute=0; if(lr=6) /修改时的个位 hour+; if(hour=24) hour=0; if(lr=7) /修改时的十位 hour=hou

24、r+10; if(hour=24) hour=0; /减时间void reduce() if(setflag0) if(lr=0) /修改秒的个位 second-;if(second0) second=0; if(lr=1) /修改秒的十位 second=second-10; if(second0) second=0; if(lr=3) /修改分的个位 minute-; if(minute0) minute=0; if(lr=4) /修改分的十位 minute=minute-10; if(minute0) minute=0; if(lr=6) /修改时的个位 hour-; if(hour0)

25、hour=0; if(lr=7) /修改分的十位 hour=hour-10; if(hour7)lr=0; break; /左移加case 0xef:lr-; if(lr19)/定时20次 temp=0;second+;if(second59) second=0; minute+;if(minute59)minute=0; hour+; if(hour23) hour=0; else temp+; if(second=0) /用于判断该时间是否为打铃时间 flag1=1; if(t=0) /找到第一个打铃的时间 for(i=t;i0) /找到第一个闹铃后其他的闹铃按如下处理 if(bell_m

26、inutet=0&bell_hourt=0) kk=1; if(minute=bell_minutet) flag2=1; if(hour=bell_hourt) flag3=1; if(flag1=1&flag2=1&flag3=1&kk=0) /当前时间与打铃时间相等t+; Bell_Time=1;flag1=0;flag2=0;flag3=0;if(kk=1) t=0;为了更精确的控制打铃的时间,此模块利用定时器控制打铃的时间,每加一秒就进行判断当前时间是否与打铃时间相等,若相等,这让蜂鸣器响。五、系统测试与数据分析1 元件清单元件清单如表5-1所示:表5-1 元件清单表元件名称个数AT

27、89C5117SEG-MPX8-CC-BLUE1SOUNDER1BUTTON82 调试过程 时钟显示模块 系统运行时如图5-1所示:图5-1 时钟显示效果图 校正时钟模块当显示时间与当前时间不相符时,需要校正时钟。例如,系统显示时间如图5.2.1所示,当前时间为8:00,调试过程如下: 按下设置键,时钟停止,进入校正状态; 按下左移/右移键,选择对时、分或秒的校正; 按下加/减键,校正时钟到当前的时间; 按下确定键,校正成功; 按取消键回到原本显示时间。经过以上调试过程,可以校正成功,此时系统如图5-2所示:图5-2 校正后显示效果图 修改作息时间模块若需要修改作息时间,按照如下调试过程: 按

28、下修改键,时钟显示第一个打铃时间; 按下左移/右移键,选择要修改的打铃时间; 按下设置键,进入修改打铃时间状态(此过程和校正时钟过程相同); 按下确定键,修改打铃时间成功,显示当前时间; 按下取消键,显示当前时间。经过以上调试过程,可以修改成功。 打铃模块当系统显示时间与设定打铃时间相同时,打铃。六、结论本文阐述了自动打铃系统的工作原理、体系结构等。并设计实现了一个自动打铃系统,能够校对当前时间,选择合适的打铃时间,适合学校、工厂等管理机构。为了更好的实现自动打铃系统,我们首先对本系统的功能需求进行了分析并搭建了模拟电路;然后开始分模块进行软件设计,第一步我们是实现时钟显示模块即能够在数码管中

29、显示当前的时间,第二步是实现打铃模块即按照作息时间表依次打铃,第三步是实现校正当前时钟模块,第四步是实现作息时间修改模块;当全部模块都完成后,开始对实现的系统进行测试,通过测试数据的分析,系统能够很好的实现设计需求中的各种功能,但是程序还没有达到最优,需要进一步的优化和开发。通过本次设计,我们对所学的专业知识有了很好的回顾和实践,提高了自己的动手和思考能力,这对我们自身的发展有了很大的帮助,同时在此期间,我们查阅了很多的书籍和资料,从中我们学到了很多课本上没有的知识,拓展了自己的知识面,如果没有前期的准备工作是没法很好的完成此次设计的,所以多学、多看、多想、多动手才是学好知识的必要素质,这对我

30、们未来的发展和进步有着至关重要的作用。第二部分:参考文献1 张凤言.电子电路基础M.北京:高等教育出版社,1995.2 戴佳.51单片机C语言应用程序设计实例精讲M.北京:电子工业出版社,2008.3 孙江宏. Protel 99 电路设计与应用M.北京:机械工业出版社,2001.4 王水富.基于8051的自动打铃系统设计J.电脑编程技巧与维护,2009,1(17):23-26.5 王书杰.基于校园网络的自动打铃系统设计J.科学技术与工程,2011,11(31):204-207. 6 王娟.基于单片机的多功能定时打铃钟设计J.湖南农机,2011,4(5):85-86.7 于永51单片机C语言常

31、用模块与综合系统设计实例精讲M北京:电子工业出版社,2007.学生签名: 填表日期: 年 月 日第三部分: 指导教师评语第四部分:成绩评定指导教师签名: 填表日期: 年 月 附录/打铃系统#includereg51.h#define uchar unsigned char#define uint unsigned intsbit SPK=P37;/蜂鸣器bit Bell_Time=0;/到打铃时间标志uchar temp=0;/记录电子钟的计数次数uint time_count=0;/记录打铃时间的计数次数char second,minute,hour;/记录时间uchar seconds,m

32、inutes,hours; /用于保存按下设置按钮时的时间值uchar secondu,minuteu,houru;/ 用于保存按下修改按钮时的时间值uchar flag1,flag2,flag3,t;/标记是否可以打铃uint code dis1=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40;/共阴数码管0-9,0xBF为“-”,1表示点亮uchar code dis=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/选择哪个数码管,0表示选中uchar bell_hour=7,8,8,8,9,1

33、0,10,10,11,14,14,15,15,16,16,17,17,18,19,19,20,20,21,0; /小时的时间uchar bell_minute=50,0,45,55,40,0,45,55,40,10,20,5,15,0,20,5,15,0,20,30,15,25,10,0; /分的时间,秒的时间都为0 char lr;/记录左右移动的位置uchar flag=0;/用于记录点击移动按钮后移到第一位让其闪动uchar lr1=0;/设置第一位的闪动标志uchar flag4=1; /用于记录点击取消按钮后第一位不闪uchar ff=0;/用于判断第一次是右移后再次左移闪uchar

34、 key_code;/用于按键去抖时赋予P1口的值char chance,t1; /chance表示选择哪个打铃时间修改,t1用于标志变量uchar setflag=0; /在使用加,减,保存,取消按钮时,用于和修改打铃时间相区别uchar updateflag=0; uchar kk=0; /用于标志到数组的0:0:0/延迟函数void delay(uint tt) uchar i,j;for(i=0;itt;i+) for(j=0;j=1) lr1=0; flag=1;/用于记录点击移动按钮后再移到第一位让其闪动else/点击移动按钮,当lr7,则lr=0;即第一位闪 if(flag=1&

35、flag4=1) lr1=1; if(flag=1&flag4=1&ff=1) lr1=1; P0=dis0;P2=dis1second%10;if(lr1=1) delay(7);else delay(40);P0=dis1;P2=dis1second/10; if(lr=1)delay(7);else delay(40);P0=dis2;P2=dis110;delay(40);P0=dis3;P2=dis1minute%10;if(lr=3)delay(7);else delay(40);P0=dis4;P2=dis1minute/10;if(lr=4)delay(7); else del

36、ay(40);P0=dis5;P2=dis110;delay(40);P0=dis6;P2=dis1hour%10;if(lr=6)delay(7);else delay(40);P0=dis7;P2=dis1hour/10;if(lr=7)delay(7);else delay(40);/定时器1控制打铃时间void bellTime()interrupt 3 TH1=(65536-50000)/256; TL1=(65536-50000)%256; SPK=!SPK; if(+time_count=400) /响铃时间 time_count=0; Bell_Time=0; /到时间后关闭响

37、铃 /电子钟中断处理void time()interrupt 1 /定时器0中断 uchar i; flag1=0;flag2=0;flag3=0; TH0=(65536-50000)/256; TL0=(65536-50000)%256; if(temp19)/定时20次 temp=0;second+;if(second59) second=0;minute+;if(minute59)minute=0; hour+; if(hour23) hour=0; else temp+; if(second=0) /用于判断该时间是否为打铃时间 flag1=1; if(t=0) /找到第一个闹铃的时间

38、,可能不是数组里的第一个值for(i=t;i0) /找到第一个闹铃后其他的闹铃按如下处理 if(bell_minutet=0&bell_hourt=0) kk=1; if(minute=bell_minutet) flag2=1; if(hour=bell_hourt) flag3=1; if(flag1=1&flag2=1&flag3=1&kk=0)t+; Bell_Time=1;flag1=0;flag2=0;flag3=0;if(kk=1) /如果到0:0:0时,将从第一个闹铃开始 t=0;/设置时间函数void set() TR0=0; lr1=1; seconds=second;mi

39、nutes=minute;hours=hour;/取消时回到原来的时间/修改作息时间函数void update() TR0=0; secondu=second;minuteu=minute;houru=hour; /用于点击修改后回到点击时的时间 hour=bell_hourchance;minute=bell_minutechance;second=0;/加时间函数void add() if(setflag0) if(lr=0) second+; if(second=60) second=0; if(lr=1) second=second+10; if(second=60) second=0

40、; if(lr=3) minute+; if(minute=60) minute=0; if(lr=4) minute=minute+10; if(minute=60) minute=0; if(lr=6) hour+; if(hour=24) hour=0; if(lr=7) hour=hour+10; if(hour=24) hour=0; /减时间函数void reduce() if(setflag0) if(lr=0) second-; if(second0) second=0; if(lr=1) second=second-10; if(second0) second=0; if(l

41、r=3) minute-; if(minute0) minute=0; if(lr=4) minute=minute-10; if(minute0) minute=0; if(lr=6) hour-; if(hour0) hour=0; if(lr=7) hour=hour-10; if(hour0) /点击设置时 lr1=0;lr=0;flag4=0; if(t10)/点击修改时将修改的值保存到时间数组里 bell_hourchance=hour; bell_minutechance=minute; second=secondu;minute=minuteu;hour=houru;/回到点击

42、按钮时的值 /取消按钮函数void cancel() TR0=1; if(setflag0) /设为原来的值 if(seconds!=second)|(minutes!=minute)|(hours!=hour) second=seconds;minute=minutes;hour=hours; lr1=0;lr=0;flag4=0; if(t10) /回到点击按钮时的值 second=secondu;minute=minuteu;hour=houru; /主函数void main() uchar i; P0=0x00;/初始化全部点亮 P2=0x3f;/初始化显示为0 TMOD=0x01;/

43、定时器方式寄存器,选择定时器0,工作在方式1下 TH0=(65536-50000)/256; /定时50ms,50ms*20=1s TL0=(65536-50000)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1;/开总中断 ET0=1;/开定时器0中断 TR0=1;/启动定时器0 ET1=1; second=58;minute=48;hour=7; flag1=0;flag2=0;flag3=0;t=0; key_code=P1; lr=0;chance=0;t1=0; while(1) show(); if(Bell_Tim

44、e) TR1=1; else TR1=0; P1=0xff; key_code=P1; if(key_code!=0xff) /去抖 for(i=0;i0)lr+;if(lr7)lr=0; if(updateflag0)chance+;hour=bell_hourchance; minute=bell_minutechance;second=0;if(chance23)chance=0; break; case 0xef: /右移按钮 if(setflag0)lr-; if(lr0)chance-;hour=bell_hourchance; minute=bell_minutechance;second=0;if(chance0)chance=23; break; case 0xdf:cancel();setflag=0;updateflag=0;t1=0;break; /取消 case 0xbf:save();setflag=0;updateflag=0;t1=0;break; /确定 case 0x7f:updateflag+;lr=0;t1=1;update();break; /修改,按钮 (注:可编辑下载,若有不当之处,请指正,谢

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!