基于51单片机和ds12c887时钟芯片的c语言程序内容摘要:

write_sfm(7,afen)。 write_sfm(10,amiao)。 } } } } void write_ds(uchar add,uchar date) {//写 12C887 函数 dscs=0。 dsas=1。 dsds=1。 dsrw=1。 P0=add。 //先写地址 dsas=0。 dsrw=0。 P0=date。 //再写数据 dsrw=1。 dsas=1。 dscs=1。 } uchar read_ds(uchar add) {//读 12C887 函数 uchar ds_date。 dsas=1。 dsds=1。 dsrw=1。 dscs=0。 P0=add。 //先写地址 dsas=0。 dsds=0。 P0=0xff。 ds_date=P0。 //再读数据 dsds=1。 dsas=1。 dscs=1。 return ds_date。 } /*首次操作 12C887 时给予寄存器初始化 void set_time() {//首次上电初始化时间函数 write_ds(0,0)。 write_ds(1,0)。 write_ds(2,0)。 write_ds(3,0)。 write_ds(4,0)。 write_ds(5,0)。 write_ds(6,0)。 write_ds(7,0)。 write_ds(8,0)。 write_ds(9,0)。 } */ void read_alarm() {//读取 12C887 闹钟值 amiao=read_ds(1)。 afen=read_ds(3)。 ashi=read_ds(5)。 } void main()//主函数 { init()。 //调用初始化函数 while(1) { keyscan()。 //按键扫描 if(flag_ri==1)//当闹钟中断时进入这里 { di()。 delay(100)。 di()。 delay(500)。 } if(flag==0amp。 amp。 flag1==0)//正常工作时进入这里 { keyscan()。 //按键扫描 year=read_ds(9)。 //读取 12C887 数据 month=read_ds(8)。 day=read_ds(7)。 week=read_ds(6)。 shi=read_ds(4)。 fen=read_ds(2)。 miao=read_ds(0)。 write_sfm(10,miao)。 //送液晶显示 write_sfm(7,fen)。 write_sfm(4,shi)。 write_week(week)。 write_nyr(3,year)。 write_nyr(6,month)。 write_nyr(9,day)。 } } } void exter() interrupt 2//外部中断 1服务程序 { uchar c。 //进入中断表 示闹钟时间到, flag_ri=1。 //设置标志位,用以大程序中报警提示 c=read_ds(0x0c)。 //读取 12C887 的 C寄存器表示响应了中断 } 代码 2: include include /**********************模式选择 *******************/ void keyscan1() { if(s4==0)。 { delay(5)。 if(s4==0) { s4num++。 while(!s4)。 switch(s4num) { case 1: flag1=~flag1。 if(flag1==1) //打铃时间间隔设置标志位(防止在设置时显示时间) { //把闹铃的寄存器作为打铃的寄存器使用 read_alarm()。 //先读取闹铃时间 miao=amiao。 //在把闹铃值赋给时间值用以调节 fen=afen。 shi=ashi。 write_(0x80+0x40)。 write_date(39。 R39。 )。 //显示标志 write_date(39。 i39。 )。 write_(0x80+0x40+3)。 display(0x40+4,ashi)。 //显示间隔时间 display(0x40+7,afen)。 display(0x40+10,amiao)。 } break。 /************************************/ case 2: flag1=~flag1。 if(flag1==0) //清除标志位 { flag=0。 write_(0x80+0x40)。 write_date(39。 39。 )。 //清除打铃时间间隔标志位 write_date(39。 39。 )。 write_(0xc0)。 write_ds(1,miao)。 //储存间隔时间 write_ds(3,fen)。 write_ds(5,shi)。 } /***********************/ flag_paobiao=~flag_paobiao。 miao_pb=0。 //先把跑表值都赋为 0 fen_pb=0。 tt=0。 while(!s2)。 if(flag_paobiao==1) { init_paobiao()。 } /************************************/ break。 case 3: flag_paobiao=~flag_paobiao。 if(flag_paobiao==0) { write_(0x80+0x40)。 write_date(39。 39。 )。 write_date(39。 39。 )。 } /******。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。