📄 ht1380.c
字号:
// Not display the unit bits of second, that is let it flash
disp_led (second, 0x08, 0x04, 2);
}
/*------------------------- HT1380 inc_year_10 -----------------------*/
void inc_year_10 ()
{
if ( (year & 0x0F0) == 0x90 )
year = year & 0x0F;
else
year = year + 0x10;
}
/*-------------------------- HT1380 inc_year_1 -----------------------*/
void inc_year_1 ()
{
if ( (year & 0x0F) == 0x09 )
{
year = year & 0x0F0;
inc_year_10 ();
}
else
year = year + 0x01;
}
/*-------------------------- HT1380 inc_mon_10 -----------------------*/
void inc_mon_10 ()
{
if ( (month & 0x0F0) == 0x10 )
month = month & 0x0F;
else
month = month | 0x10;
}
/*-------------------------- HT1380 inc_mon_1 ------------------------*/
void inc_mon_1 ()
{
if ( month >= 0x12)
month = 0x01;
else if ( month == 0x09)
month = 0x10;
else
month = month + 0x01;
}
/*-------------------------- HT1380 inc_day_10 -----------------------*/
void inc_day_10 ()
{
if ( (day & 0x0F0) == 0x30 )
day = day & 0x0F;
else
day = day + 0x10;
}
/*-------------------------- HT1380 inc_day_1 ------------------------*/
void inc_day_1 ()
{
if ( day >= 0x31 )
day = 0x01;
else if ( (day & 0x0F) == 0x09 )
{
day = day & 0x0F0;
inc_day_10 ();
}
else
day = day + 0x01;
}
/*------------------------- HT1380 inc_hour_10 -----------------------*/
void inc_hour_10 ()
{
if ( (hour & 0x0F0) == 0x20 )
hour = hour & 0x0F;
else
hour = hour + 0x10;
}
/*-------------------------- HT1380 inc_hour_1 -----------------------*/
void inc_hour_1 ()
{
if ( hour >= 0x23 )
hour = 0x00;
else if ( (hour & 0x0F) == 0x09 )
{
hour = hour & 0x0F0;
inc_hour_10 ();
}
else
hour = hour + 0x01;
}
/*-------------------------- HT1380 inc_min_10 -----------------------*/
void inc_min_10 ()
{
if ( (minute & 0x0F0) == 0x50 )
minute = minute & 0x0F;
else
minute = minute + 0x10;
}
/*-------------------------- HT1380 inc_min_1 ------------------------*/
void inc_min_1 ()
{
if ( minute == 0x59 )
minute = 0x00;
else if ( (minute & 0x0F) == 0x09 )
{
minute = minute & 0x0F0;
inc_min_10 ();
}
else
minute = minute + 0x01;
}
/*-------------------------- HT1380 inc_sec_10 -----------------------*/
void inc_sec_10 ()
{
if ( (second & 0x0F0) == 0x50 )
second = second & 0x0F;
else
second = second + 0x10;
}
/*-------------------------- HT1380 inc_sec_1 ------------------------*/
void inc_sec_1 ()
{
if ( second == 0x59 )
second = 0x00;
else if ( (second & 0x0F) == 0x09 )
{
second = second & 0x0F0;
inc_sec_10 ();
}
else
second = second + 0x01;
}
/*------------------------- HT1380 dec_year_10 -----------------------*/
void dec_year_10 ()
{
if ( (year & 0x0F0) == 0x00 )
year = year | 0x90;
else
year = year - 0x10;
}
/*-------------------------- HT1380 dec_year_1 -----------------------*/
void dec_year_1 ()
{
if ( (year & 0x0F) == 0x00 )
{
year = year | 0x09;
dec_year_10 ();
}
else
year = year - 0x01;
}
/*-------------------------- HT1380 dec_mon_10 -----------------------*/
void dec_mon_10 ()
{
if ( (month & 0x0F0) == 0x10 )
month = month & 0x0F;
else
month = month | 0x10;
}
/*-------------------------- HT1380 dec_mon_1 ------------------------*/
void dec_mon_1 ()
{
if ( month == 0x01 | month >= 0x12)
month = 0x12;
else if ( month == 0x10)
month = 0x09;
else
month = month - 0x01;
}
/*-------------------------- HT1380 dec_day_10 -----------------------*/
void dec_day_10 ()
{
if ( (day & 0x0F0) == 0x00 )
day = day | 0x30;
else
day = day - 0x10;
}
/*-------------------------- HT1380 dec_day_1 ------------------------*/
void dec_day_1 ()
{
if ( day == 0x01 | day >= 0x31)
day = 0x31;
else if ( (day & 0x0F) == 0x00 )
{
day = day | 0x09;
dec_day_10 ();
}
else
day = day - 0x01;
}
/*------------------------- HT1380 dec_hour_10 -----------------------*/
void dec_hour_10 ()
{
if ( (hour & 0x0F0) == 0x00 )
hour = hour | 0x20;
else
hour = hour - 0x10;
}
/*-------------------------- HT1380 dec_hour_1 -----------------------*/
void dec_hour_1 ()
{
if ( hour == 0x00 | hour >= 0x24)
hour = 0x23;
else if ( (hour & 0x0F) == 0x00 )
{
hour = hour | 0x09;
dec_hour_10 ();
}
else
hour = hour - 0x01;
}
/*-------------------------- HT1380 dec_min_10 -----------------------*/
void dec_min_10 ()
{
if ( (minute & 0x0F0) == 0x00 )
minute = minute | 0x50;
else
minute = minute - 0x10;
}
/*-------------------------- HT1380 dec_min_1 ------------------------*/
void dec_min_1 ()
{
if ( minute == 0x00 )
minute = 0x59;
else if ( (minute & 0x0F) == 0x00 )
{
minute = minute | 0x09;
dec_min_10 ();
}
else
minute = minute - 0x01;
}
/*-------------------------- HT1380 dec_sec_10 -----------------------*/
void dec_sec_10 ()
{
if ( (second & 0x0F0) == 0x00 )
second = second | 0x50;
else
second = second - 0x10;
}
/*-------------------------- HT1380 dec_sec_1 ------------------------*/
void dec_sec_1 ()
{
if ( second == 0x00 )
second = 0x59;
else if ( (second & 0x0F) == 0x00 )
{
second = second | 0x09;
dec_sec_10 ();
}
else
second = second - 0x01;
}
void main ()
{
rst_1380_ = 0;
sclk_1380 = 0;
set_time ();
blk_ctrl = 0;
while (1)
{
read_key ();
switch (FSM_State)
{
case SHOW_YEAR:
if (key0_hit)
FSM_State = SET_YEAR_10;
else if (key2_hit)
FSM_State = SHOW_SEC;
else if (key1_hit)
FSM_State = SHOW_MMDD;
else
{
read_time ();
disp_year ();
}
break;
case SHOW_MMDD:
if (key0_hit)
FSM_State = SET_MON_10;
else if (key2_hit)
FSM_State = SHOW_YEAR;
else if (key1_hit)
FSM_State = SHOW_TIME;
else
{
read_time ();
disp_mmdd ();
}
break;
case SHOW_TIME:
if (key0_hit)
FSM_State = SET_HOUR_10;
else if (key2_hit)
FSM_State = SHOW_MMDD;
else if (key1_hit)
FSM_State = SHOW_SEC;
else
{
read_time ();
disp_time ();
}
break;
case SHOW_SEC:
if (key0_hit)
FSM_State = SET_SEC_10;
else if (key2_hit)
FSM_State = SHOW_TIME;
else if (key1_hit)
FSM_State = SHOW_YEAR;
else
{
second = read_sec ();
disp_sec ();
}
break;
case SET_YEAR_10:
if (key0_hit)
{
set_time ();
FSM_State = SHOW_YEAR;
}
else if (key3_hit)
FSM_State = SET_YEAR_1;
else if (key2_hit)
inc_year_10 ();
else if (key1_hit)
dec_year_10 ();
else
disp_set_year_10 ();
break;
case SET_YEAR_1:
if (key0_hit)
{
set_time ();
FSM_State = SHOW_YEAR;
}
else if (key3_hit)
FSM_State = SET_YEAR_10;
else if (key2_hit)
inc_year_1 ();
else if (key1_hit)
dec_year_1 ();
else
disp_set_year_1 ();
break;
case SET_MON_10:
if (key0_hit)
{
set_time ();
FSM_State = SHOW_MMDD;
}
else if (key3_hit)
FSM_State = SET_MON_1;
else if (key2_hit)
inc_mon_10 ();
else if (key1_hit)
dec_mon_10 ();
else
disp_set_mon_10 ();
break;
case SET_MON_1:
if (key0_hit)
{
set_time ();
FSM_State = SHOW_MMDD;
}
else if (key3_hit)
FSM_State = SET_DAY_10;
else if (key2_hit)
inc_mon_1 ();
else if (key1_hit)
dec_mon_1 ();
else
disp_set_mon_1 ();
break;
case SET_DAY_10:
if (key0_hit)
{
set_time ();
FSM_State = SHOW_MMDD;
}
else if (key3_hit)
FSM_State = SET_DAY_1;
else if (key2_hit)
inc_day_10 ();
else if (key1_hit)
dec_day_10 ();
else
disp_set_day_10 ();
break;
case SET_DAY_1:
if (key0_hit)
{
set_time ();
FSM_State = SHOW_MMDD;
}
else if (key3_hit)
FSM_State = SET_MON_10;
else if (key2_hit)
inc_day_1 ();
else if (key1_hit)
dec_day_1 ();
else
disp_set_day_1 ();
break;
case SET_HOUR_10:
if (key0_hit)
{
set_time ();
FSM_State = SHOW_TIME;
}
else if (key3_hit)
FSM_State = SET_HOUR_1;
else if (key2_hit)
inc_hour_10 ();
else if (key1_hit)
dec_hour_10 ();
else
disp_set_hour_10 ();
break;
case SET_HOUR_1:
if (key0_hit)
{
set_time ();
FSM_State = SHOW_TIME;
}
else if (key3_hit)
FSM_State = SET_MIN_10;
else if (key2_hit)
inc_hour_1 ();
else if (key1_hit)
dec_hour_1 ();
else
disp_set_hour_1 ();
break;
case SET_MIN_10:
if (key0_hit)
{
set_time ();
FSM_State = SHOW_TIME;
}
else if (key3_hit)
FSM_State = SET_MIN_1;
else if (key2_hit)
inc_min_10 ();
else if (key1_hit)
dec_min_10 ();
else
disp_set_min_10 ();
break;
case SET_MIN_1:
if (key0_hit)
{
set_time ();
FSM_State = SHOW_TIME;
}
else if (key3_hit)
FSM_State = SET_HOUR_10;
else if (key2_hit)
inc_min_1 ();
else if (key1_hit)
dec_min_1 ();
else
disp_set_min_1 ();
break;
case SET_SEC_10:
if (key0_hit)
{
write_sec (second);
FSM_State = SHOW_SEC;
}
else if (key3_hit)
FSM_State = SET_SEC_1;
else if (key2_hit)
inc_sec_10 ();
else if (key1_hit)
dec_sec_10 ();
else
disp_set_sec_10 ();
break;
case SET_SEC_1:
if (key0_hit)
{
write_sec (second);
FSM_State = SHOW_SEC;
}
else if (key3_hit)
FSM_State = SET_SEC_10;
else if (key2_hit)
inc_sec_1 ();
else if (key1_hit)
dec_sec_1 ();
else
disp_set_sec_1 ();
break;
default:
FSM_State = SHOW_TIME;
break;
}
key3_hit = 0;
key0_hit = 0;
key1_hit = 0;
key2_hit = 0;
if (blk_ctrl == BLK_TH * 2)
blk_ctrl = 0;
else
blk_ctrl++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -