基于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 时秒钟清零,分钟加。基于stc89s52单片机的实时时钟设计
相关推荐
预先设定的时间 程序,分别对各个房间照明设备的开、关进行控制,并可自动调节各个房间的照度。 (5)窗帘的控制,按照预先设定的时间程序,对窗帘的开启 /关闭进行控制。 第 2 章 总体设计 整体介绍 本次设计以 STC89C52 芯片为控制核心,温度,湿度等传感器为环境信息采集源,以 Web 控制为辅助,来制作一个物联网空调监控系统。 在原有的机械式按键开关的基础上,采用无线遥控器与 Web
①系统内核小,由于嵌入式系统一般应用于小型电子装置,系统资源相对有限,所以内核较之传统的操作系统要小得多。 比如, ENEA 公司的 OSE分布式系统,内核只有 5KB,而 Windows 的内核则要大得多。 ②专用性强,嵌入式系统的个性化很强,其中的软件系统和硬件结合非常紧密,一般要 针对硬件进行系统的移植,同时针对不同的任务,往往需要对系统进行较大的更改。 另外,程序的编译下载要和系统相结合
图 Hibernate轻型应用体系 在前面解决体系中,对于应用程序来说,所有的底层 JDBC/JTA API 都被抽象了,Hibernate 会替你照管好所有的细节。 本文中所用到的就是这种体系。 FGSJJLKSJGKLJG JLS JGKJ KJ SKJ KJSKLGJKSJLKSJKL KSGK JKLGJSLSK JSGKL JLSGJSLJ GJGKL JLSJ KL JGKL
址或间接 址 ,(data/idata)。 (2)高 128字节的内部 RAM(地址 :80HFFH) ,只能间接寻址 (普通 89C5有 ),(idata)。 (3)特殊功能寄存器 SFR(地址 :80HFFH) , 只能直接寻址 ,(data)。 特殊功能寄存器 SFR 和高 128 字节的内部 RAM 是通过寻址方式来区分的 ,传统的 8051 系 列单片机只有 128256 字节 RAM
4243VCC44U3STC89C52Y1VCC123GND4USB123456789RS112345678P412345678P312345678P612345678P51234567P7 22pFC922pFC8GND VCCGND10KR2 C1+1VDD2C13C2+4C25VEE6T2OUT7R2IN8R2OUT9T2IN10T1IN11R1OUT12R1IN13T1OUT14GND15
其他扩展 控制方向指示灯、 逻辑部分板内取电接口 红外避障模块 红外避障的原理:用红外线传感器进行避障。 红外线发射头与接收头于一体江苏理工学院毕业论文 (说明书 ) 第 8 页 共 56 页 的检测开关,其工作原理是根据发射头发出的光束,被物体反射,接收头据此做出判断是否有障碍物。 当有光线反射回来时,输出低电平。 当没有光线反射回来时,输出高电平。 单片机根据接收头电平的高低做出相应控制