ImageVerifierCode 换一换
格式:DOC , 页数:30 ,大小:443.04KB ,
资源ID:4516966      下载积分:5 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4516966.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(基于单片机C定时闹钟的专业课程设计.doc)为本站上传会员【二***】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

基于单片机C定时闹钟的专业课程设计.doc

1、前 言 20世纪末,电子技术取得了飞速发展。在其推进下,现代电子产品几乎渗透了社会各个领域,有力地推进了社会生产力发展和社会信息化程度提升。同时也使现代电子产品性能深入提升,产品更新换代节奏也越来越快。 时间对大家来说总是那么宝贵,工作忙碌性和繁杂性轻易使人忘记目前时间。忘记了要做事情,当事情不是很关键时候,这种遗忘无伤大雅。不过,一旦关键事情,一时耽搁可能酿成大祸。比如,很多火灾全部是因为大家一时忘记了关闭煤气或是忘记充电时间。所以有必需制作一个定时系统。随时提醒这些轻易忘记时间人。 而钟表数字化给大家生产生活带来了极大方便,而且大大地扩展了钟表原先报时功效。诸如定时自动报警、按时自动打

2、铃、时间程序自动控制、定时广播、定时启闭电路、定时开关烘箱、通断动力设备,甚至多种定时电气自动启用等等。全部这些,全部是以钟表数字化为基础。所以,研究数字钟及扩大其应用,有着很现实意义。 伴随生活水平提升,大家越来越追求人性化事物。传统时钟已不能满足大家需求。而现代时钟不仅需要模拟电路技术和数字电路技术而且更需要单片机技术,增加数字钟功效。利用软件编程尽可能做到硬件电路简单稳定,减小电磁干扰和其它环境干扰,减小因元器件精度不够引发误差,不过数字钟还是能够改善和提升如选择更精密元器件。但和机械式时钟相比已经含有更高正确性和直观性,且无机械装置,含有更长使用寿命,所以得到了广泛使用。 数字钟经

3、过数字电路实现时、分、秒。数字显示计时装置,广泛用于个人家庭、车站、码头办公室等公共场所成为大家日常生活中不可少必需品。因为数字集成电路发展和石英晶体振荡器广泛应用,使得数字钟精度远远超出传统钟表。 多功效数字钟应用很普遍。由单片机作为数字钟关键控制器,经过它时钟信号进行实现计时功效,将其时间数据经单片机输出,利用显示器显示出来。经过键盘能够进行校时、定时等功效。输出设备显示器能够用液晶显示技术和数码管来显示技术。 本系统利用单片机实现含有计时、校时等功效数字时钟,是以单片机STC89C52为关键元件同时采取LCD1602显示“时”、“分”、“秒”现代计时装置。另外含有校时功效,

4、秒表功效,定时器功效和继电器控制外围电路功效,利用单片机实现数字时钟含有编程灵活,便于功效扩充等优点。 目 录 前 言 1 摘 要 I 第1章 课题背景 1 1.1 课题起源 1 1.2 课题研究目标和意义 1 1.3应处理关键问题及达成技术要求 2 第2章 方案选择和论证 3 2.1 单片机型号选择 3 2.2 按键选择 3 2.3 显示器选择 3 2.4 计时部分选择 3 2.5 发音部分设计 4 2.6 显示器驱动电路 4 2.7 电源选择 4 第3章 数字电子钟设计原理和方法 5 3.1 设计原理 5 3.2 硬件电路设计 5 3.2.

5、1 STC89C52单片机介绍 5 3.2.2 键盘电路设计 6 3.2.3 时钟电路 6 3.2.4 蜂鸣器驱动电路 6 3.2.5 继电器电路 7 3.2.6 LCD1602电路 7 3.2.7 复位电路 8 3.3 软件部分设计 8 3.3.1 主程序部分设计 8 总 结 11 附 录 12 摘 要 单片机自20世纪70年代问世以来,以其极高性能价格比,受到大家重视和关注,应用很广、发展很快。而51单片机是各单片机中最为经典和最有代表性一个。 本设计以STC89C52芯片为关键,辅以必需外围电路,设计了一个结构简单,功效齐全电子时钟,它由5V直流电源

