DS3231高精度时钟,LCD1602显示,QXmini151版本

本设计的主要任务是计时和显示。

设计任务的具体要求如下:

  1. 计时:第一种是通过单片机内部的定时器/计数器来实现为软时钟。第二种是通过专用的硬件时钟芯片来实现为硬时钟。
  2. 显示:第一种是数码管显示,分为静态显示和动态显示,动态显示需要占用cpu大量时间来运行,不需要复杂的驱动程序,制作成本不高。第二种是LCD1602液晶显示,能显示出较多的信息并且数字清晰,应用广泛,但是不便于观察。

总设计思路阐述

1.时钟方案设计及选择:目前有DS3231、DS302、DS12C887三种时钟芯片。本次设计选择DS3231,

需要应用IC总线协议。

2.核心控制区设计方案:选用STC89C51作为核心控制单元。

3.显示原件:采用LCD1602液晶显示。

4.键盘设置:设计为时、分、秒的调整按键。

5.控制继电器:选择5V/1A继电器,驱动LCD液晶显示。

6.外围电路:复位电路,晶振。

7.时钟时序问题

代码如下:

/*******************************************************************************
实验名 :高精度时钟显示和控制
使用的IO  : P3^0  SDA
		    P3^1  SCL
实验效果:1602 显示时钟,按S4进入时钟设置并暂停时钟,按S1选择时钟设置的时分秒日月周年,按S3使时间加一
*******************************************************************************/

#include<reg51.h>
#include"lcd.h"
#include"ds3231.h"

sbit K1=P3^5;//按键IO口定义
sbit K2=P3^4;
sbit K3=P3^3;
sbit K4=P3^2;

void Int0Configuration();//外部中断初始化函数声明
void LcdDisplay();//LCD初始化函数声明
unsigned char SetState,SetPlace;
void Delay10ms(void);   //10ms延迟函数
/*******************************************************************************
* 函数名          : main
* 函数功能		  : 主函数
* 输入            : 无
* 输出            : 无
*******************************************************************************/

void main()
{
	unsigned char i;
	Int0Configuration();//外部中断初始化
	LcdInit();//LCD初始化
	DS3231_Init();//DS3231模块初始化
	while(1)
	{	
		if(SetState==0)//标志位为0时读取时间
		{
			DS3231_Read_time(); 
		}
		else
		{
			if(K1==0)		//检测按键K1是否按下
			{
				Delay10ms();	//消除抖动
				if(K1==0)
				{
					while(!K1);//检测是否松手
					SetPlace++;
					if(SetPlace>=7)
						SetPlace=0;					
				}
			}
			if(K2==0)		//检测按键K2是否按下
			{
				Delay10ms();	//消除抖动
				if(K2==0)
				{
					while(!K2);//松手检测
					TIME[SetPlace]++;
					if((TIME[SetPlace]>=60)&&(SetPlace<2))		//分秒只能到60
					{
						TIME[SetPlace]=0;
					}
					if((TIME[SetPlace]>=24)&&(SetPlace==2))		//小时只能到23
					{
						TIME[SetPlace]=0;
					}
					if((TIME[SetPlace]>=32)&&(SetPlace==3))		//日只能到31
					{
						TIME[SetPlace]=0;	
					}
					if((TIME[SetPlace]>=13)&&(SetPlace==4))		//月只能到12
					{
						TIME[SetPlace]=0;
					}	
					if((TIME[S
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值