DS12c887.zip

  • gray_pigeon
    了解作者
  • C51
    开发工具
  • 43KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 1
    下载次数
  • 2016-09-03 12:02
    上传日期
C51程序运用stc12c5a系列的单片机即可驱动,DS12c887时钟芯片的正常工作,利用共阴数码管显示。已测试完成。
DS12c887.zip
  • DS12c887时钟芯片
  • STARTUP.OBJ
    749B
  • STARTUP.A51
    6.2KB
  • main.OBJ
    7.1KB
  • DS12C887
    6.9KB
  • DS12C887.plg
    774B
  • DS12C887.M51
    10KB
  • main.c
    4.6KB
  • STARTUP.LST
    13.7KB
  • main.LST
    9.4KB
  • DS12C887.hex
    1.5KB
  • DS12C887.uvopt
    137.8KB
  • DS12C887_uvopt.bak
    137.8KB
  • DS12C887.lnp
    60B
  • DS12C887.uvproj
    13.1KB
  • DS12C887_uvproj.bak
    0B
内容介绍
#include <STC12C5A60S2.H> #define uint unsigned int #define uchar unsigned char //--IO口定义--// #define GPIO_DIG P0 sbit LSA=P1^7; //138译码器ABC选位 sbit LSB=P1^6; sbit LSC=P1^5; sbit dscs=P3^4; //时钟芯片时钟线 sbit dsas=P3^5; sbit dsrw=P3^6; sbit dsds=P3^7; sbit dsirq=P3^3; //--定义全局变量--// uchar code DIG_CODE[17]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码 uchar TIME[6] = {0, 0, 0, 0, 0, 0};//存储顺序是秒分时日月年,存储格式是用BCD码 uchar code READ_RTC_ADDR[6] = {0x00, 0x02, 0x04, 0x07, 0x08, 0x09}; //---DS12C887写入和读取秒分时日月年的地址命令---// uchar DisplayData[8];//用来存放要显示的8位数的值 //--声明函数--// void DigDisplay(); void write_ds(uchar add,uchar date); uchar read_ds(uchar add); void set_time(); void Init_ds12c887(); void Ds12c887ReadTime(); void main() { Init_ds12c887(); while(1) { Ds12c887ReadTime(); DisplayData[0] = DIG_CODE[TIME[0]/16]; //秒 DisplayData[1] = DIG_CODE[TIME[0]&0x0f]; DisplayData[2] = 0x40; DisplayData[3] = DIG_CODE[TIME[1]/16]; //分 DisplayData[4] = DIG_CODE[TIME[1]&0x0f]; DisplayData[5] = 0x40; DisplayData[6] = DIG_CODE[TIME[2]/16]; //时 DisplayData[7] = DIG_CODE[TIME[2]&0x0f]; DigDisplay(); } } /******************************************************************************* * 函 数 名 : DigDisplay * 函数功能 : 使用数码管显示 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void DigDisplay() { unsigned char i; unsigned int j; for(i=0;i<8;i++) { switch(i) //位选,选择点亮的数码管, { case(0): LSA=0;LSB=0;LSC=0; break;//显示第0位 case(1): LSA=1;LSB=0;LSC=0; break;//显示第1位 case(2): LSA=0;LSB=1;LSC=0; break;//显示第2位 case(3): LSA=1;LSB=1;LSC=0; break;//显示第3位 case(4): LSA=0;LSB=0;LSC=1; break;//显示第4位 case(5): LSA=1;LSB=0;LSC=1; break;//显示第5位 case(6): LSA=0;LSB=1;LSC=1; break;//显示第6位 case(7): LSA=1;LSB=1;LSC=1; break;//显示第7位 } GPIO_DIG=DisplayData[i];//发送段码 j=600; //扫描间隔时间设定 while(j--); GPIO_DIG=0x00;//消隐 } } /******************************************************************************* * 函 数 名 : write_ds * 函数功能 : 写ds12c887 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void write_ds(uchar add,uchar date) { dscs=0; dsas=1; dsds=1; dsrw=1; P2=add; //先写地址 dsas=0; dsrw=0; P2=date; //再写数据 dsrw=1; dsas=1; dscs=1; } /******************************************************************************* * 函 数 名 : read_ds * 函数功能 : 读ds12c887 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ uchar read_ds(uchar add) { uchar ds_date; dsas=1; dsds=1; dsrw=1; dscs=0; P2=add; //先写地址 dsas=0; dsds=0; P2=0xff; ds_date=P2; //再读数据 dsds=1; dsas=1; dscs=1; return ds_date; } /******************************************************************************* * 函 数 名 : set_time * 函数功能 : 初始化时间,首次烧录即可,之后可注释后再次烧录 初始时间06年5月4日3周2时1分0秒 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void set_time() { write_ds(0,0); //秒 write_ds(1,0); //秒闹钟 write_ds(2,1); //分 write_ds(3,0); //分闹钟 write_ds(4,2); //时 write_ds(5,0); //时闹钟 write_ds(6,3); //周 write_ds(7,4); //日 write_ds(8,5); //月 write_ds(9,6); //年 } /******************************************************************************* * 函 数 名 : Init_ds12c887 * 函数功能 : 初始化时钟芯片,首次烧录即可,之后可注释后再次烧录 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void Init_ds12c887() { write_ds(0x0a,0x20); write_ds(0x0b,0x22); //set_time(); //首次烧录即可,之后可注释后再次烧录 } /******************************************************************************* * 函 数 名 : Ds1302ReadTime * 函数功能 : 读取时钟信息 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void Ds12c887ReadTime() { uchar n; for (n=0; n<6; n++)//读取6个字节的时钟信号:秒分时日月年 { TIME[n] = read_ds(READ_RTC_ADDR[n]); } }
评论
    相关推荐
    • DS12C887.rar
      该程序基于STC89C52的DS12C887时钟程序,测试通过,且能稳定运行,请放心使用。
    • DS12C887.rar
      ds12cr887源程序,亲测可用。可以实现精确计时,闹钟定时等功能。
    • ds12c887时钟.rar
      51单片机驱动DS12C887时钟芯片制作的LCD时钟,有温湿度,农历显示
    • ds12c887.zip
      实时时钟ds12c887驱动程序,atmega128平台测试通过
    • RTC_DS12C887.zip
      使用keil编程,用51单片机和DS12C887芯片实现实时时钟
    • DS12C887.zip
      DS12C887是一款时钟芯片,精度高,误差小。驱动简单。
    • DS12C887程序
      DS12C887程序.可以助你一臂之力。C语言更能懂
    • 仿真 ds12c887时钟芯片
      ds12c887时钟芯片仿真 ,c语言写的,参照郭天详
    • DS12C887时钟51程序
      压缩包包括调好的DS12C887时钟51单片机的C语言程序,以及需要的参考资料。
    • Proteus7.12.rar
      Proteus7.12完美破解版.rar电路仿真软件很好用可以仿真单片数字模拟电路