带温度显示的万年历数码管显示.docx

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
设计报告 万年历时钟的设计 班级: 09 光电 2班 专业: 光电子技术 姓名: 阮军峰 学号: 0906010234 完成日期: 2011 年 06 月 11 日 PAGE PAGE # 设计目的 : 1、 掌握 C51程序用于实践并实现相应的功能; 2、 掌握时钟程序的使用方法; 3、 掌握时间函数的使用方法; 4、 掌握键盘的程序使用方法; 二、 设计任务: 设计一个智能化万年历时钟电路, LED数码管作为电路的显示部 分,按钮开关作为调时部分,通过与单片机连接数码管动态显示年、 月、日、时、分、秒、星期、温度。并能准确计算闰年闰月的显示。 三、 设计要求: 通过与单片机连接数码管动态显示年、月、日、时、分、秒、星 期等功能,并能准确计算闰年闰月的显示,三个个按钮连接 P3.0 、 P3.1 、P3.2 可以精确调整每一个时间数值,通过对所设计的万年历 时钟电路进行实验测试, 达到了动态显示时间, 随时调整时间等技术 指标。 四、 系统方案设计: 1、系统总体设计: 原理构成框图 本 设 计 用 STC89C51作 为 核 心 控 制 部 分 , 外接 晶 振 电 路 和 74HC154,74LS138 作为位选扩展电路, P3.0、 P3.1 、P3.2 接三个 个按钮作为时间调整部分,以两个 17 个数码管作为显示部分, P2口 作为位选, P0口作为数据输出部分。具体框图如图 1 所示: 图 1 原理框图 主程序的设计 系统程序采用 C语言按模块化方式进行设计 , 然后通过 KeilC51L 软件开发平台将程序转变成十六进制程序语言, 得到 HEX文件,接着 使用 Proteous 进行仿真,其次,按照 Proteous 的仿真电路图,在 Protel99SE 中完成电路板的逻辑布局及布线。 时间调整电路的设计 采用按键设计,独立式按键直接与单片机 I/O 口相连构成键盘, 每个按键不会相互影响,按下模式可以选择 年 月 日 时 分 秒 星 期。按下( +)(- )进行调试,程序如下: while(1) { P3_0=1; if(P3_0==0){ delay(10); if(P3_0==0)// 如果按键被按下 { Kdelay(); if(P3_0==0)// 确定按键按下 { while(P3_0==0); // 等待按键放开 cursor++; if(cursor=9){cursor=0;}// 如果 cursor 大于 9 则 cursor=0 if(P1_0==0){cursor=0;} } } } P3_1=1; if(P3_1==0){ delay(10); if(P3_1==0) // 如果按键被按下 { Kdelay(); if(P3_1==0) // 确定按键按下 { if(cursor==1) { sec++;// 如果 cursor=1 则按键按下秒数加一 if(sec==60) sec=0;// 如果秒数等于 60秒则回到 0 开始 } if(cursor==2) { min++;// 如果 cursor=2 则按键按下分数加一 if(min==60) min=0; 如果分数等于 60 分则回到 0 开始 } if(cursor==3) { hour++;// 如果 cursor=3 则按键按下时数加一 if(hour==24) hour=0; // 如果时数等于 24时则回到 0 开始 } if(cursor==4) { day++;// 如果 cursor=4 则按键按下天数加一 if(day==31) day=0; // 如果天数等于 31 天则回到 0 开始 } if(cursor==5) { month++;// 如果 cursor=5 则按键按下月数加一 if(month==13) month=0; // 如果月数等于 13 月则回到 0 开始 } if(cursor==6) { yearl++;// 如果 cursor=6 则按键按下年数低位加一 if(yearl==100) yearl=0; // 如果年数等于 100 则回到 0 开始 } if(cursor==7) { yearh++;// 如果 cursor=7 则按键按下年数高位加一 if(yearh==30) yearh=20; // 如果年数大于 30 则回到 0 开始 } if(cursor==8) { week++;// 如果 cursor=8 则按键按下星期数加一 if(week==8) week=1; // 如果星期数等于 8 则回到 0 开始 } } while(P3_1==0);} } P3_2=1; // 写入时先写 1 if(P3_2==0){// 按键按下 delay(10);/

您可能关注的文档

文档评论(0)

dongguiying + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档