历史上的今天
今天是:2024年09月17日(星期二)
2021年09月17日 | 22-基于51单片机的数字时钟(万年历)
2021-09-17 来源:eefocus
具体实现功能
系统由STC89C52单片机+DS1302时钟芯片+按键模块+LCD1602显示+电源构成。
具体功能:
1、可以显示年、月、日、时、分、秒、星期、农历;
2、按键可以设置闹钟及报警;
3、按键可以调整时间,显示是平年还是闰年。
共4个按键:设置、加、减、切换。

设计背景
在现实我们生活中每个人都可能有自己的时钟,光阴在永不停息的流逝,有了时钟人们就能随着时间有计划的过着每一天。然而现在绝大部分的时钟有的需要不断地更换电池,有些时钟需要外接电源,如果一旦电池没电或者外接电源无法供电,时钟就会停止计时了。而美国DALLAS 公司的新型时钟日历芯片DS1302就能解决这一问题。该器件能提供实时时钟(RTC)/日历、定时闹钟。少于31天的月份,月末日期可自动调整,其中包括闰年补偿。该器件还可以工作于24小时货代/PM指示的12小时格式。
本时钟还具有环保、走时无噪音、低功耗等非实时时钟不具有的功能。该实时时钟不但可以作为家用,而且更可以在公共场合使用,如车站、码头、商场等场所。
硬件设计
用AT89C52作为主控单片机,时钟模块选用DS1302作为时钟芯片,显示模块选用LCD1602,设置部分选用按键电路。
AT89C52与MCS-51单片机产品兼容 、8K字节在系统可编程Flash存储器、1000次擦写周期、 全静态操作:0Hz~33Hz 、 三级加密程序存储器、32个可编程I/O口线 、三个16位定时器/计数器 八个中断源、全双工UART串行通道、低功耗空闲和掉电模式 、掉电后中断可唤醒 、看门狗定时器 、双数据指针、掉电标识符 。
DS1302 实时时钟芯片功能丰富,可以用来直接代替IBM PC 上的时钟日历芯片DS12887,同时,它的管脚也和MC146818B、DS12887 相兼容。由于DS1302 能够自动产生世纪、年、月、日、时、分、秒等时间信息,其内部又增加了世纪寄存器,从而利用硬件电路解决子“千年”问题;DS1302 自带有锂电池,外部掉电时,其内部时间信息还能够保持10 年之久;对于一天内的时间记录,有12 小时制和24 小时制两种模式。用户还可对DS1302 进行编程以实现多种方波输出,并可对其内部的三路中断通过软件进行屏蔽。
软件设计
程序流程:主程序开始初始化,并打开中断,然后执行扫描闹钟、键盘及读取18B20值。当有S1键按下时,执行时钟设置,当有S4键按下时,则进入闹钟设置,无论是时钟还是闹钟,设置完后退出,时钟恢复实时显示。
原理图
本系统原理图设计采用Altium Designer19,具体如图。

程序
本设计利用KEIL5软件实现程序设计,具体如图。
仿真实现
本设计利用protues8.7软件实现仿真设计,具体如图。
史海拾趣
|
首先:PCB(印刷电路板)的原料是什么呢?大家知道有种东西叫\\\\\\\\\\\"玻璃纤维\\\\\\\\\\\"吧,这种材料我们在日常生活中出处可见,比如防火布、防火毡的核心就是玻璃纤维,玻璃纤维很容易和树脂相结合,我们把结构紧密、强度高的玻纤布浸入树 ...… 查看全部问答> |
|
请教大家一下,我的传感器模块A输出信号是0-5V,该模块的电源是另一个模块B提供的,同时模块A的信号也要输出到模块B,但是两个模块之间只能允许一根同轴电缆通信,所以我想把0-5V的传感器的信号通电源过载波的传送,怎么实现呢? 传感器电源是12V的 ...… 查看全部问答> |
|
ISE Design Suite: Embedded Edition 内包含的嵌入式系统工具(包括处理器平台调整实用程序、软件应用开发工具、调试工具链及器件驱动器与库)方面的信息… 查看全部问答> |
|
把短点数C1C90000H转换成为十进制 (1) 将十六进制代码写成二进制,并奋力出符号位,阶码和尾数 因为; C1C90000H=11000001110010010000000000000000 &nb ...… 查看全部问答> |
|
rt_main函数进行vxworks实时仿真时需要注意的地方 各位: rtw编译后,仿真得出的模型.lo,在vxworks下总是找不到rt_main里面的一个函数:rt_ODEUpdateCouinousState,这是为什么啊?麻烦各位帮个忙指点一下… 查看全部问答> |
|
刚学习不久,代码写的比较烂,主要想学习下LCD,抄了下某开发板的代码,自己改了下,代码如下: #include #include #include #include #include #define uchar unsigned char #define uint unsigned int sbit E=P2^7; &n ...… 查看全部问答> |
|
unsigned char CS_EN,DI_EN ;void delay(int i){ while(i>0) { i--; }}unsigned char Write_Cmd(unsigned char *cmd,unsigned char lres){ unsigned ...… 查看全部问答> |