6、供电。在硬件方面,除了CPU外,使用LCD1602来进行显示。软件方面采取C语言编程。整个电子钟系统能完成时间显示、调时、校时和三组定时闹钟功效。 选择单片机最小系统应用程序,添加比较程序、时间调整程序及蜂鸣程序,经过时间比较程序触发蜂鸣,实现闹钟功效,完成设计所需求软件环境。介绍并使用Keil单片机模拟调试软件,测试程序可行性并用Proteus进行仿真。 关键词:单片机,定时器,中止,闹钟,LCD1602 第1章 课题背景 1.1 课题起源 伴随生活水平提升,大家越来越追求人性化事物,传统时钟已不能满足大家需求。现代时钟不仅需要模拟电路技术而且需要数字电路技术和单片

7、机技术,增加时钟功效。数字电子钟可利用软件编程尽可能做到硬件电路简单稳定,减小电磁干扰和其它环境干扰,减小因元器件精度不够引发误差;尽管如此数字钟还是能够改善和提升,比如选择更精密元器件。但和机械式时钟相比已经含有更高正确性和直观性,且无机械装置,含有更长使用寿命,所以得到了广泛使用。 1.2 课题研究目标和意义 20世纪末,电子技术取得了飞速发展,在其推进下,现代电子产品几乎渗透了社会各个领域,有力地推进了社会生产力发展和社会信息化程度提升,同时也使现代电子产品性能深入提升,产品更新换代节奏也越来越快。 时间对大家来说总是那么宝贵,工作忙碌性和繁杂性轻易使人忘记目前时间。忘记了要做事情,

8、当事情不是很关键时候,这种遗忘无伤大雅。不过,一旦关键事情,一时耽搁可能酿成大祸。比如,很多火灾全部是因为大家一时忘记了关闭煤气或是忘记充电时间等造成。而钟表数字化给大家生产生活带来了极大方便。数字钟是经过数字电路实现时,分,秒数字显示计时装置,广泛用于个人家庭、车站、码头办公室等公共场所,成为大家日常生活中不可少必需品。因为数字集成电路发展和石英晶体振荡器广泛应用,使得数字钟精度,远远超出传统钟表,钟表数字化给大家生产生活带来了极大方便,而且大大地扩展了钟表原先报时功效,诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烤箱、通断动力设备、甚至多种定时电气自动

9、启用等。全部这些,全部是以钟表数字化为基础。所以,研究数字钟及扩大其应用,有着很现实意义。 1.3应处理关键问题及达成技术要求 使用STC89C52单片机结合字符型LCD显示器设计一个简易定时闹钟LCD时钟,若LCD选择有背光显示模块,在夜晚或黑暗场所中也可使用。定时闹钟基础功效以下: (1) 同时设置一个夜晚全芯片休眠功效,当定时时间到后,激活单片机同时开启报警,以起到一个节能作用。 (2) 显示格式为“时时:分分”。 (3) 由LED闪动来做秒计数表示。 (4) 一旦时间到则发出声响,同时继电器开启,能够扩充控制家电开启和关闭。 (5) 程序实施后工作指示灯LED闪动,表示

10、程序开始实施,LCD显示“00:00”,按下操作键K1~K4动作以下: K1—设置现在时间。 K2—显示闹钟设置时间。 K3—设置闹铃时间。 K4—闹铃ON/OFF状态设置,设置为ON时连续三次发出“哗”一声,设置为OFF发出“哗”一声。设置目前时间或闹铃时间以下。 K1—时调整。 K2—分调整。 K3—设置完成。 K4—闹铃时间到时,发出一阵声响,按下本键能够停止声响。第2章 方案选择和论证 2.1 单片机型号选择 经过对多个单片机性能分析,最终认为STC89C52是最理想电子时钟开发芯片。STC89C52是STC企业生产一个低功耗、高性能CMOS8位微控制器,含有

11、 8K 在系统可编程Flash存放器。STC89C52使用经典MCS-51内核,但做了很多改善使得芯片含有传统51单片机不含有功效。在单芯片上,拥有灵巧8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效处理方案。 2.2 按键选择 方案一:4×4矩阵式键盘。假如选择此方案,那么在修改时钟或设置闹铃时间时就能够直接从键盘输入,方便、快捷,但程序较为复杂。 方案二:独立式按键。假如设置过多按键,将会占用较多I/O口,而且会给布线带来不便,所以,此方案适适用于按键较少情况。假如选择此方案,因为按键较少,在修改时间或设置闹铃时间时就不能

