为了实现时钟显示,我们需要运用到时钟芯片。比较常用的时钟芯片为DS1302,在本文中我们采用更好的时钟芯片DS12C887。主要原因是DS1302需要案子后备电池和晶振,而DS12C887自带这两部分,在没有外部电源情况下可以工作10年。关于DS12C887的资料,可见链接:https://github.com/tengweitw/DS12C887

本文主要是通过STC89C52单片机与时钟芯片DS12C887通信,让LCD1602来显示时间,其电路原理图如下:

在图1中,关于单片机和1602液晶部分我们已经在前一篇文章中介绍过了。下面首先给出了时钟芯片DS12C887的实物图,如图2所示:

最后,我们可以根据DS12C887的datasheet来进行程序设计,简单的程序设计如下:

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned intsbit lcdrs=P2^5;
sbit lcden=P2^7;sbit dscs=P1^7;
sbit dsas=P1^6;
sbit dsrw=P1^5;
sbit dsds=P1^4;
uchar count,s1num;
char miao,shi,fen,day,date,month,year;uchar code week[]=" 2021-05-17 MON";
uchar code time[]="    00:00:00";
uchar code weeks[]="SUNMONTUEWEDTHUFRISAT";
void delay(uint z)
{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);
}//LCD Write command
void write_com(uchar com)
{lcdrs=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;
}//LCD Write data
void write_date(uchar date)
{lcdrs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;
}// LCD Initialization
void lcdInit()
{write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);
}//DS12C887 Write
void write_ds(uchar add, uchar date)
{dscs=0;dsas=1;dsds=1;dsrw=1;P0=add;dsas=0;dsrw=0;P0=date;dsrw=1;dsas=1;dscs=1;
}//DS12C887 Read
uchar read_ds(uchar add)
{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;
}//Write Time
void write_sfm(uchar add, uchar date)
{uchar shi, ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);
}//Write Calendar
void write_calendar(uchar add, uchar shu)
{uchar shi,ge;shi=shu/10;ge=shu%10;write_com(0x80+add);write_date(0x30+shi);write_date(0x30+ge);
}//Write week
void write_week(uchar date)
{write_com(0x80+12);write_date(weeks[3*date]);write_date(weeks[3*date+1]);write_date(weeks[3*date+2]);
}void set_time()//设置日期和时间
{//  write_ds(4,15);//时
//  write_ds(2,44);//分
//  write_ds(0,0);//秒write_ds(6,4);//星期write_ds(7,20);//日write_ds(8,5);//月write_ds(9,21);//年
}void init()
{uchar num;set_time();//只在第一次初始化时钟芯片时用lcden=0;
//  fen=59;
//  miao=53;
//  shi=23;write_ds(0x0B,0x26);read_ds(0x0c);write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num<15;num++){write_date(week[num]);delay(5);}write_com(0x80+0x40);for(num=0;num<12;num++){write_date(time[num]);delay(5);}miao=read_ds(0);fen=read_ds(2);shi=read_ds(4);day=read_ds(6);date=read_ds(7);month=read_ds(8);year=read_ds(9);write_sfm(10,miao);write_sfm(7,fen);write_sfm(4,shi);write_week(day);write_calendar(9,date);write_calendar(6,month);write_calendar(3,year);
}void main()
{init();while(1){miao=read_ds(0);fen=read_ds(2);shi=read_ds(4);write_sfm(10,miao);write_sfm(7,fen);write_sfm(4,shi);}
}

效果图如下:

