51单片机_10-2 DS1302可调时钟

要求

1、设置DS1302时钟芯片时间

2、读取DS1302时钟芯片时间并显示在LCD1602上

3、通过独立按键可修改当前时间,在修改模式中,对选中的属性进行闪烁以提示用户该属性被选中
K1:进入/退出修改模式
K2:选择修改的具体属性
K3:选中属性值加1
K4:选中属性值减1

4、修改后的时间增加合法判定(平年闰年,大月小月),比较简单,我写的代码没有给出,可自行添加
提示:
1、可将法和判定做成一个函数,传入time数组,函数将time数组修改为合法的时间
2、该函数紧跟在对time[flag]增减的代码之后(修改之后立马判定)

效果

资源

工程文件压缩包
链接:https://pan.baidu.com/s/1EapEC862yxjL8rWxXXnX4w
提取码:9mmm

main函数

#include <REGX52.H>
#include "Delay.H"
#include "LCD1602.H"
#include "Key.H"
#include "DS1302.H"

//时间显示
void ShowTime(unsigned char *time){
	//静态字符初始化显示
	LCD_ShowString(1,3,"-");
	LCD_ShowString(1,6,"-");
	LCD_ShowString(2,3,":");
	LCD_ShowString(2,6,":");
	LCD_ShowNum(1,1,time[0],2);	//显示年
	LCD_ShowNum(1,4,time[1],2);	//显示月
	LCD_ShowNum(1,7,time[2],2);	//显示日
	LCD_ShowNum(2,1,time[3],2);	//显示时
	LCD_ShowNum(2,4,time[4],2);	//显示分
	LCD_ShowNum(2,7,time[5],2);	//显示秒
}

//被选中时间属性闪烁
void Selected(unsigned char *time,unsigned char flag){
	unsigned char column;
	if(flag<3){
		column=3*flag+1;
		LCD_ShowString(1,column,"  ");
		Delayms(600);
		LCD_ShowNum(1,column,time[flag],2);
		Delayms(600);
	}
	else{
		column=3*(flag-3)+1;
		LCD_ShowString(2,column,"  ");
		Delayms(600);
		LCD_ShowNum(2,column,time[flag],2);
		Delayms(600);
	}
}

void main(){
	unsigned char time[]={22,4,27,16,33,20,3};
	unsigned char KEY;
	unsigned char flag;
	//状态初始化
	LCD_Init();
	DS1302_Init();
	
	//时间初始化
	DS1302_SetTime(time);
	while(1){
		DS1302_ReadTime(time);		//读取时间
		ShowTime(time);				//显示时间
		KEY=get_key();
		if(KEY==1){					//读取到K1按下,进入修改模式
			KEY=0;					//复位
			flag=0;					//指向time数组中待修改的值
			while(1){
				Selected(time,flag);//flag指向的值闪烁
				KEY=get_key();		//获取按键值
				if(KEY==2){flag=(flag+1)%6;KEY=0;Delayms(400);}	//指向下一个待修改的值
				if(KEY==3){time[flag]+=1;KEY=0;Delayms(400);}	//将指向的值加1,复位
				if(KEY==4){time[flag]-=1;KEY=0;Delayms(400);}	//将指向的值减一,复位
				if(KEY==1){DS1302_SetTime(time);break;KEY=0;}	//完成修改,退出,复位
			}
			Delays(1);				//延迟1秒(用户按下的K1时间过长,延迟一下防止被下一条get_key捕捉)
		}
	}
}
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值