基于单片机的简易数字电子钟显示年月日时分秒的软件

时间: 2024-01-10 16:03:27 浏览: 35
以下是基于单片机的简易数字电子钟显示年月日时分秒的软件: ```c #include <reg52.h> /* 定义数码管段选IO口 */ sbit A = P2^0; sbit B = P2^1; sbit C = P2^2; sbit D = P2^3; sbit E = P2^4; sbit F = P2^5; sbit G = P2^6; sbit DP = P2^7; /* 定义数码管位选IO口 */ sbit DIG1 = P3^0; sbit DIG2 = P3^1; sbit DIG3 = P3^2; sbit DIG4 = P3^3; /* 定义全局变量 */ unsigned char second, minute, hour, day, month, year; /* 定义函数 */ void DisplayTime(); void Display(unsigned char num, unsigned char dig); /* 定时器0中断服务函数 */ void Timer0() interrupt 1 { static unsigned char cnt = 0; cnt++; if(cnt >= 20) //20个定时器周期后更新一次时间 { cnt = 0; /* 读取DS1302时钟芯片中的时间和日期 */ second = DS1302_Read(0x81); minute = DS1302_Read(0x83); hour = DS1302_Read(0x85); day = DS1302_Read(0x87); month = DS1302_Read(0x89); year = DS1302_Read(0x8d); /* 显示时间和日期 */ DisplayTime(); } } /* 主函数 */ void main() { /* 初始化 */ DS1302_Init(); Timer0_Init(); EA = 1; while(1); } /* 显示时间和日期 */ void DisplayTime() { /* 显示秒 */ Display(second % 10, 1); Display(second / 10, 2); DP = 1; //显示秒的小数点 DelayMs(5); /* 显示分 */ Display(minute % 10, 3); Display(minute / 10, 4); DP = 0; //不显示分的小数点 DelayMs(5); /* 显示时 */ Display(hour % 10, 1); Display(hour / 10, 2); DP = 0; //不显示时的小数点 DelayMs(5); /* 显示年 */ Display(year % 10, 3); Display(year / 10, 4); DP = 0; //不显示年的小数点 DelayMs(5); /* 显示月 */ Display(month % 10, 1); Display(month / 10, 2); DP = 1; //显示月的小数点 DelayMs(5); /* 显示日 */ Display(day % 10, 3); Display(day / 10, 4); DP = 0; //不显示日的小数点 DelayMs(5); } /* 显示一个数字 */ void Display(unsigned char num, unsigned char dig) { /* 关闭所有数码管 */ DIG1 = DIG2 = DIG3 = DIG4 = 1; /* 按位显示数字 */ switch(num) { case 0: A = B = C = D = E = F = 1; G = 0; break; case 1: B = C = 1; A = D = E = F = G = 0; break; case 2: A = B = G = E = D = 1; C = F = 0; break; case 3: A = B = C = D = G = 1; E = F = 0; break; case 4: B = C = F = G = 1; A = D = E = 0; break; case 5: A = C = D = F = G = 1; B = E = 0; break; case 6: A = C = D = E = F = G = 1; B = 0; break; case 7: A = B = C = 1; D = E = F = G = 0; break; case 8: A = B = C = D = E = F = G = 1; break; case 9: A = B = C = D = F = G = 1; E = 0; break; } /* 选中需要显示的数码管 */ switch(dig) { case 1: DIG1 = 0; break; case 2: DIG2 = 0; break; case 3: DIG3 = 0; break; case 4: DIG4 = 0; break; } } /* 延时函数 */ void DelayMs(unsigned int ms) { unsigned int i, j; for(i = 0; i < ms; i++) for(j = 0; j < 1000; j++); } ``` 在主函数中,我们初始化DS1302时钟芯片和定时器0,并开启中断。在定时器0的中断服务函数中,我们每隔20个定时器周期读取一次DS1302时钟芯片中的时间和日期,并通过数码管显示出来。其中,显示时间和日期的函数使用了Display函数,该函数可以按位显示一个数字。另外,为了让显示效果更加美观,我们还实现了一个DelayMs函数,用于延时一段时间。 通过以上软件实现,我们可以实现一个简易数字电子钟,能够显示年月日时分秒。

相关推荐

最新推荐

recommend-type

基于FPGA的数字时钟数码管显示

这是两年前开始学习FPGA的时候做的实验,已经好久没有接触FPGA了,板卡也积灰不少了,是时候安排时间重新拾起曾经美好的回忆了。下面是曾经的实验笔记。
recommend-type

单片机电子钟程序完美版(带闹钟温度功能)

本电子钟已经全部测试OK,带闹钟功能,年月日时分秒星期温度,四个按键可设置闹钟调节时间,温度可以显示正125度到负的55度之间,时间走时的话,我测试了一个月,误差不到1分钟。本人已经录制成视频,视频里面有详细...
recommend-type

基于AVR单片机Mega16的电子时钟设计

这里以Mage16单片机为核心,辅以必要的电路,采用高级C语言编程,没汁了一个简易的电子时钟,由4.5 V直流电源供电,通过LCD液晶能够准确显示时间。
recommend-type

51单片机DIY制作实例:旋转LED数字显示电子钟(含C语言源程序)

该文是一篇基于51单片机的DIY制作详述,作者此时是51单片机初学者,这个制作也可以作为不少单片机学习者的练手实验,如进行多样衍生会得到不错的设计。
recommend-type

基于单片机的数字电子钟制作的开题报告

毕业设计的开题报告 1.选题目的和意义 2.主要研究内容(含论文提纲) 3.完成论文的条件 4.论文的进程安排 5.指导教师意见及建议
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

HSV转为RGB的计算公式

HSV (Hue, Saturation, Value) 和 RGB (Red, Green, Blue) 是两种表示颜色的方式。下面是将 HSV 转换为 RGB 的计算公式: 1. 将 HSV 中的 S 和 V 值除以 100,得到范围在 0~1 之间的值。 2. 计算色相 H 在 RGB 中的值。如果 H 的范围在 0~60 或者 300~360 之间,则 R = V,G = (H/60)×V,B = 0。如果 H 的范围在 60~120 之间,则 R = ((120-H)/60)×V,G = V,B = 0。如果 H 的范围在 120~180 之间,则 R = 0,G = V,B =
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。