其它考试]基于stc89s52单片机的实时时钟设计内容摘要:

5,根据 INTEL 总线读时序时序图读数据程序: uchar read_12C887(uchar add)//在指定的地址读出数 据 { uchar read_data。 DS=1。 RW=1。 AS=1。 CS=0。 P0=add。 AS=0。 DS=0。 P0=0XFF。 read_data=P0。 DS=1。 AS=1。 CS=1。 return(read_data)。 } 19 时间调整,闹钟调整,年、月、日调整 切换 子程序设计 当按下按钮 SW1 时 ,中间标志位 i 会自动进行加操作。 当 i 等于 1 时,时间调整标志位置 1,进入时间调整状态。 当 i 等于 2 时,闹钟调整标志位置 1,进入闹钟调整状态。 当 i等于 3 时,年、月、日调整标志位置 1,进入年、月、日调整状态。 1, 时间调整,闹钟调整,年、月、日调整却换子程序 如下 : void gongneng_quehuan() //功能却换子程序 { if(SW1==0) { delay(5)。 if(SW1==0) { while(SW1==0)。 display(read_12C887(seconds),read_12C887(minutes),read_12C887(hours))。 i++。 if(i==1) { flag_set_time=1。 //将时间 调整 标志位置 1 } else if(i==2) { flag_set_time=0。 flag_set_alarm=1。 //将闹钟调整标志位置 1 } else if(i==3) { i=0。 flag_set_century=1。 //将年、月、日调整标志位置 1 } } } } 20 时间调整子程序设 计 由于本 人想向单片机更高层次编程,本 设计只用三个按钮 根据不同的组合状态进行时间,闹钟,年,月,日的调整。 所以程序相对来说是比较复杂的。 具体时间调整过程是这样的, 首先进行小时调整 ,然后进行分钟调整,最后进行秒钟调整。 在小时调整过程中,如果 SW2 按钮每按下一次时将对小时 当前值 加 1 次,当加到 24 时小时清零;如果 SW3 按钮每被按下一次时将对小时当前值减 1 次,当减到 0 后再按一次 SW3 时 小时 赋值到 23。 小时调整完毕后 将所调整好的小时值写入小时寄存器中 ,然后又将写入 到 小时寄存器的数值从 DS12CR887 中读取出来 并 在显示屏上 显示出来。 在分钟调整 过程中, 如果 SW2 按钮每按下一次时将对分钟当前值加 1 次,当加到 60 时分钟清零,小时加 1;如果 SW3 按钮每被按下一次时将对分钟当前值减 1 次,当减到 0 后再按一次 SW3 时分钟赋值到 59。 分钟调整完毕后将所调整好的分钟值写入分钟寄存器中,然后又将写入 到 分钟寄存器的数值从 DS12CR887 中读取出来并在显示屏上显示出来。 在 秒 钟调整过程中,如果 SW2 按钮每按下一次时将对 秒 钟当前值加 1 次,当加到 60 时 秒 钟清零,分钟 加 1;如果 SW3 按钮每被按下一次时将对 秒 钟当前值减 1 次,当减到 0 后再按一次 SW3 时 秒 钟赋值到 59。 秒 钟调整完毕后将所调整好的 秒 钟值写入 秒 钟寄存器中,然后又将写入 到秒 钟寄存器的数值从 DS12CR887 中读取出来并在显示屏上显示出来。 当小时、分钟、秒钟都调整完毕后按下确认键( SW1 和 SW2都被按下时)时间调整完成,并将当前所调整出来的 数值在显示屏上面显示出来,进入时间显示状态。 1, 时间调整子程序如下: void shijian_tiaozheng() { char hours_timeset,timeset=0。 if(flag_set_time==1) { write_12C887(REGISTER_B,0XA6)。 flag_set_time=0。 if(timeset==0) { hours_timeset=read_12C887(hours)。 //读取当前小时的值 SW2=1。 SW1=1。 while(((SW2==0)amp。 amp。 (SW1==0))!=1) { if(SW2==0) { delay(5)。 if(SW2==0) { while(SW2==0) display(read_12C887(seconds),read_12C887(minutes),read_12C887(hours))。 hours_timeset++。 //小时值加 1 21 if(hours_timeset=24) hours_timeset=0。 write_12C887(hours,hours_timeset)。 //将调整后的小时的值写入小时寄存器 // LED2=1。 } } if(SW3==0) { delay(5)。 if(SW3==0) { while(SW3==0) display(read_12C887(seconds),read_12C887(minutes),read_12C887(hours))。 hours_timeset。 //小时值减 1 if(hours_timeset0) hours_timeset=23。 write_12C887(hours,hours_timeset)。 //将调整后的小时的值写入小时寄存器 } } display(read_12C887(seconds),read_12C887(minutes),read_12C887(hours))。 } timeset=1。 } SW1=1。 SW2=1。 while((SW2amp。 amp。 SW1)==0) display(read_12C887(seconds),read_12C887(minutes),read_12C887(hours))。 if(timeset==1) { hours_timeset=read_12C887(minutes)。 SW2=1。 SW1=1。 while(((SW2==0)amp。 amp。 (SW1==0))!=1) { if(SW2==0) { delay(5)。 if(SW2==0) { while(SW2==0) display(read_12C887(seconds),read_12C887(minutes),read_12C887(hours))。 hours_timeset++。 if(hours_timeset=60) hours_timeset=0。 write_12C887(minutes,hours_timeset)。 } } if(SW3==0) { delay(5)。 if(SW3==0) { 22 while(SW3==0) display(read_12C887(seconds),read_12C887(minutes),read_12C887(hours))。 hours_timeset。 if(hours_timeset0) hours_timeset=59。 write_12C887(minutes,hours_timeset)。 } } display(read_12C887(seconds),read_12C887(minutes),read_12C887(hours))。 } timeset=2。 } SW1=1。 SW2=1。 while((SW2amp。 amp。 SW1)==0) display(read_12C887(seconds),read_12C887(minutes),read_12C887(hours))。 if(timeset==2) { hours_timeset=read_12C887(seconds)。 SW2=1。 SW1=1。 while(((SW2==0)amp。 amp。 (SW1==0))!=1) { if(SW2==0) { delay(5)。 if(SW2==0) { while(SW2==0) display(read_12C887(seconds),read_12C887(minutes),read_12C887(hours))。 hours_timeset++。 if(hours_timeset=60) hours_timeset=0。 write_12C887(seconds,hours_timeset)。 } } if(SW3==0) { delay(5)。 if(SW3==0) { while(SW3==0) display(read_12C887(seconds),read_12C887(minutes),read_12C887(hours))。 hours_timeset。 if(hours_timeset0) hours_timeset=59。 write_12C887(seconds,hours_timeset)。 } } display(read_12C887(seconds),read_12C887(minutes),read_12C887(hours))。 } timeset=0。 23 while((SW2amp。 amp。 SW1)==0) display(read_12C887(seconds),read_12C887(minutes),read_12C887(hours))。 write_12C887(REGISTER_B,0X26)。 } } } 24 闹钟定时调整子程序设计 在正常的走时状态下,连续两次按下 SW1 按钮,将进入闹钟调整状态。 首先进行小时调整,然后进行分钟调整,最后进行秒钟调整。 在小时调整过程中,如果 SW2 按钮每按下一次时将对小时当前值加 1 次,当加到 24 时小时清零;如果 SW3 按钮每被按下一次时将对小时当前值减 1 次,当减到 0 后再按一次 SW3时小时赋值到 23。 小时调整完毕后将所调整好的小时值写入小时寄存器中,然后又将写入到小时寄存器的数值从 DS12CR887 中读取出来并在显示屏上显示出来。 在分钟调整过程中,如果 SW2 按钮每按下一次时将对分钟当前值 加 1 次,当加到 60 时分钟清零,小时加 1;如果 SW3 按钮每被按下一次时将对分钟当前值减 1 次,当减到 0 后再按一次 SW3 时分钟赋值到 59。 分钟调整完毕后将所调整好的分钟值写入分钟寄存器中,然后又将写入到分钟寄存器的数值从DS12CR887 中读取出来并在显示屏上显示出来。 在秒钟调整过程中,如果 SW2按钮每按下一次时将对秒钟当前值加 1 次,当加到 60 时秒钟清零,分钟加。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。