12、直接输入,只能经过加或减完成,稍为麻烦部分,但其程序简单。 因为并不需要常常修改时间和设置闹铃时间,而且方案二程序简单,按键少、成本低,所以,选择方案二。 2.3 显示器选择 方案一:液晶显示器。假如选择此方案,将会降低系统功耗,这么就能够用电池供电,便于携带。但液晶显示器驱动电路复杂,使用起来有一定难度。 方案二:用数码管作为显示器。数码管驱动电路简单,使用方便,其缺点是功耗较大。 因为液晶显示器功耗低,显示内容灵活,所以选择方案一。 2.4 计时部分选择 假如使用时钟芯片,系统就不怕掉电且时间正确。但这种芯片比较贵,况且,设计本系统关键是为了学习单片机程序编写

13、和调试和设计硬件电路部分方法,所以采取软件方法来计时而没有采取价格较高时钟芯片。 2.5 发音部分设计 经过三极管放大后驱动蜂鸣器工作。 2.6 显示器驱动电路 采取LCD1602显示所需显示字符,需要用电位器调整背光。 2.7 电源选择 假如是用电池供电,就比较方便携带,但需要常常更换电池。况且,本系统体积较大,即使使用电池供电也不能随身携带,所以,用电池供电不大适宜,所以用5V外部稳压电源来供电。 第3章 数字电子钟设计原理和方法 3.1 设计原理 系统原理图 STC89C52 LCD1602 晶振 继电器 蜂鸣器 按键

14、 图3-1 系统原理图 3.2 硬件电路设计 3.2.1 STC89C52单片机介绍 STC89C52是STC企业生产一个低功耗、高性能CMOS8位微控制器,含有 8K 在系统可编程Flash存放器。STC89C52使用经典MCS-51内核,但做了很多改善使得芯片含有传统51单片机不含有功效。含有以下标准功效: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中止,一个7向量4级中止结构(兼容传统515向量2级中止结构),全双工串行口。

15、 3.2.2 键盘电路设计 键盘采取4个独立按键实现对时钟和闹钟设定及修改。 3.2.3 时钟电路 单片机时钟产生方法有两种:内部时钟方法和外部时钟方法。本系统中STC89C52单片机采取内部时钟方法。最常见内部时钟方法是采取外接晶体和电容组成并联谐振回路。振荡晶体可在1.2MHz~12MHz之间。电容值无严格要求,但电容取值对振荡频率输出稳定性、大小和振荡电路起振速度有少许影响,通常可在20pF~100pF之间取值 3.2.4 蜂鸣器驱动电路

16、发音部分是经过三极管放大驱动蜂鸣器工作,当闹钟开启时响三声,闹钟关闭时响一声。 图3-6 蜂鸣器驱动电路 3.2.5 继电器电路 当单片机引脚输出高电平时,三极管截止,继电器线圈两端没有电位差,继电器衔铁释放,同时状态指示发光二极管也熄灭,继电器常开触点释放,相当于开关断开。在三极管截止瞬间,因为线圈中电流不能突变为零,继电器线圈两端会产生一个较高电压感应电动势,线圈产生感应电动势则能够经过二极管IN4148释放,从而保护了三极管免被击穿,也消除了感应电动势对其它电路干扰,这就是二极管保护作用。 3.2.6 LCD1602电路

17、 3.2.7 复位电路 复位电路工作原理如上图所表示,VCC上电时,电容充电,在电阻上出现电压,使得单片机复位;多个毫秒后,电容充满,电阻上电流降为0,电压也为0,使得单片机进入工作状态。工作期间,按下按键,电容放电。松手,电容又充电,在电阻上出现电压,使得单片机复位。 总电路图 3.3 软件部分设计 3.3.1 主程序部分设计 主程序步骤图以下图3-7。 初始化设置 开始 和闹钟时间相同 显示时间 蜂鸣器响,继电器开启 否

18、 是 图 3-7主程序步骤图 4个按键每个全部含有两个功效,以最终实现菜单化输入功效。采取经过逐层嵌套循环扫描,实现嵌套式键盘输入。当抵达所设定时间以后,蜂鸣器发出声音,而且继电器开启,以此控制连接外围器件。 要达成按键含有多个功效,需在程序内设置变量,当按键按下和变量值同时满足实现一个功效,不一样时满足时实现另一个功效。 第4章 试验结果 此电子闹钟设计是先利用Proteus仿真软件进行仿真,实现了课程设计要求实现功效。然后在使用AltiumDesigner绘制原理图和PCB, 图3-14 运行仿真图

