辉光管时钟系列<三>时钟芯片DS12C887
为了实现时钟显示,我们需要运用到时钟芯片。比较常用的时钟芯片为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相关推荐
- 【单片机】辉光管时钟系列<四>温度芯片DS18B20显示
在辉光管时钟里,我们还加入了温度显示功能.这里,我们采用简单易用的温度芯片DS18B20来测量环境温度.DS18B20是常用的数字温度传感器,具有体积小,硬件开销低,抗干扰能力强,精度高的特点. 本文 ...
- 【单片机】辉光管时钟系列<一>--单片机最小系统
已经有两个多月没有写文章了,这两个多月都忙着毕业的事.在业务时间也重拾了大学期间的单片机知识,准备做个辉光管时钟.现在程序和电路都已经完成了,就等着PCB板回来了.下面我将以一系列的文章来介绍辉光管时 ...
- 【单片机】辉光管时钟系列<二>LCD液晶显示
在前一篇文章<辉光管时钟系列<一>单片机最小系统>中,我们是通过蜂鸣器或发光二极管来验证最小系统是否正常工作.很多时候,我们需要将系统的信息进行可视化展示,方面我们对系统进行测 ...
- 辉光管时钟学习制作及开源软硬件工程
文章目录 前言 开源地址 辉光管项目介绍 辉光管的工作条件 硬件部分 部分介绍 充电电路 驱动电路 不足之处 软件部分 总结 前言 作为一个电子人,一直想做一个辉光管时钟,算是大学的一个心愿,终于在快 ...
- 拟辉光管时钟“重生”记(源码)
再次升级:增加农历和天气预报 海鲜市场入手拟辉光管时钟,就是这货: 效果还是蛮炫的. 用了一年多,突然抽风,具体表现为自动切换为日期和星期显示,需要按键才能切回来,过一会儿又变成日期/星期. 原来是运 ...
- 基于微型计算机系统的实时时钟设计,基于单片机的DS12C887时钟芯片应用研究
摘 要: 新型时钟芯片DS12C887具有计时精确.断电情况下运行十年以上不丢失资料等优点,在单片机计时系统中有着广泛应用.本文分析了DS12C887的功能特性,介绍了DS12C887与AT89C51 ...
- 【开源】纯手工低成本打造拟辉光管时钟,也可以很酷炫
不想错过我的推送,记得右上角-查看公众号-设为星标,摘下星星送给我 <命运石之门>里 "世界线变动率探测仪",各种辉光管的作品,让热爱DIY的小伙伴欢喜,但是辉光管的价 ...
- ESP32制作一个拟辉光管时钟
拟辉光管时钟 60 多年过去了,尽管辉光管已经停产,有很多工程师仍然对它情有独钟.我用 8 块液晶显示屏制作了一个拟辉光管时钟,感受复古元素的美感,表达对过去经典的敬意. 项目起源 看过<命运石 ...
- 辉光管电子时钟DIY记录-静态扫描驱动方式
辉光管电子时钟DIY记录-静态扫描驱动方式 对于辉光管不了解的请看我的另外一篇文章,http://blog.csdn.net/qq_27558597/article/details/77581479. ...
- ds12c887c语言程序,时钟芯片ds12c887的C51驱动程序
文件名称:ds12c887.c 适用范围:时钟芯片ds12c887的驱动程序 ************************************************************* ...
最新文章
- python 基础
- 他们翻遍用AI检测新冠的论文,一篇临床可用的也没有?!
- 关于ANDRID sdk安装过慢问题
- Git回滚代码到某个commit
- Mybatis实体类属性名与数据库类名不对应的两种解决方法
- 前端学习(2532):vuex mutation
- php极光推送教程,laravel框架使用极光推送消息操作示例
- Impala-shell 查询异常 - ERROR: AnalysisException: Failed to evaluate expr: 1
- Android-apk文件反编译
- 决策者根据什么曲线做出决策_如何在开放社区中做出品牌决策
- 验证采集[Python]代理抓取并验证-多线程
- Android学习笔记之ListView与Item的焦点冲突处理
- 2021年中国一次性卫生设备市场趋势报告、技术动态创新及2027年市场预测
- MPEG-7实例入门
- Wifi 破解原理及教程
- “变态”的JavaScript——JavaScript的发明人--布兰登·艾奇(Brendan Eich)
- linux制作xp u盘启动盘,ultraiso制作u盘启动盘linuxu大侠u盘装xp
- 嗯,我是一个偏执狂。
- 搜救犬都负责什么工作
- Linux驱动:网卡驱动分析之三--MAC驱动及PHY驱动框架了解
热门文章
- 疫情下,裁员补偿标准不可不知
- i.MX6ULL 开发板在Ubuntu系统下实现串口通信
- html去除背景颜色怎么设置,文档底色怎么去掉【解决思路】
- pe下修复linux磁盘分区,找回丢失的Linux分区及Grub修复过程
- 写给程序员的UI设计书 (转) (三)
- 数字逻辑课程设计--数字钟的设计(quartus ii)(内附源代码和实习报告以及6篇实习日志)
- 刽子手c语言,古代神秘职业:刽子手的祖师爷
- 大数据笔记--Hadoop(第五篇)
- 计算机蓝屏代码0x000000ED,XP系统蓝屏提示错误代码0x000000ED怎么办?
- IIS建立FTP站点