📄 deal.h
字号:
#define KEYPIN PINC
#define KEYDDR DDRC
#define KEYPORT PORTC
#define KEYMASK 0x0f
uchar KeyTask = 0;
uchar Keybuf = 0;
uchar Keydata = 0;
void InitalKey(void)
{ KEYDDR = KEYMASK; //高4位输入,低4位输出
KEYPORT = ~KEYMASK; //输入口带上拉,输出口为低电平
}
/**********************************************************
*原型:uchar ScanKey(void)
*功能:扫描键盘模块
*说明:采用算法进行扫描,不循环等待。
*参数:无
*返回:uchar按键数据
**********************************************************/
uchar ScanKey(void)
{ uchar temp,i;
switch(KeyTask)
{ case 0:/***有按键按下吗?***/
KEYPORT = ~KEYMASK;
if( (KEYPIN&(~KEYMASK)) != (~KEYMASK) )
{ KeyTask=1; } /***延时一个系统时间***/
break;
case 1: /***键按下去抖延时***/
KeyTask=2; /***延时一个系统时间***/
break;
/***延时一个系统时间***/
case 2: /***键值判断***/
if( (KEYPIN&(~KEYMASK)) != (~KEYMASK) )
{ temp = 0x01;
for( i=0; i<4; i++ )
{ KEYPORT |= KEYMASK; //输出全为高电平
KEYPORT &= ~temp; //输出某个为低电平
asm("nop"); asm("nop"); asm("nop"); asm("nop");
if( (KEYPIN&(~KEYMASK)) != (~KEYMASK) )
{ Keybuf = (KEYPIN&(~KEYMASK)) + temp;
KeyTask = 3; KEYPORT = ~KEYMASK; return(1);
}
temp = temp<<1;
}
}
KEYPORT = ~KEYMASK;
KeyTask=0; /*抖动*/
break;
case 3: /***有松开吗?***/
if( (KEYPIN&(~KEYMASK)) == (~KEYMASK) )
{ KeyTask=4;
}
else
{ Keycheck++;
if (Keycheck>=110)
{ Keycheck = 100; return(1); }
}
break;
case 4: /***键松开去抖延时***/
KeyTask=5; /***延时一个系统时间***/
break;
case 5: /***键值判断***/
if( (KEYPIN&(~KEYMASK)) == (~KEYMASK) )
{ KeyTask=0; Keycheck = 0; } /*去按键检测开始*/
else
{ KeyTask=3; } /*抖动*/
break;
}
return(0); //没检测到按键
}
int Isleapyear(int year)
{
if ((year%4==0)&&(year%100!=0)||(year%400==0))
return (1);
else
return (0);
}
void Adjust(void)
{int i=8;
switch(Position)
{
case 0:LCD_write_char(0x0c,0);
break;
case 1:
Time.year++;
break;
case 2:
Time.month++;
if(Time.month>=13) Time.month=1;
break;
case 3:
Time.day++;
switch(Time.month)
{
case 1:if (Time.day==32) Time.day=1;
break;
case 2:if(Isleapyear(Time.year)==1)
{ if (Time.day==30) Time.day=1; }
else if(Time.day==29)
Time.day=1;
break;
case 3:if (Time.day==32) Time.day=1;
break;
case 4:if (Time.day==31) Time.day=1;
break;
case 5:if (Time.day==32) Time.day=1;
break;
case 6:if (Time.day==31) Time.day=1;
break;
case 7:if (Time.day==32) Time.day=1;
break;
case 8:if (Time.day==32) Time.day=1;
break;
case 9:if (Time.day==31) Time.day=1;
break;
case 10:if (Time.day==32) Time.day=1;
break;
case 11:if (Time.day==31) Time.day=1;
break;
case 12:if (Time.day==32) Time.day=1;
break;
default:{}break;
}
break;
case 4:
Time.hour++;
if(State==0)
{if (Time.hour>=24) Time.hour=0;}
else if(Time.hour>=13)
{Time.hour=0;}
break;
case 5:
Time.minute++;
if (Time.minute>=60) Time.minute=0;
break;
case 6:
Time.second=0;
break;
default:
break;
}
}
void DealKey(void)
{
switch( Keybuf )
{ case KEYONE: Position++;
if (Position==7) Position=0;
if(Position!=0)
{
LCD_write_char(0x02,0);
switch(Position)
{case 1:LCD_write_char(0x83,0);
LCD_write_char(0x0d,0);
break;
case 2:LCD_write_char(0x86,0);
LCD_write_char(0x0d,0);
break;
case 3:LCD_write_char(0x89,0);
LCD_write_char(0x0d,0);
break;
case 4:LCD_write_char(0xc1,0);
LCD_write_char(0x0d,0);
break;
case 5:LCD_write_char(0xc4,0);
LCD_write_char(0x0d,0);
break;
case 6:LCD_write_char(0xc7,0);
LCD_write_char(0x0d,0);
break;
default:{}break;
}
}
break;
case KEYTWO: Adjust();
break;
case KEYTHREE:if (State==0)
{State=1;}
else
{State=0;}
break;
default:{}break;
}
}
void DispTime(void)
{
LCD_write_uint8(0, 0,Time.year, 4);
LCD_write_string(4,0,"-");
LCD_write_uint8(5, 0, Time.month, 2);
LCD_write_string(7,0,"-");
LCD_write_uint8(8, 0, Time.day, 2);
if(State==0)
{LCD_write_uint8(0, 1, Time.hour, 2);}
if((State==1)&&(Time.hour>=13))
{LCD_write_uint8(0, 1, Time.hour-12, 2);}
else
{LCD_write_uint8(0,1,Time.hour,2);}
LCD_write_string(2,1,":");
LCD_write_uint8(3, 1, Time.minute, 2);
LCD_write_string(5,1,":");
LCD_write_uint8(6, 1, Time.second, 2);
if(State==1)
{ if(Time.hour>=13)
{LCD_write_string(9,1,"PM");}
else
{LCD_write_string(9,1,"AM");}
}
else
{LCD_write_string(9,1," ");}
}
void TimeAdd(void)
{if(Time.year>2100)
{Time.year=2007;}
Time.second++;
if( Time.second == 60 )
{ Time.second = 0; Time.minute++;
if( Time.minute == 60 )
{ Time.minute = 0; Time.hour++;
if( Time.hour == 24 )
{ Time.hour = 0; Time.day++;
//////////////////////////////////////////////
if( Time.month == 2 )
{ if( (Time.year%4) == 0 ) //闰年28天
{ if(Time.day==29){Time.day=0;Time.month++;if(Time.month==12){Time.month=0;Time.year++;}} }
else //29天
{ if(Time.day==30){Time.day=0;Time.month++;if(Time.month==12){Time.month=0;Time.year++;}} }
}
else if( (Time.month==4) || (Time.month==6) || (Time.month==9) || (Time.month==11) )
{ if(Time.day==31){Time.day=0;Time.month++;if(Time.month==12){Time.month=0;Time.year++;}} }
else
{ if(Time.day==32){Time.day=0;Time.month++;if(Time.month==12){Time.month=0;Time.year++;}} }
//////////////////////////////////////////////
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -