单片机实验报告(闹钟).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文档。上传文档
查看更多
单片机实验报告(闹钟)

单片机实验(闹钟部分修改版) 注:第一个是利用延时程序做的定时,循环太多定时不够精确;这一个用的是出栈和入栈的算法进行的定时,可以增加定时的精度。 程序目的说明:这是一个闹钟程序,当按下K1的时候,开始计时(说明:为了方便观察,我以10s中作为基本定时进行演示,如果需要其他定时可以通过修改部分程序得到),时间达到后,7段显示器和LED灯同时闪烁,若序号归零,则按下K2计时则停止。然后再按下K1计时又从新开始,以此类推。 电路图: 程序段: 效果展示: 点开始键,程序开始运行,但是K1开关还没有打开,所以计时还没有开始。 按下K1键,计时开始。 10s到达的时候,LED灯和计时屏幕一起闪烁(这里的LED灯也可以换成蜂鸣器) 再按下K2开关,LED灯和屏幕都不再闪烁。 再按下K1,再按K2,再按K1,又开始新一轮的计时。 实验总结: 我用了两种方法做闹钟程序,第一种是直接用延时做,但是做出来之后,当计时时间不断增加的时候,误差就变得越来越大,我觉得这个应该是由于循环次数太多,需要不断的加入计数初值造成的。而且由于延时没有时间上的加减,类似于一个总体的定时,所以我觉得应该是不能加显示器显示的,所以我觉得延时这种方法总体来说还不够科学,但是程序编辑起来非常简单,而且好懂,如果用于短时间的计时还是可以采用的。 第二种方法是在网上看的堆栈方法计时,然后经过自己改良后得到的,这种方法的计时相对于第一种延时的方法我觉得误差小了很多,由于它的时间是一次次加上去的,所以再经过二进制码和BCD码得转换,可以由七段显示器显示出来。这样计时和显示可以达到同步,更加方便明了。 实验中得问题: 但是还有一个没有解决的问题是,我希望的是K1控制开启闹,K2控制结束闹钟,但是K2控制结束闹钟,但是K2按下后LED和7段码显示器不会再闪烁了,但是计时还是在继续进行·只是没有显示出来,我不知道该怎么修改才可以让计时也完全停止下来···· 因为P0口内部没有上拉电阻,不能输出高电平,所以要接上拉电阻。排阻就是好多电阻连载一起,他们有一个公共端 LED6位七段码显示灯,从左到往右两位一组,分别显示HOUR, MINUTE,SECOND. LED灯,计时到达的时候LED灯闪烁,计时t停止时LED灯熄灭。 K1开关和P1.1口相连,K2和P2.2口相连,分别用于控制计时的开启和关闭 晶振电路,帮助减小计时过程中产生的误差。 程序说明:1.直接将开关定义为各个接口,可以方便之后程序中利用各个开光的状态进行跳转。 2.利用了计数/定时器0作为外部中断,当中断产生,自动跳入计时状态; 5.此段定义的是BCD码得时间,为了可以在七段显示器上面显示 4.此段定义的是需要计时(亮灯)的时间,我设定的10s亮灯,所以s为0ah,其他的均为00h 6.主程序中要调用闹钟程序timebear检测设定时间是否到达和显示时间的子程序display1. 3.此段定义的是而二进制的时间存储单元。 10.这个是用于判断K2开关是否按下:当K2开关按下的时候,跳入y1程序段,使7段显示器所显示的时间归零,并且使LED灯熄灭。 11.display为时间显示子程序,主要用于实现将二进制的时间转化为BCD码显示的时间,方便在七段显示器上显示。本质就是利用程序末尾列出的转换表进行转换 七段码转换表 9.time 为计算时间的子程序,用的是出栈入站的方式,基本定时是按为5ms,然后循环. 从second开始定时,超过60m就归零,minute加1,没有超过60s,就继续向上加;minute,hour都是这样的原理,需要注意的是,因为要出栈入栈,所以需要吧累加器和psw中的值入栈保护。 7.timebear程序段用于检测闹铃设定的时间是否达到,依次从second(s),minute(m),hour(h)检测,出现不匹配的就不再向下执行,若时间匹配就跳转至timecome。 8.timecome程序段主要控制P3.7口,时间达到的时候,使LED灯和7短码显示器点亮并闪烁,如果要不要灯和七段码显示器闪烁则删除: mov r7,#250 t2:mov r6,#124 t3:djnz r6,t3 djnz r7,t2 setb p3.7 这一段程序即可,这一段相当于机器周期,是灯的闪亮延时,就出现了闪烁的状态。

文档评论(0)

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

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

1亿VIP精品文档

相关文档