19、 实际电路运行图 总 结 经过自己不懈努力,我完成了单片机课程设计上任务要求。功效上达标:时钟显示,调时功效、校时功效、闹铃功效、闹钟设功效。其正确度完全能够满足日常生活显示时间需要;调时功效,方便快捷;校时功效确保了时钟正确和可靠性,经过继电器能够扩展多个外围电路可能。硬件设施合乎要求,软件设计能够配合硬件实现要求功效。 可见技术在不停进步,机械式时钟已经被淘汰,取而代之是含有高度正确性和直观性且无机械装置,含有更长使用寿命等优点数字时钟。数字时钟更具人性化,更能提升大家生活质量,更受大家欢迎。 无可否认机械时代已经过去,电子

20、时代已经到来。做为新时代我们,更应该提升本身能力,适应新时代发展。知识来自实践,多去生活中探询所需要。对于上述所提到研究课题,我们应尽可能考虑到人原因,增强时钟实用性和操作性,为使用者提供切实方便,营造一个舒适生活气氛。所以,在设计时候,应该从多方面、多角度去考虑问题,而且应该深入提升时钟质量。 另外,在此次设计过程中,我发觉很多问题,即使以前没有做过这么设计但经过这次设计我学会了很多东西,单片机课程设计关键就在于软件算法设计,需要有很巧妙程序算法,即使以前写过几次程序,但我觉写好一个程序并不是一件简单事,比如写一个程序看其功效极少认为编写程序简单,但到编程时候才发觉部分细微知识或低级错误常

21、常犯做不到最终常常失败,所以有些东西只有学精弄懂而且要细心才行,只学习理论有些东西是极难了解,更谈不上掌握。 从这次课程设计中,我们真真正正意识到,在以后学习中,要理论联络实际,把我们所学理论知识用到实际当中,学习单机片机更是如此,程序只有在常常练习过程中才能提升,我想这就是我在这次课程设计中最大收获。 附 录 相关程序代码: #include #include #define uint unsigned int #define uchar unsigned char #define LCD1602_DB P0 uchar code

22、 table[]="CurrentTime"; uchar code table1[]="00:00:00"; uchar key1Flag = 0; uchar key2Flag = 0; uchar key3Flag = 0; uchar key4Flag = 0; uchar temp = 0; uchar sec = 0; uchar min = 0; uchar hour = 0; uchar clkHour = 0; uchar clkMin = 0; uchar clkFlag = 0; uchar beepNum = 0; uchar relayFl

23、ag = 1; sbit LCD1602_RS = P2^0; //数据/命令选择端(电平H/L) sbit LCD1602_RW = P2^1; //数据/命令选择端(电平H/L) sbit LCD1602_E = P2^2; //使能信号 sbit Key1 = P1^0; sbit Key2 = P1^1; sbit Key3 = P1^2; sbit Key4 = P1^3; sbit Led = P2^4; sbit Speaker = P2^5; sbit Relay = P2^3; void Delay1ms() //@12.000MHz { uns

24、igned char i, j; i = 12; j = 169; do { while (--j); } while (--i); } void Delay20ms() //@12.000MHz { unsigned char i, j, k; _nop_(); _nop_(); i = 1; j = 234; k = 113; do { do { while (--k); } while (--j); } while (--i); } void Beep() { Speaker

