基于单片机的智能电子钟系统设计本科学位论文.doc

基于单片机的智能电子钟系统设计本科学位论文.doc

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于单片机的智能电子钟系统设计本科学位论文

基于单片机的智能电子钟系统设计 姓 名:李永健、王海、吕军梅、巩珍珍 2014年12月 巩珍珍电子钟计时 数码管显示 调时 定闹、报警 温度采集 通过定时器/计数器0实现1s的计时,将它设计成内部中断,即每计满1s产生中断信号,主程序转去执行定时器0的中断服务程序,按照时间规则改变相应RAM存储单元的数值。在主程序里首先不断检测是否有按键按下,如果没有,则不断调用显示子程序,否则,根据按下的是哪个键可以转去执行相应的程序段,分别实现小时和分钟的加和减以及闹钟定时,而每次执行结束都会调用显示子程序,保证数码管的稳定显示,同时也可以实时根据存储单元数值的不同显示。 而闹钟的倒计时则利用定时器/计数器1的计时来实现,同样为1s计时,只不过是在中断服务程序中实现对存储单元的按规则递减,同样的即使显示就可以实现倒计时功能,到达00:00:00时就可以调用报警子程序,实现报警。 RAM单元分配 (21H).0 指示即将显示的是十位还是个位 20H #0AH,定时器/计数器0或1计满10次为1s 19H #05H,定时器/计数器0或1计满5次为0.5s 18H #05H,显示子程序内部执行次数 29H 30H 小时的BCD码 31H 分钟的BCD码 32H 秒的BCD码 TH0 #3CH,T0计数初值,可计时100ms TL0 #0B0H TH1 #3CH,T1计数初值,可计时100ms TL1 #0B0H (2) 循环执行部分: HERE: LCALL ADJUST AJMP HERE ;反复调用 ADJUST程序可以实现所有功能 (3)主程序的初始化部分: MAIN: SETB P3.0 CLR P3.1 MOV TMOD,#01H ;设T0方式1,定时 CLR A ;A清零 MOV 30H, A ;“时”单元清零 MOV 31H, A ;“分”单元清零 MOV 32H, A ;“秒”单元清零 SETB ET0 ;允许中断 SETB ET1 SETB EA ;CPU开中断 MOV TH0, #3CH ;给T0装入计数初值,可计时100ms MOV TL0, #0B0H ; MOV TH1, #3CH ;给T1装入计数初值 MOV TL1, #0B0H SETB TR0 ;启动计数 (二)时间显示模块 物理连接 P0.0~P0.7接数码管的a~dp(片选码) P2.0~P2.5接数码管的1~6(段选码) 时间显示:采用六个数码管显示两位的小时,分钟,秒 (2) 流程图: 动态显示的核心在于依次选中一块数码管,并在此之前将相应数码管要显示的数字的段码送到端口,进行相应的延时后关闭数码管选通信号。不断执行上述过程就可以实现较为稳定的动态显示。 每次进入主程序都首先判断是否到了1s,到了则继续执行,否则,返回中断。 为了在显示完秒之后还能继续显示小时的十位,必须有一个用来计数的单元,用以区分当前显示的是小时还是分钟,还是秒,并以此作为仅次于显示次数N的循环。 对每一个单元(30H~32H)的两位BCD码的显示,用一位(21H).0来指示即将显示的是十位还是各位,据此控制刚才所说的单元指示数值是否用该加一或者重新初始化。 由此在DISPLAY子程序中有3重循环。调用入口参数为30H~32H单元的数值。 半秒提示:采用两个发光二极管,每隔半秒闪烁。 中断5次就是半秒,并在相应的分支里设置P3.6和P3.7,保证二者同时取反即可。 这可以放在显示子程序内部,保证时间显示和半秒闪烁的同步,同时可以节约计数器。 上下午指示:采用两个发光二极管来指示上下午。 只要判断30H单元的内容与11H相比较就可以知道是上午还是下午了,在分支语句里控制相应的灯亮了就行。如上所述,将它放置在显示子程序里较为方便。 时间显示模块的仿真结果 按键模块 ADJUST的主体部分就是检测是否有按键按下,如果没有只是调用显示子程序,而有的话转去执行相应的分支语句。 为了防止干扰,我们便写了一个延时5ms左右的子程序,若是经过延时后,按键信号依然有效,则认定是有效信号,否则为干扰,返回程序起始点重新检测。 K1可以控制实现定时,所以定时器计数器依然是0在起作用,在其分支语句里根据按键次数使指针指向不同的单元(小时、分钟),然后检测K2\K3的信号到来。 在K2\K3的分支语句里实现指针所指向单元的加一或者减一,但是注意要按照时间规则来,对加一或者减一结

文档评论(0)

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

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

1亿VIP精品文档

相关文档