📄 24m点阵时钟.c
字号:
case CHG_DAY:
if(HIDE){
if(Cut_num(&TMP_TIME) == 0xf9)
TMP_TIME= 0x31;
}
else{
if(Cut_num(&Time.Day) == 0xf9)
Time.Day= 0x31;
}
break;
case CHG_WEEK:
if(HIDE){
if(Cut_num(&TMP_TIME) == 0xf9)
TMP_TIME= 0x7;
}
else{
if(Cut_num(&Time.Week) == 0xf9)
Time.Week= 0x7;
}
break;
case CHG_YEAR:
if(HIDE){
if(Cut_num(&TMP_TIME) == 0xf9)
TMP_TIME= 0x99;
}
else{
if(Cut_num(&Time.Year) == 0xf9)
Time.Year = 0x99;
}
//if(Cut_num(&Time.Year) == 0x99)
// Time.Year= 0;
break;
default:
break;
}
}
//======按键======
uchar ReadKey(){
//
if(!key_done){
switch(MSG_KEY){
case KEY0_S:STATE = STA_sTIME;
break;
case KEY1_S:STATE = STA_gWORD; //STA_sWEEK
break;
case KEY2_S:STATE = STA_gTEMP;
break;
case KEY3_S:STATE = STA_gTIME;
break;
case KEY0_L:STATE = STA_CHG;
break;
case KEY1_L:STATE = STA_SONG;
break;
case KEY2_L:STATE = STA_gTEMP;
break;
case KEY3_L:STATE = STA_gWORD; //STA_sTIME
break;
default: break;
}
}
key_done = 1; //按键事件处理完成
return MSG_KEY;
}
//=======================
//****校时按键处理****
//=======================
uchar ReadKey1(){
//
if(!key_done){
switch(MSG_KEY){
case KEY0_S: //切换校时对象
case KEY0_L:
exit = 0;
TR1 = 0; //关闭定时器1闪烁
Change_obj();
if(CHANGE++ >= CHG_YEAR)
CHANGE = CHG_HOUR;
TR1 = 1; //开启定时器1闪烁
break;
case KEY1_S: //加加
case KEY1_L:
exit = 0;
TR1 = 0; //关闭定时器1闪烁
Add_Time();
TR1 = 1; //开启定时器1闪烁
break;
case KEY2_S: //减减
case KEY2_L:
exit = 0;
TR1 = 0; //关闭定时器1闪烁
Cut_Time();
TR1 = 1; //开启定时器1闪烁
break;
case KEY3_L:
case KEY3_S:
return KEY3_S;
default: break;
}
}
key_done = 1; //按键事件处理完成
return 0;
}
//===========================
void Tinit(){
TMOD = 0x11;
TH0 = 0xD8;
TL0 = 0xF0;
TH1 = 0x42;
TL1 = 0xCA;
TR0 = 1;
//TR1 = 1;
ET0 = 1;
ET1 = 1;
EA = 1;
}
timer0() interrupt 1{
TH0 = 0xb1;
TL0 = 0xe0;
if(P1 != 0xff) {//若有键按下
cur_key_val = P1&0x0f; //记录按键值
if(key_times < 150)
key_times++;
else{
key_keep_times++; //长按连击
if(key_keep_times >= 10){ //10 1秒连击10次
key_keep_times = 0;
MSG_KEY = 0x10 | cur_key_val;
key_done = 0; //按键事件复位
}
}
}else{
if(key_times > 2 && key_times < 100 && key_done){ //短按键
MSG_KEY = cur_key_val;
key_done = 0; //按键事件复位
}
else if(key_times >= 100 && key_done){ //长按键
MSG_KEY = 0x10 | cur_key_val;
key_done = 0; //按键事件复位
}
key_times = 0;
key_keep_times = 0;
}
}
timer1() interrupt 3{
if(STATE == STA_CHG){
TH1 = 0x42;
TL1 = 0xCA;
if(hide_times++ == 8){
HIDE = 0; //显示
switch(CHANGE){
case CHG_HOUR:
Time.Hour =TMP_TIME;
break;
case CHG_MIN:
Time.Minute = TMP_TIME;
break;
case CHG_SEC:
Time.Second = TMP_TIME;
break;
case CHG_MON:
Time.Month = TMP_TIME;
break;
case CHG_DAY:
Time.Day = TMP_TIME;
break;
case CHG_WEEK:
Time.Week = TMP_TIME;
break;
case CHG_YEAR:
Time.Year = TMP_TIME;
break;
default:
break;
}
}
if(hide_times > 17){
hide_times = 0;
HIDE = 1; //隐藏
exit++;
switch(CHANGE){
case CHG_HOUR:
TMP_TIME = Time.Hour;
Time.Hour = 0xcc;
break;
case CHG_MIN:
TMP_TIME = Time.Minute;
Time.Minute = 0xcc;
break;
case CHG_SEC:
TMP_TIME = Time.Second;
Time.Second = 0xcc;
break;
case CHG_MON:
TMP_TIME = Time.Month;
Time.Month = 0xcc;
break;
case CHG_DAY:
TMP_TIME = Time.Day;
Time.Day = 0xcc;
break;
case CHG_WEEK:
TMP_TIME = Time.Week;
Time.Week = 0xcc;
break;
case CHG_YEAR:
TMP_TIME = Time.Year;
Time.Year = 0xcc;
break;
default:
break;
}
}
}
}
void Compute_State(){
switch(Time.Second){
case 0x1:
//STATE = STA_gTIME;
break;
case 0x2:
STATE = STA_sYEAR;
break;
case 0x15:
STATE = STA_sTEMP;
break;
case 0x31:
STATE = STA_sDATE;
break;
case 0x40:
STATE = STA_sWEEK;
break;
case 0x50:
STATE = STA_sTEMP;
break;
default:
break;
}
if(Time.Minute%2 == 0 && Time.Second == 0)
STATE = STA_gTIME;
if((Time.Minute&0x0f)%5 == 0 && Time.Second == 30)
STATE = STA_gTEMP;
if((Time.Minute&0x0f) == 7 && Time.Second == 0)
STATE = STA_gWORD;
if((Time.Minute&0x0f) == 3 && Time.Second == 0)
STATE = STA_SONG;
}
//;---------主程序循环--------------
void main()
{
int i;
initial();
Tinit();
Init_DS1302();
Read_TIME(); //读取时间
Read_Temperature();
Show_Cpyrt();
//start_time();
//write_time1302();
MSG_MV = MSG_MV_L;
STATE = STA_sTIME;
while(1)
{
ReadKey();
switch(STATE){
case STA_gTIME:
//添加代码
MSG_MV = MSG_MV_L;
move_times = 0;
start_word=0;
Read_TIME(); //读取时间
Show_All_Info();
MSG_KEY = KEY0_S; //回到时间画面
key_done = 0;
break;
case STA_gTEMP:
Put_Wdispram(TMP_WORDS); //,start_word++
Read_Temperature();
Disp_Temperature();
Put_gTEMP();
//Move_Down();
Show_Move_Word(TMP_WORDS);
MSG_KEY = KEY0_S; //回到时间画面
key_done = 0;
break;
case STA_gWORD:
//添加代码
Put_Wdispram(MY_WORDS); //,start_word++
//Move_Down();
Show_Move_Word(MY_WORDS);
MSG_KEY = KEY0_S; //回到时间画面
key_done = 0;
break;
case STA_sTIME:
//添加代码
MSG_MV = MSG_MV_L;
move_times = 0;
start_word=0;
Read_TIME(); //读取时间
Put_Tdispram(0);
Show_sWord();
Compute_State();
break;
case STA_sDATE:
//添加代码
MSG_MV = MSG_MV_L;
move_times = 0;
start_word=0;
Read_TIME(); //读取时间
Put_Ddispram(8);
Move_Down();
Put_Ddispram(0);
for(i=0;i<8;i++)
Show_sWord();
Read_TIME();
Put_Tdispram(8);
Move_Up();
MSG_KEY = KEY0_S; //回到时间画面
key_done = 0;
break;
case STA_sWEEK:
//添加代码
MSG_MV = MSG_MV_L;
move_times = 0;
start_word=0;
Read_TIME(); //读取时间
Put_Kdispram(8);
Move_Up(); //Move_Down();
for(i=0;i<8;i++){
Read_TIME(); //读取时间
Put_Kdispram(0);
Show_sWord();
}
Read_TIME();
Put_Tdispram(8);
Move_Down(); //Move_Up();
MSG_KEY = KEY0_S; //回到时间画面
key_done = 0;
break;
case STA_sYEAR:
MSG_MV = MSG_MV_L;
move_times = 0;
start_word=0;
Read_TIME(); //读取时间
Put_Ydispram(8);
Move_Down();
for(i=0;i<8;i++){
Read_TIME(); //读取时间
Put_Ydispram(0);
Show_sWord();
}
Read_TIME();
Put_Tdispram(8);
Move_Up();
MSG_KEY = KEY0_S; //回到时间画面
key_done = 0;
break;
case STA_sTEMP:
//添加代码
MSG_MV = MSG_MV_L;
move_times = 0;
start_word=0;
Read_Temperature();
Disp_Temperature();
Put_sTEMP(8);
Move_Up(); //Move_Down();
for(i=0;i<8;i++) {
Read_Temperature();
Disp_Temperature();
Put_sTEMP(0);
Show_sWord();
}
Read_TIME();
Put_Tdispram(8);
Move_Down(); //Move_Up();
MSG_KEY = KEY0_S; //回到时间画面
key_done = 0;
break;
case STA_sWORD:
//添加代码
break;
case STA_CHG:
//校时模式
Change_Time();
write_time1302();
Read_TIME();
Put_Tdispram(8);
Move_Up();
MSG_KEY = KEY0_S;
break;
case STA_SONG:
MSG_MV = MSG_MV_L;
move_times = 0;
start_word=0;
Show_Song();
MSG_KEY = KEY0_S;
key_done = 0;
break;
default:
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -