要求
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){
KEY=0;
flag=0;
while(1){
Selected(time,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);}
if(KEY==4){time[flag]-=1;KEY=0;Delayms(400);}
if(KEY==1){DS1302_SetTime(time);break;KEY=0;}
}
Delays(1);
}
}
}
|