📄 key.c
字号:
#include "reg51.h"
#include "typedef.h"
#include "key.h"
#include "lcd.h"
#include "ds1302.h"
uint wait_time;
bit key_enable;
bit flash_flag;
bit alarm_flag;
uchar flash_count;
uchar function_count;
uchar key;
uchar key_push;
uchar key_l;
void key_scan()
{
P2=P2&0x07;
if((P2&0x07)==0x07)
{
if((key_l>2)&(key_l<120))
key=key_push;
key_l=0;
}
else
{
key_push=P2&0x07;
key_l++;
if(key_l>120)
{
key=key_push;
key_l=key_l-30;
}
}
}
void process(uchar current_key)
{
switch (current_key)
{
case FUNCTION:
{
key_enable=true;
function_count=function_count+1;
if((alarm_flag==false)&(function_count==4))
function_count=function_count+2;
if(function_count>=9)
function_count=1;
}
break;
case UP:
{
if(function_count==1)
{
sec++;
if(sec>=60)
sec=0;
write_byte(WRITE_SEC_ADD,hex2bcd[sec]);
write_byte(WRITE_MIN_ADD,hex2bcd[min]);
}
if(function_count==2)
{
min++;
if(min>=60)
min=0;
write_byte(WRITE_MIN_ADD,hex2bcd[min]);
}
else if(function_count==3)
{
hour++;
if(hour>=24)
hour=0;
write_byte(WRITE_HOUR_ADD,hex2bcd[hour]);
}
else if(function_count==4)
{
clk_min++;
if(clk_min>=60)
clk_min=0;
}
else if(function_count==5)
{
clk_hour++;
if(clk_hour>=24)
clk_hour=0;
}
else if(function_count==6)
{
date++;
if(date>=31)
date=0;
write_byte(WRITE_DATE_ADD,hex2bcd[date]);
}
else if(function_count==7)
{
month++;
if(month>=13)
month=1;
write_byte(WRITE_MONTH_ADD,hex2bcd[month]);
}
else if(function_count==8)
{
year++;
if(year>99)
year=0;
write_byte(WRITE_YEAR_ADD,hex2bcd[year]);
}
}
break;
case DOWN:
{
if(function_count==1)
{
if(sec==0)
sec=60;
--sec;
write_byte(WRITE_SEC_ADD,hex2bcd[sec]);
}
if(function_count==2)
{
if(min==0)
min=60;
--min;
write_byte(WRITE_MIN_ADD,hex2bcd[min]);
}
else if(function_count==3)
{
if(hour==0)
hour=24;
--hour;
write_byte(WRITE_HOUR_ADD,hex2bcd[hour]);
}
else if(function_count==4)
{
if(clk_min==0)
clk_min=60;
--clk_min;
}
else if(function_count==5)
{
if(clk_hour==0)
clk_hour=24;
--clk_hour;
}
else if(function_count==6)
{
if(date==0)
date=31;
--date;
write_byte(WRITE_DATE_ADD,hex2bcd[date]);
}
else if(function_count==7)
{
if(month==1)
month=13;
--month;
write_byte(WRITE_MONTH_ADD,hex2bcd[month]);
}
else if(function_count==8)
{
if(year==0)
year=100;
--year;
write_byte(WRITE_YEAR_ADD,hex2bcd[year]);
}
}
break;
case ALARM:
{
alarm_flag=(~alarm_flag);
}
break;
default:
break;
}
}
void key_task()
{
key_scan();
if(key==0)
{
wait_time=wait_time+1;
if(wait_time==600)
{
wait_time=0;
key_enable=false;
function_count=0;
}
}
else
wait_time=0;
if(function_count!=0)
{
flash_count++;
if(flash_count<15)
flash_flag=true;
else if((flash_count>15)&&(flash_count<30))
flash_flag=false;
if(flash_count>=30)
flash_count=0;
}
process(key);
key=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -