• PUDN用户
    了解作者
  • Others
    开发工具
  • 1KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 79
    下载次数
  • 2006-04-12 18:09
    上传日期
DS12C887的C程序,自己用过,好用的,献给大家
12c88.rar
  • www.pudn.com.txt
    218B
  • DS12c887.c
    2.8KB
内容介绍
/*本程序旨在读出DS12C887的时间,显示部分只做了分和秒的部分*/ /*创建时间2006。1。29*/ # include < absacc.h > # include < reg51.h > # define uchar unsigned char # define MCA XBYTE [ 0xbf0a ] /*寄存器A*/ # define MCB XBYTE [ 0xbf0b ] /* 寄存器B*/ # define MCC XBYTE [ 0xbf0c ] /* 寄存器C*/ # define MCD XBYTE [ 0xbf0d ] /*寄存器D */ # define HOURW XBYTE [ 0xbf05 ] /*时报警*/ # define SECONDW XBYTE [ 0xbf01 ] /*秒报警*/ # define YEAR XBYTE [ 0xbf09 ] # define MONTH XBYTE [ 0xbf08 ] # define DAY XBYTE [ 0xbf07 ] # define HOUR XBYTE [ 0xbf04 ] # define MU XBYTE [ 0xbf02 ] # define SECOND XBYTE [ 0xbf00 ] sbit uip_bit = ACC^7; /* 保存更新周期标志位*/ uchar dt[6] = { 0x06,0x01,0x01,0x00,0x00,0x00 }; /* 时标缓冲区及初值 ,设置时间,用于时间校准?*/ sbit bita=P2^0; sbit bitb=P2^1; sbit bitc=P2^2; sbit bitd=P2^3; code uchar dispcode[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d, 0x7d,0x07,0x7f,0x6f}; uchar dispbit[4]={0,0,0,0};/*显示位*/ /*显示函数*/ void disp() { uchar k; bita=1;bitb=bitc=bitd=0; P0=dispcode[dispbit[0]]; for(k=0;k<150;k++); bita=bitc=bitd=0;bitb=1; P0=dispcode[dispbit[1]]; for(k=0;k<150;k++); bita=bitb=bitd=0;bitc=1; P0=dispcode[dispbit[2]]; for(k=0;k<150;k++); bita=bitb=bitc=0;bitd=1; P0=dispcode[dispbit[3]]; for(k=0;k<150;k++); } /* 初始化工作状态函数*/ void initstat ( void ) { MCA = 0x2f; /*选时钟32.768KHz,中断周期500ms*/ ACC = MCC; /* 清中断请求标志 */ ACC = MCD; /* VRT = 1,数据有效 */ /* 中断允许,时标十进制,24小时制,芯片开始工作*/ MCB = 0x72; /* HOURW = 0x17;*/ /*每小时报警中断*/ SECONDW=0X3b; /*每秒报警中断 , 可以选用,用于显示秒点的闪动*/ EA = 1; EX0 = 1; /* 开外部中断0*/ } /* 写时标函数 */ void wMC ( void ) { MCB = 0x80; /* 置SET位为1,芯片停止工作 */ YEAR=dt[0]; MONTH=dt[1]; DAY=dt[2]; HOUR=dt[3]; MU=dt[4]; SECOND=dt[5]; } /* 读时标函数 */ void rMC ( void ) { do { ACC = MCA; } /* 读取UIP位 */ while ( uip_bit ); /* 等待周期更新结束 */ dt[0]=YEAR; dt[1]=MONTH; dt[2]=DAY; dt[3]=HOUR; dt[4]=MU; dt[5]=SECOND; /* 读时标值到缓冲区 */ } void main ( void ) { SP=0x60; wMC ( ); /* 调用写时标函数 */ initstat ( ); /* 调用初始化工作状态函数*/ while (1) { rMC(); dispbit[0]=dt[3]/16; dispbit[1]=dt[3]%16; dispbit[2]=dt[4]/16; dispbit[3]=dt[4]%16; disp(); } } /* 外部中断0服务函数*/ void time ( void ) interrupt 0 using 1 { ACC = MCC; /* 读取寄存器C*/ if ( ACC^4 ) rMC ( ); /* 周期更新结束,读取时标值*/ if ( ACC^5 ) rMC( ); /* 秒报警*/ SECONDW=0x3b; /* HOURW = 0x17; */ /* 每小时报警中断 */ }
评论
    相关推荐
    • ds12c887.rar
      DS12c887电子时钟,1602液晶屏显示,
    • ds12c887.rar
      6位数码管显示时,分,秒 键盘可调时间ds12c887学习程序
    • ds12c887时钟.rar
      51单片机驱动DS12C887时钟芯片制作的LCD时钟,有温湿度,农历显示
    • ds12c887.zip
      实时时钟ds12c887驱动程序,atmega128平台测试通过
    • DS12c887.zip
      C51程序运用stc12c5a系列的单片机即可驱动,DS12c887时钟芯片的正常工作,利用共阴数码管显示。已测试完成。
    • RTC_DS12C887.zip
      使用keil编程,用51单片机和DS12C887芯片实现实时时钟
    • ds12c887.rar
      ds12c887 interfacing with 8051.the code just initialises ,reads and displays it in the serial port.
    • ds12c887.rar
      ds12c887 interfacing with 8051.the code just initialises ,reads and displays it in the serial port.
    • DS12c887P1602.zip
      DS12C887电子钟单片机,1602液晶屏显示源程序
    • RTC_DS12C887.zip
      ds12c88实时时钟程序,通过在程序上进一步修改,更够使用。