第三章 系统软件的设计
tYear = BCD_DEC(DS12887_Read(DS_YER)); //当前年 tMonth = BCD_DEC(DS12887_Read(DS_MON));//当前月 switch (tMonth) { case 1: case 3: case 5: case 7: case 8: case 10:
case 12:return 31; //1、3、5、7、8、10、12 月均为31天 case 4: case 6: case 9:
case 11:return 30; //4、6、9、11 月均为30天 case 2:
if (tYear%4==0) //2月闰年为29天 return 29; else
return 28; //平年为28天 default: return 0; } }
void Key(void) {
unsigned char i;
P1 = 0xFF;
if (KEY1 == 0) //显示模式更改
27
2 7
28
第三章 系统软件的设计
{
Delay(10); if (KEY1 == 0) {
if (modify)
modify = 0;
//修改模式下用于退出修改
else { }
DS12887_Write(DS_R_B, 0x62); dispMode++; if (dispMode > 2)
dispMode = 0;
}
while (KEY1 == 0) Display(); }
if (KEY2 == 0) //修改模式 {
Delay(10); if (KEY2 == 0) {
if (modify == 0) //时分秒123,年45,月日星期789 {
modify = 3 * dispMode + 1; DS12887_Write(DS_R_B, 0xE2); } else { modify++;
switch (dispMode) //根据显示模式确定modify初值 { case 0:
28
第三章 系统软件的设计
29
case 2:
if (modify > (3 * dispMode + 3)) //时分秒,日星期模式下每个是3位 {
modify = 0;
DS12887_Write(DS_R_B, 0x62); } break; case 1:
if (modify > (3 * dispMode + 2)) //年模式下是2位 {
modify = 0;
DS12887_Write(DS_R_B, 0x62); } break; } } }
while (KEY2 == 0) Display(); }
if (KEY3 == 0) //+ {
Delay(10); if (KEY3 == 0) {
switch (modify) {
case 1: //时 i = BCD_DEC(DS12887_Read(DS_HOR));
29
30
第三章 系统软件的设计
i++; if (i > 23) i = 0;
DS12887_Write(DS_HOR, DEC_BCD(i)); break;
case 2: //分 i = BCD_DEC(DS12887_Read(DS_MIN)); i++; if (i > 59) i = 0;
DS12887_Write(DS_MIN, DEC_BCD(i)); break;
case 3: i = BCD_DEC(DS12887_Read(DS_SEC)); i++; if (i > 59) i = 0;
DS12887_Write(DS_SEC, DEC_BCD(i)); break;
case 4: i = BCD_DEC(DS12887_Read(DS_Y_S)); i++; if (i > 21) i = 19;
DS12887_Write(DS_Y_S, DEC_BCD(i)); break;
case 5: i = BCD_DEC(DS12887_Read(DS_YER)); i++; if (i > 99)
//秒 //年高两位 //年低两位 30
第三章 系统软件的设计
31
i = 0;
DS12887_Write(DS_YER, DEC_BCD(i)); break;
case 7: //月 i = BCD_DEC(DS12887_Read(DS_MON)); i++; if (i > 12) i = 1;
DS12887_Write(DS_MON, DEC_BCD(i)); break;
case 8: i = BCD_DEC(DS12887_Read(DS_DAY)); i++; if (i > getDay()) i = 1;
DS12887_Write(DS_DAY, DEC_BCD(i)); break;
case 9: i = BCD_DEC(DS12887_Read(DS_WEK)); i++; if (i > 7) i = 1;
DS12887_Write(DS_WEK, DEC_BCD(i)); break; } }
while (KEY3 == 0) Display(); }
if (KEY4 == 0)
//日 //星期 31