皖西学院 学生课程设计项目
break;
case 4:
temp=Read1302(DS1302_WEEK); //读取星期数
temp=temp+1; //星期数加1
up_flag=1;
if(temp>0x7) temp=1; break;
case 5:
temp=Read1302(DS1302_DAY); //读取日数
temp=temp+1; //日数加1
up_flag=1;
if(temp>0x31) temp=1; break;
case 6:
temp=Read1302(DS1302_MONTH); //读取月数
temp=temp+1; //月数加1
up_flag=1;
if(temp>0x12) temp=1; break;
case 7:
temp=Read1302(DS1302_YEAR); //读取年数
temp=temp+1; //年数加1
up_flag=1;
if(temp>0x85) temp=0; break;
default:break; }
26
皖西学院 学生课程设计项目
while(Up==0);
while(wireless_2==1);
}}
///////////////////////////////////////////////////////////////////////////////
void Downkey()//降序按键 { Down=1;
if(Down==0||wireless_3==1)
{ mdelay(8);
switch(count) {case 1:
temp=Read1302(DS1302_SECOND); //读取秒数
temp=temp-1;
//秒数减1
down_flag=1; //数据调整后更新标志
if(temp==0x7f) //小于0秒,返回59秒 temp=0x59; break;
case 2:
temp=Read1302(DS1302_MINUTE); //读取分数
temp=temp-1; //分数减1
down_flag=1;
if(temp==-1)
temp=0x59; //小于0秒,返回59秒 break;
case 3:
temp=Read1302(DS1302_HOUR); //读取小时数
temp=temp-1; //小时数减1
down_flag=1;
if(temp==-1) temp=0x23; break;
27
皖西学院 学生课程设计项目
case 4:
temp=Read1302(DS1302_WEEK); //读取星期数
temp=temp-1; //星期数减1
down_flag=1;
if(temp==0) temp=0x7;; break;
case 5:
temp=Read1302(DS1302_DAY); //读取日数
temp=temp-1; //日数减1
down_flag=1;
if(temp==0) temp=31; break;
case 6:
temp=Read1302(DS1302_MONTH); //读取月数
temp=temp-1; //月数减1
down_flag=1;
if(temp==0) temp=12; break;
case 7:
temp=Read1302(DS1302_YEAR); //读取年数
temp=temp-1; //年数减1
down_flag=1;
if(temp==-1) temp=0x85; break;
default:break; }
while(Down==0);
28
皖西学院 学生课程设计项目
while(wireless_3==1); }}
void Setkey()//模式选择按键 { Set=1;
if(Set==0||wireless_4==1)
{ mdelay(8);
count=count+1; //Setkey按一次,count就加1
done=1;
//进入调整模式
while(Set==0);
while(wireless_4==1);}} void keydone()//按键功能执行 { uchar Second;
if(flag==0) //关闭时钟,停止计时
{ Write1302(0x8e,0x00); //写入允许 temp=Read1302(0x80); Write1302(0x80,temp|0x80); Write1302(0x8e,0x80); //禁止写入 flag=1; } Setkey();
switch(count) {case 1:do
//count=1,调整秒
//扫描跳出按钮
//扫描模式切换按键
{ outkey();
Upkey(); //扫描加按钮 Downkey(); //扫描减按钮
if(up_flag==1||down_flag==1) //数据更新,重新写入新的数据 { Write1302(0x8e,0x00); //写入允许
Write1302(0x80,temp|0x80); //写入新的秒数 Write1302(0x8e,0x80); //禁止写入 up_flag=0; down_flag=0; }
hide_sec++; //位闪计数
29
皖西学院 学生课程设计项目
if(hide_sec>3) hide_sec=0;
show_time(); //液晶显示数据
}while(count==2);break;
//count=2,调整分
case 2:do
{ hide_sec=0;
outkey(); Upkey(); Downkey(); if(temp>0x60) temp=0;
if(up_flag==1||down_flag==1) { Write1302(0x8e,0x00); //写入允许 Write1302(0x82,temp); //写入新的分数 Write1302(0x8e,0x80); //禁止写入 up_flag=0; down_flag=0; } hide_min++; if(hide_min>3) hide_min=0;
show_time();
}while(count==3);break;
//count=3,调整小时
case 3:do
{ hide_min=0;
outkey(); Upkey(); Downkey();
if(up_flag==1||down_flag==1) { Write1302(0x8e,0x00); //写入允许 Write1302(0x84,temp); //写入新的小时数
30