辉光管时钟系列<三>时钟芯片DS12C887相关推荐

  1. 【单片机】辉光管时钟系列<四>温度芯片DS18B20显示

    在辉光管时钟里,我们还加入了温度显示功能.这里,我们采用简单易用的温度芯片DS18B20来测量环境温度.DS18B20是常用的数字温度传感器,具有体积小,硬件开销低,抗干扰能力强,精度高的特点. 本文 ...

  2. 【单片机】辉光管时钟系列<一>--单片机最小系统

    已经有两个多月没有写文章了,这两个多月都忙着毕业的事.在业务时间也重拾了大学期间的单片机知识,准备做个辉光管时钟.现在程序和电路都已经完成了,就等着PCB板回来了.下面我将以一系列的文章来介绍辉光管时 ...

  3. 【单片机】辉光管时钟系列<二>LCD液晶显示

    在前一篇文章<辉光管时钟系列<一>单片机最小系统>中,我们是通过蜂鸣器或发光二极管来验证最小系统是否正常工作.很多时候,我们需要将系统的信息进行可视化展示,方面我们对系统进行测 ...

  4. 辉光管时钟学习制作及开源软硬件工程

    文章目录 前言 开源地址 辉光管项目介绍 辉光管的工作条件 硬件部分 部分介绍 充电电路 驱动电路 不足之处 软件部分 总结 前言 作为一个电子人,一直想做一个辉光管时钟,算是大学的一个心愿,终于在快 ...

  5. 拟辉光管时钟“重生”记(源码)

    再次升级:增加农历和天气预报 海鲜市场入手拟辉光管时钟,就是这货: 效果还是蛮炫的. 用了一年多,突然抽风,具体表现为自动切换为日期和星期显示,需要按键才能切回来,过一会儿又变成日期/星期. 原来是运 ...

  6. 基于微型计算机系统的实时时钟设计,基于单片机的DS12C887时钟芯片应用研究

    摘 要: 新型时钟芯片DS12C887具有计时精确.断电情况下运行十年以上不丢失资料等优点,在单片机计时系统中有着广泛应用.本文分析了DS12C887的功能特性,介绍了DS12C887与AT89C51 ...

  7. 【开源】纯手工低成本打造拟辉光管时钟,也可以很酷炫

    不想错过我的推送,记得右上角-查看公众号-设为星标,摘下星星送给我 <命运石之门>里 "世界线变动率探测仪",各种辉光管的作品,让热爱DIY的小伙伴欢喜,但是辉光管的价 ...

  8. ESP32制作一个拟辉光管时钟

    拟辉光管时钟 60 多年过去了,尽管辉光管已经停产,有很多工程师仍然对它情有独钟.我用 8 块液晶显示屏制作了一个拟辉光管时钟,感受复古元素的美感,表达对过去经典的敬意. 项目起源 看过<命运石 ...

  9. 辉光管电子时钟DIY记录-静态扫描驱动方式

    辉光管电子时钟DIY记录-静态扫描驱动方式 对于辉光管不了解的请看我的另外一篇文章,http://blog.csdn.net/qq_27558597/article/details/77581479. ...

  10. ds12c887c语言程序,时钟芯片ds12c887的C51驱动程序

    文件名称:ds12c887.c 适用范围:时钟芯片ds12c887的驱动程序 ************************************************************* ...

最新文章

  1. python 基础
  2. 他们翻遍用AI检测新冠的论文,一篇临床可用的也没有?!
  3. 关于ANDRID sdk安装过慢问题
  4. Git回滚代码到某个commit
  5. Mybatis实体类属性名与数据库类名不对应的两种解决方法
  6. 前端学习(2532):vuex mutation
  7. php极光推送教程,laravel框架使用极光推送消息操作示例
  8. Impala-shell 查询异常 - ERROR: AnalysisException: Failed to evaluate expr: 1
  9. Android-apk文件反编译
  10. 决策者根据什么曲线做出决策_如何在开放社区中做出品牌决策
  11. 验证采集[Python]代理抓取并验证-多线程
  12. Android学习笔记之ListView与Item的焦点冲突处理
  13. 2021年中国一次性卫生设备市场趋势报告、技术动态创新及2027年市场预测
  14. MPEG-7实例入门
  15. Wifi 破解原理及教程
  16. “变态”的JavaScript——JavaScript的发明人--布兰登·艾奇(Brendan Eich)
  17. linux制作xp u盘启动盘,ultraiso制作u盘启动盘linuxu大侠u盘装xp
  18. 嗯,我是一个偏执狂。
  19. 搜救犬都负责什么工作
  20. Linux驱动:网卡驱动分析之三--MAC驱动及PHY驱动框架了解

热门文章

  1. 疫情下,裁员补偿标准不可不知
  2. i.MX6ULL 开发板在Ubuntu系统下实现串口通信
  3. html去除背景颜色怎么设置,文档底色怎么去掉【解决思路】
  4. pe下修复linux磁盘分区,找回丢失的Linux分区及Grub修复过程
  5. 写给程序员的UI设计书 (转) (三)
  6. 数字逻辑课程设计--数字钟的设计(quartus ii)(内附源代码和实习报告以及6篇实习日志)
  7. 刽子手c语言,古代神秘职业:刽子手的祖师爷
  8. 大数据笔记--Hadoop(第五篇)
  9. 计算机蓝屏代码0x000000ED,XP系统蓝屏提示错误代码0x000000ED怎么办?
  10. IIS建立FTP站点