25、 0; Delay20ms(); Speaker = 1; } void LcdWaitReady() { unsigned char sta; LCD1602_DB = 0xFF; LCD1602_RS = 0; LCD1602_RW = 1; do { LCD1602_E = 1; sta = LCD1602_DB; LCD1602_E = 0; }while(sta & 0x80); } void LcdWriteCmd(unsigned char cmd) { LcdWaitReady(); LCD16

26、02_RS = 0; LCD1602_RW = 0; LCD1602_DB = cmd; LCD1602_E = 1; LCD1602_E = 0; } void LcdWriteDat(unsigned char dat) { LcdWaitReady(); LCD1602_RS = 1; LCD1602_RW = 0; LCD1602_DB = dat; LCD1602_E = 1; LCD1602_E = 0; } void LcdSetCursor(unsigned char x, unsigned char y) { uns

27、igned char addr; if(y == 0) addr = 0x00 + x; else addr = 0x40 + x; LcdWriteCmd(addr | 0x80); } void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str) { LcdSetCursor(x, y); while(*str != '\0') { LcdWriteDat(*str++); } } void InitLcd1602() { LcdWriteC

28、md(0x38); LcdWriteCmd(0x0C); LcdWriteCmd(0x06); LcdWriteCmd(0x01); } void WriteAddress(uchar x) { LcdWriteCmd(0x80 + x); } void DisplayMinTens() { //显示分十位 WriteAddress(0x49); LcdWriteDat((min / 10) + '0'); Delay1ms(); } void DisplayMinUnits() { //显示分个位 WriteAddress

29、0x4A); LcdWriteDat((min % 10) + '0'); Delay1ms(); } void DisplayHourTens() { //显示时十位 WriteAddress(0x46); LcdWriteDat((hour / 10) + '0'); Delay1ms(); } void DisplayHourUnits() { //显示时个位 WriteAddress(0x47); LcdWriteDat((hour % 10) + '0'); Delay1ms(); } void Display

30、ClkMinTens() { //显示时钟分十位 WriteAddress(0x49); LcdWriteDat((clkMin / 10) + '0'); Delay1ms(); } void DisplayClkMinUnits() { //显示时钟分个位 WriteAddress(0x4A); LcdWriteDat((clkMin % 10) + '0'); Delay1ms(); } void DisplayClkHourTens() { //显示时钟时十位 WriteAddress(0x46); LcdWr

31、iteDat((clkHour / 10) + '0'); Delay1ms(); } void DisplayClkHourUnits() { //显示时钟时个位 WriteAddress(0x47); LcdWriteDat((clkHour % 10) + '0'); Delay1ms(); } void DisplayClkSecTens() { //显示秒十位 WriteAddress(0x4C); LcdWriteDat((sec / 10) + '0'); Delay1ms(); } void Display

32、ClkSecUnits() { //显示秒个位 WriteAddress(0x4D); LcdWriteDat((sec % 10) + '0'); Delay1ms(); } void ScanKey4() { if((Key4 == 0)&(clkFlag ==1)) { Delay20ms(); if((Key4 == 0)&(clkFlag ==1)) { clkFlag = 0; beepNum = 0; key4Flag = 0; } } } void InitTimer0() { //初始

33、化定时器0 TMOD = 0x01; TH0 = (65536 - 50000) / 256; TL0 = (65536 - 50000) % 256; EA = 1; ET0 = 1; TR0 = 1; } void main() { InitLcd1602(); LcdShowStr(0,0,table); LcdShowStr(6,1,table1); InitTimer0(); while(1) { if(sec == 60) { sec = 0; min++; } if(min == 60) {

34、 min = 0; hour++; } if(hour == 24) { hour = 0; } LcdShowStr(0,0,table); DisplayHourTens(); DisplayHourUnits(); LcdShowStr(8,1,":"); DisplayMinTens(); DisplayMinUnits(); LcdShowStr(11,1,":"); DisplayClkSecUnits(); DisplayClkSecTens(); //=================

35、 if((Key1 == 0)&(key1Flag == 0)) { //设置目前时间 Delay20ms(); if((Key1 == 0)&(key1Flag == 0)) { TR0 = 0; InitLcd1602(); LcdShowStr(0,0,"SetCurrentTime"); DisplayHourTens(); DisplayHourUnits(); LcdShowStr(8,1,":")

36、 DisplayMinTens(); DisplayMinUnits(); key1Flag = 1; } } while(key1Flag == 1) { if(Key1 == 0) { Delay20ms(); if(Key1 == 0) { hour++; if(hour == 24) { hour = 0; } DisplayHourTens(); DisplayHourUnits(); LcdShowStr(8,1,

37、":"); DisplayMinTens(); DisplayMinUnits(); } } if(Key2 == 0) { Delay20ms(); if(Key2 == 0) { min++; if(min == 60) { min = 0; hour++; } DisplayHourTens(); DisplayHourUnits(); LcdShowStr(8,1,":"); DisplayMinTens(

38、); DisplayMinUnits(); } } if((Key3 == 0)&(key1Flag == 1)) { //退出设置目前时间 Delay20ms(); if((Key3 == 0)&(key1Flag == 1)) { InitLcd1602(); LcdShowStr(0,0,table); DisplayHourTens(); DisplayHourUnits(); LcdShowStr(8,1,":"); DisplayMinTens(

39、); DisplayMinUnits(); LcdShowStr(11,1,":"); DisplayClkSecUnits(); DisplayClkSecTens(); key1Flag = 0; TR0 = 1; } } } //============================================================== if((Key2 == 0)&(key2Flag == 0)&(relayFlag == 1)) { //显示闹钟时间

40、 Delay20ms(); if((Key2 == 0)&(key2Flag == 0)&(relayFlag == 1)) { key2Flag = 1; InitLcd1602(); while(key2Flag == 1) { LcdShowStr(0,0,"Clock Time"); DisplayClkHourTens(); DisplayClkHourUnits(); LcdShowStr(8,1,":"); DisplayClkMinTens(); Display

41、ClkMinUnits(); if(Key2 == 0) { Delay20ms(); if(Key2 == 0) { key2Flag = 0; InitLcd1602(); DisplayHourTens(); DisplayHourUnits(); LcdShowStr(8,1,":"); DisplayMinTens(); DisplayMinUnits(); LcdShowStr(11,1,":");

42、 DisplayClkSecUnits(); DisplayClkSecTens(); } } } } } //============================================================== if((Key3 == 0)&(key3Flag == 0)) { //设置闹钟时间 Delay20ms(); if((Key3 == 0)&(key3Flag == 0)) { TR0 = 0; InitLcd1602(); L

