桂林电子科技大学课程设计(论文)报告用纸 第28页 共 32 页
{
hide_min=0; outkey();
Upkey(); Downkey();
if(up_flag==1||down_flag==1)
{
Write1302(0x8e,0x00); //写入允许
Write1302(0x84,temp); //写入新的小时数 Write1302(0x8e,0x80); //禁止写入 up_flag=0; down_flag=0;
}
if(Down!=0&&Up!=0) { hide_hour++;
if(hide_hour>3) hide_hour=0;
else hide_hour=0; show_time();
}
}while(count==4);break; case 4:do //count=4,调整星期
{
hide_hour=0; outkey(); Upkey();
Downkey();
if(up_flag==1||down_flag==1) {
Write1302(0x8e,0x00); //写入允许
Write1302(0x8a,temp); //写入新的星期数 Write1302(0x8e,0x80); //禁止写入 up_flag=0; down_flag=0; }
if(Down!=0&&Up!=0) { hide_week++;
if(hide_week>3) hide_week=0;
} else hide_week=0;
show_time();
桂林电子科技大学课程设计(论文)报告用纸 第29页 共 32 页
}while(count==5);break; case 5:do //count=5,调整日 {
hide_week=0; outkey(); Upkey(); Downkey();
if(up_flag==1||down_flag==1)
{
Write1302(0x8e,0x00); //写入允许
Write1302(0x86,temp); //写入新的日数 Write1302(0x8e,0x80); //禁止写入 up_flag=0; down_flag=0;
}
if(Down!=0&&Up!=0)
{ hide_day++; if(hide_day>3) hide_day=0; }
else hide_day=0;
show_time();
}while(count==6);break; case 6:do //count=6,调整月
{
hide_day=0;
outkey();
Upkey(); Downkey();
if(up_flag==1||down_flag==1) {
Write1302(0x8e,0x00); //写入允许
Write1302(0x88,temp); //写入新的月数 Write1302(0x8e,0x80); //禁止写入 up_flag=0; down_flag=0;
}
if(Down!=0&&Up!=0)
{ hide_month++; if(hide_month>3) hide_month=0;
}
桂林电子科技大学课程设计(论文)报告用纸 第30页 共 32 页
else hide_month=0;
show_time(); }while(count==7);break; case 7:do //count=7,调整年 {
hide_month=0;
outkey(); Upkey(); Downkey();
if(up_flag==1||down_flag==1) {
Write1302(0x8e,0x00); //写入允许 Write1302(0x8c,temp); //写入新的年数 Write1302(0x8e,0x80); //禁止写入 up_flag=0; down_flag=0;
}
if(Down!=0&&Up!=0)
{
hide_year++; if(hide_year>3)
hide_year=0; }
else hide_year=0; show_time(); }while(count==8);break; case 8: count=0;hide_year=0; //count8, 跳出调整模式,返回默认显示状态 Second=Read1302(DS1302_SECOND); Write1302(0x8e,0x00); //写入允许 }
//*************************************** //液晶显示主程序模块
//***************************************
Write1302(0x80,Second&0x7f);
Write1302(0x8E,0x80); //禁止写入
done=0;
break; //count=7,开启中断,标志位置0并退出 default:break; }
桂林电子科技大学课程设计(论文)报告用纸 第31页 共 32 页
void show_time()
{
DS1302_GetTime(&CurrentTime); //获取时钟芯片的时间数据 TimeToStr(&CurrentTime); //时间数据转换液晶字符 DateToStr(&CurrentTime); //日期数据转换液晶字符
gotoxy(4,0); print(\时间:\
gotoxy(4,3);
print(CurrentTime.TimeString); //显示时间
gotoxy(3,3);
print(CurrentTime.DateString); //显示日期
gotoxy(3,0); print(\星期\gotoxy(3,2);
print(week_value); //显示星期
gotoxy(2,0);
print(\定时:18:00--6:00\ gotoxy(1,0);
print(\灯光状态:明亮 \ if(guang==0) {gotoxy(1,5); print(\黑暗 \
}
mdelay(500); //扫描延时 }
//************************************ //主程序
//************************************* main()
{
// flag=1; //时钟停止标志
init_lcd();
clrram_lcd();
Initial_DS1302(); //时钟芯片初始化 up_flag=0; down_flag=0;
done=0; //进入默认液晶显示 guang=1;
BEEP=1;
桂林电子科技大学课程设计(论文)报告用纸 第32页 共 32 页
TMOD=0X01; /*工作寄存器设置*/ ET0 =1; /*定时器0中断使能*/ EA =1; /*总中断使能*/
TH0=0; /*定时器计数寄存器赋初始值0*/ TL0=0;
TCON =0x10; /*工作寄存器设置*/ while(1) {
while(done==1)
keydone(); //进入调整模式
while(done==0)
{
show_time(); //液晶显示数据 Setkey();
}
}
//扫描各功能键
}
void INTTO() interrupt 1 /*定时器0中断服务程序,定时器计数满溢出以后自动进入*/ { }
TH0=0xff; TL1=0x00; BEEP=~BEEP;