【嵌入式工程师成长日记】

https://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==&mid=2247484111&idx=1&sn=ce820ea78cf5ff4f00ebb282abc72143&chksm=cf430797f8348e8124936c1bb1b0755f985bc866325824fb2c55c6bc3632a0fecee3b2b1ac6e&token=1795208773&lang=zh_CN#rdhttps://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==&mid=2247484111&idx=1&sn=ce820ea78cf5ff4f00ebb282abc72143&chksm=cf430797f8348e8124936c1bb1b0755f985bc866325824fb2c55c6bc3632a0fecee3b2b1ac6e&token=1795208773&lang=zh_CN#rd

具体功能实现:

开机后可以在LCD1602上显示当前的年、月、日、星期、时、分、秒等信息,按下K1键,可以显示实时时钟;按下K2键,选择对年、月、日、时、分、秒的设置;按下K3键,进行加设置;按下K4键,进行减设置;

使用器件:

仿真原理图:

仿真

知识介绍 :

DS1302实时时钟芯片

DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,并且具有闰年补偿等多种功能。工作电压为2.0V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。

DS1302时序图

三个引脚:

CE(使能端)、SCLK(时钟)和I/O(数据)

BCD和十进制间的转换

DS1302_SetTime()和DS1302_ReadTime()作为DS1302库文件中的函数需要对码制进行转换。

转化公式如下:

十进制转化为BCD:

DS1302_Time[0]/10*16+DS1302_Time[0]%10

BCD转化为十进制:

DS1302_Time[0]/16*10+DS1302_Time[0]%16

RTC相关寄存器

要注意写保护!!!

数制大小

unsigned char:0-255

unsigned int:0-65535

char:-128-127

int:-2^31-2^31-1

主函数代码(C语言)KEIL5实现:

