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

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE 23 设计报告 万年历时钟的设计 班级: 09光电2班 专业: 光电子技术 姓名: 阮 军 峰 学号: 0906010234 完成日期: 2011年 设计目的: 掌握C51程序用于实践并实现相应的功能; 掌握时钟程序的使用方法; 掌握时间函数的使用方法; 掌握键盘的程序使用方法; 设计任务: 设计一个智能化万年历时钟电路,LED数码管作为电路的显示部分,按钮开关作为调时部分,通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期、温度。并能准确计算闰年闰月的显示。 设计要求: 通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期等功能,并能准确计算闰年闰月的显示,三个个按钮连接P3.0、P3.1、P3.2可以精确调整每一个时间数值,通过对所设计的万年历时钟电路进行实验测试,达到了动态显示时间,随时调整时间等技术指标。 系统方案设计: 1、系统总体设计: 1) 原理构成框图 本设计用STC89C51作为核心控制部分,外接晶振电路和74HC154,74LS138作为位选扩展电路,P3.0、 P3.1 、P3.2接三个个按钮作为时间调整部分,以两个17个数码管作为显示部分,P2口作为位选,P0口作为数据输出部分。具体框图如图1所示: 数码管数据输出部分单片机S 数码管数据输出部分 单片机 Stc89C51 按钮调整时间部分 按钮调整时间部分 温度采集部分 温度采集部分 三八译码器,4-16译码器扩展位选部分 三八译码器,4-16译码器扩展位选部分 晶振电路 晶振电路 图1 原理框图 开始 开始 清显示缓冲区 初始化定时计数器 赋时钟初值 开定时器 调整时间 数码管显示当前时钟值 定时中断 定时中断 赋初值 赋初值 定时器计时 定时器计时 秒加1判断是否到60秒N 秒加1 判断是否到60秒 N 分加1判断分是否到60分N 分加1 判断分是否到60分 N Y Y 时加1判断时是否到24时N 时加1 判断时是否到24时 N Y Y 判断天是否到32和星期是否到8 判断天是否到32和星期是否到8 天和星期加1 天和星期加1 N判断月是否到13月Y N 判断月是否到13月 Y N Y 月加1 月加1 堆栈返回 堆栈返回 Y Y N年加1判断年是否到100年 N 年加1 判断年是否到100年 时单元清0 时单元清0 2) 主程序的设计 系统程序采用C语言按模块化方式进行设计,然后通过KeilC51L软件开发平台将程序转变成十六进制程序语言,得到HEX文件,接着使用Proteous进行仿真,其次,按照Proteous的仿真电路图,在Protel99SE中完成电路板的逻辑布局及布线。 3) 时间调整电路的设计 采用按键设计,独立式按键直接与单片机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)

文档评论(0)

kfcel5889 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档