43、cdShowStr(0,0,"SetClockTime"); DisplayClkHourTens(); DisplayClkHourUnits(); LcdShowStr(8,1,":"); DisplayClkMinTens(); DisplayClkMinUnits(); key3Flag = 1; } } while(key3Flag == 1) { if(Key1 == 0) { Delay20ms(); if(Key1 == 0) { clkHour++;

44、 if(clkHour == 24) { clkHour = 0; } DisplayClkHourTens(); DisplayClkHourUnits(); LcdShowStr(8,1,":"); DisplayClkMinTens(); DisplayClkMinUnits(); } } if(Key2 == 0) { Delay20ms(); if(Key2 == 0) { clkMin++; if(clk

45、Min == 60) { clkHour++; clkMin = 0; } DisplayClkHourTens(); DisplayClkHourUnits(); LcdShowStr(8,1,":"); DisplayClkMinTens(); DisplayClkMinUnits(); } } if(Key3 == 0) { //退出设置闹钟时间 Delay20ms(); if(Key3 == 0) { ke

46、y3Flag = 0; InitLcd1602(); TR0 = 1; DisplayHourTens(); DisplayHourUnits(); LcdShowStr(8,1,":"); DisplayMinTens(); DisplayMinUnits(); LcdShowStr(11,1,":"); DisplayClkSecUnits(); DisplayClkSecTens(); } } } //===================

47、 if((Key4 == 0)&(key4Flag == 0)) { //闹钟ON/OFF位设置 Delay20ms(); if((Key4 == 0)&(key4Flag == 0)) { key4Flag = 1; InitLcd1602(); LcdShowStr(0,0,"Clock ON"); Delay20ms(); Beep(); Delay20ms(); Beep(); Delay20m

48、s(); Beep(); Delay20ms(); Delay20ms(); } } if((Key4 == 0)&(key4Flag == 1)) { //闹钟ON/OFF位设置 Delay20ms(); if((Key4 == 0)&(key4Flag == 1)) { key4Flag = 0; InitLcd1602(); LcdShowStr(0,0,"Clock OFF"); Beep(); Delay20ms(); Delay20ms(

49、); Delay20ms(); Delay20ms(); } } //============================================================== if((key4Flag == 1)&(hour == clkHour)&(min == clkMin)) { clkFlag = 1; //闹钟时间到 InitLcd1602(); LcdShowStr(0,0,"Time's up"); Relay = 0; relayFlag = 0;

50、 //继电器吸合 while(clkFlag == 1) { Beep(); ScanKey4(); Delay20ms(); ScanKey4(); Delay20ms(); ScanKey4(); Delay20ms(); ScanKey4(); Delay20ms(); ScanKey4(); beepNum++; if(beepNum == 20) { clkFlag = 0; beepNum = 0; key4Flag

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服