#include <REGX52.H>#include "LCD1602.h"#include "DS1302.h"#include "key.h"#include "timer0.h"unsigned char keynum,mode,TimeSetSelect,TimeFlashFlag;void TimeShow(){DS1302_ReadTime();LCD_ShowNum(1,1,DS1302_Time[0],2);LCD_ShowNum(1,4,DS1302_Time[1],2);LCD_ShowNum(1,7,DS1302_Time[2],2);LCD_ShowNum(2,1,DS1302_Time[3],2);LCD_ShowNum(2,4,DS1302_Time[4],2);LCD_ShowNum(2,7,DS1302_Time[5],2);}void TimeSet(){if(keynum==2){TimeSetSelect++;TimeSetSelect%=6;}if(keynum==3){DS1302_Time[TimeSetSelect]++;if(DS1302_Time[0]>99) {DS1302_Time[0]=0;}if(DS1302_Time[1]>12) {DS1302_Time[1]=1;}if(DS1302_Time[1]==1 || DS1302_Time[1]==3 || DS1302_Time[1]==5 || DS1302_Time[1]==7||DS1302_Time[1]==8 || DS1302_Time[1]==10 || DS1302_Time[1]==12){if(DS1302_Time[2]>31) {DS1302_Time[2]=1;}}else if(DS1302_Time[1]==4 || DS1302_Time[1]==6 || DS1302_Time[1]==9 || DS1302_Time[1]==11){if(DS1302_Time[2]>30) {DS1302_Time[2]=1;}}else if(DS1302_Time[1]==2){if(DS1302_Time[0]%4==0){if(DS1302_Time[2]>29){DS1302_Time[2]=1;}}else{if(DS1302_Time[2]>28){DS1302_Time[2]=1;}}}if(DS1302_Time[3]>23) {DS1302_Time[3]=0;}if(DS1302_Time[4]>59) {DS1302_Time[4]=0;}if(DS1302_Time[5]>59) {DS1302_Time[5]=0;}}if(keynum==4){DS1302_Time[TimeSetSelect]--;if(DS1302_Time[0]<0) {DS1302_Time[0]=99;}if(DS1302_Time[1]<1) {DS1302_Time[1]=12;}if(DS1302_Time[1]==1 || DS1302_Time[1]==3 || DS1302_Time[1]==5 || DS1302_Time[1]==7||DS1302_Time[1]==8 || DS1302_Time[1]==10 || DS1302_Time[1]==12){if(DS1302_Time[2]<1) {DS1302_Time[2]=31;}}else if(DS1302_Time[1]==4 || DS1302_Time[1]==6 || DS1302_Time[1]==9 || DS1302_Time[1]==11){if(DS1302_Time[2]<1) {DS1302_Time[2]=30;}}else if(DS1302_Time[1]==2){if(DS1302_Time[0]%4==0){if(DS1302_Time[2]<1){DS1302_Time[2]=29;}}else{if(DS1302_Time[2]<1){DS1302_Time[2]=28;}}}if(DS1302_Time[3]<0) {DS1302_Time[3]=23;}if(DS1302_Time[4]<0) {DS1302_Time[4]=59;}if(DS1302_Time[5]<0) {DS1302_Time[5]=59;}}if(TimeSetSelect==0 && TimeFlashFlag==1){LCD_ShowString(1,1,"  ");}else{LCD_ShowNum(1,1,DS1302_Time[0],2);}if(TimeSetSelect==1 && TimeFlashFlag==1){LCD_ShowString(1,4,"  ");}else{LCD_ShowNum(1,4,DS1302_Time[1],2);}if(TimeSetSelect==2 && TimeFlashFlag==1){LCD_ShowString(1,7,"  ");}else{LCD_ShowNum(1,7,DS1302_Time[2],2);}if(TimeSetSelect==3 && TimeFlashFlag==1){LCD_ShowString(2,1,"  ");}else{LCD_ShowNum(2,1,DS1302_Time[3],2);}if(TimeSetSelect==4 && TimeFlashFlag==1){LCD_ShowString(2,4,"  ");}else{LCD_ShowNum(2,4,DS1302_Time[4],2);}if(TimeSetSelect==5 && TimeFlashFlag==1){LCD_ShowString(2,7,"  ");}else{LCD_ShowNum(2,7,DS1302_Time[5],2);}LCD_ShowNum(2,10,TimeSetSelect,2);}void main(){LCD_Init();DS1302_Init();Timer0Init();LCD_ShowString(1,1,"  -  - ");LCD_ShowString(2,1,"  :  : ");DS1302_SetTime();while(1){keynum = key();if(keynum==1){if(mode==0){mode=1;}else if(mode){mode=0;}}switch(mode){case 0:TimeShow();break;case 1:TimeSet();break;}}}unsigned int T0Count;void Timer0_Routine() interrupt 1{TL0 = 0x18;TH0 = 0xFC;T0Count++;if(T0Count>=5000){T0Count=0;TimeFlashFlag=!TimeFlashFlag;}}

问题解答 :

Q:代码超出版本限制如何解决?如图:

A:用注册机对KEIL5软件进行重新破解

Q:延时函数如何快速自动生成?

A:在STC-ISP中根据红色方框进行设计

【嵌入式工程师成长日记】

基于51单片机用DS1302和LCD1602设计可调式电子日历与时钟(Proteus仿真)相关推荐

  1. 51、基于51单片机洗衣机控制系统(带水位)系统设计(程序+原理图+PCB源文件+Proteus仿真+参考论文+开题报告+任务书+流程图+元器件清单等)

    摘 要 随着数字技术的快速发展,数字技术被广泛应用于智能控制的领域中.单片机以体积小.功能全.价格低廉.开发方便的优势得到了许多电子系统设计者的青睐.它适合于实时控制,可构成工业控制器.智能仪表.智能 ...

  2. 基于51单片机智能大棚智能花盆浇水浇花灌溉补光散热原理图Proteus仿真

    功能: 0.本项目采用STC89C52作为单片机系统的控制MCU 1.LCD1602液晶实时显示当前光照/土壤湿度/温度信息,以及光照/土壤湿度/温度设定阈值 2.按键可调整光照/土壤湿度/温度设定阈 ...

  3. 基于51单片机的鸡舍智能环境控制有害气体检测无线WiFi通信proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.系统实时监测当前的有害气体状态和温湿度,并定时向WIFI串口发送监测信息 2.当温湿度超过阈值或有害气体浓度过高时,控制对应继电器,同时蜂鸣器 ...

  4. 基于51单片机、DS1302时钟模块的电子闹钟设计

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.设计原理 1.DS1302介绍 2.闹钟音乐播放原理 二.程序设计 1.DS1302.h 2.ds1302.c 3.mu ...

  5. 基于51单片机的自动浇花系统设计/基于51单片机的智能抽奖系统控制设计/基于51单片机的数字时钟与日历显示控制设计 毕业设计

    1147基于51单片机的自动浇花系统设计 设计思路:通湿度传感器实时监测湿度,通过LCD显示出实时的湿度采集值,可以通过按键设定目标界限,当达到这个界限值时,浇花系统的电机装置运行. 电路包含:LCD ...

  6. 基于51单片机的酒精浓度检测仪设计

    本设计仅供参考 基于51单片机的酒精浓度检测仪设计(proteus仿真+程序+原理图+报告) 原理图:Altium Designer 仿真:proteus 8.9 程序编译器:keil 4/keil ...

  7. 基于51单片机甲醛浓度检测系统仿真设计(仿真+程序+原理图+报告+讲解)

    文章目录 资料下载(可点击) 功能说明 仿真图 复位电路 晶振电路 程序 原理图: 设计报告: 器件清单: 基于51单片机甲醛浓度检测系统仿真设计(仿真+程序+原理图+报告+讲解) 原理图:Altiu ...

  8. 单片机检测电机频率c语言,基于51单片机的电动机测速表的设计.doc

    基于51单片机的电动机测速表的设计 基于51单片机的电动机测速表设计 摘 要 本文介绍了采用光电传感器实施电机转速测量的方法.基本原理,完成了一种基于AT89C51单片机平台的电动机测速表的软硬件设计 ...

  9. 单片机遥控车c语言程序,基于51单片机的无线遥控小车设计[附发射接收程序]

    /***************************************************************/ /*[基于51单片机的无线遥控小车设计] 作者王*茹 */ /*** ...

最新文章

  1. eyoucms range 范围判断标签
  2. java中file类_Java中file类
  3. 【CSS3】CSS中的定位
  4. 图像清晰度的评价及分析
  5. 台湾大学林轩田机器学习基石课程学习笔记1 -- The Learning Problem
  6. Nhibernate配置和访问数据问题
  7. 基于接缝裁剪的图像压缩 算法导论
  8. clientHeight、offsetHeight 和 scrollHeight
  9. P3803 【模板】多项式乘法(FFT)
  10. python中可选参数是什么意思_Python如何定义有可选参数的元类
  11. python 表单中值为空的还需要传入么_牛掰!100行Python,自动动手打造一款多国语言翻译软件...
  12. ubuntu 16.0安装ros-kinetic
  13. java socket 线程池_程序员:java使用线程池和TCP实现简单多轮聊天系统
  14. Verilog hdl 宏定义编译报错
  15. cmake 添加二进制文件_CMake构建系统
  16. Eclipse 一直提示 loading descriptor for 的解决方法
  17. 无广告输入法_完胜搜狗的输入法来了!智能无广告,不用下载就可以使用!
  18. STM32简介(系统结构、引脚定义……)
  19. 文件服务器 标签,别再「新建文件夹」了,这个标签管理器可以让你的硬盘更整洁...
  20. JavaEE项目 Web聊天室(JSP实现)

热门文章

  1. 前端如何防止DDOS攻击
  2. Nginx 配置静态资源防盗链
  3. Zemax学习笔记-Source Diode像散计算问题
  4. 站在云MSP风口 融资1.7亿的Bespin Global要干什么?
  5. 基于javaweb的宠物医院管理系统设计和实现(java+springboot+ssm+mysql+jsp)
  6. 【IPv6】邻节点不可到达检测学习(NUD)
  7. 软件测试报告模板(转)
  8. 【本科版】《漫漫邮子路(三)--我的校科协主席之路--孙放》
  9. 矩阵论:子空间的交与和
  10. HDU-1427-速算24点