📄 key.h
字号:
/**************************************************/
/*
/*程序上部分为日历按键设置,下部分为闹钟按键设置
/*
/*
/**************************************************/
#ifndef _Key
#define _Key
/**********************预定义*********************/
#define uchar unsigned char
#define function 0x01
#define up 0x02
#define down 0x03
#define true 0x04
#define null 0
/********************按键定义*********************/
sbit function_key=P3^4;
sbit up_key=P3^5;
sbit down_key=P3^6;
sbit true_key=P3^7;
sbit BELL=P2^0;
/*********************自定义变量********************/
uchar code dis0[]={" 功能设置 "};
uchar code dis1[]={"[UP] 重置时间"};
uchar code dis2[]={"[DOWN] 重置闹铃"};
uchar code dis3[]={"[ESC] 撤销操作"};
uchar pointer=0; //指向需要修改的数,让其反白
uchar pointer1=0;
uchar second=0; //新修改的秒
uchar minute=0; //新修改的分
uchar hour=0; //新修改的小时
uchar day=0; //新修改的日
uchar month=0; //新修改的月
uchar year1=20; //新修改的年前两位
uchar year2=0; //新修改的年后两位
uchar week=0; //新修改的星期
uchar alarmsecond=0; //新修改的闹钟秒
uchar alarmminute=0; //新修改的闹钟分
uchar alarmhour=0; //新修改的闹钟时
uchar count=0;
/******************************************************/
/* 函数名称:Delay_300ms(void)
/* 功 能:消抖用延时
/* 入口参数:无
/* 出口参数:无
/******************************************************/
void Delay_300ms(void)
{
unsigned char a,b,c;
for(c=123;c>0;c--)
for(b=116;b>0;b--)
for(a=9;a>0;a--);
}
/******************************************************/
/* 函数名称:Key_Idle()
/* 功 能:按键弹起判断
/* 入口参数:无
/* 出口参数:无
/******************************************************/
void Key_Idle()
{
while( ( P3 & 0xf0 ) != 0xf0 );
}
/******************************************************/
/* 函数名称:Key_Scan()
/* 功 能:按键扫描
/* 入口参数:无
/* 出口参数:按键状态
/******************************************************/
uchar Key_Scan()
{
if( (P3&0xf0)!=0xf0) //判断按键
{
Delay(4); //消除抖动
if( (P3&0xf0)!=0xf0)
{
switch(P3&0xf0)
{
case 0xe0: return true; break;
case 0xd0: return down; break;
case 0xb0: return up; break;
case 0x70: return function; break;
default : return null;
}
}
}
return null;
}
/******************************************************/
/* 函数名称:Key_FunctionFace()
/* 功 能:功能界面
/* 入口参数:无
/* 出口参数:无
/******************************************************/
void Key_FunctionFace()
{
LCD_Pos(0,0);
LCD_Wstr(dis0);
LCD_Pos(1,0);
LCD_Wstr(dis1);
LCD_Pos(2,0);
LCD_Wstr(dis2);
LCD_Pos(3,0);
LCD_Wstr(dis3);
}
/******************************************************/
/* 函数名称:Key_Data_Change(uchar *number,uchar a,uchar b,uchar c,
uchar d,uchar e,uchar f,uchar g,uchar h)
/* 功 能:日历重置刷新
/* 入口参数:无
/* 出口参数:无
/******************************************************/
void Key_Data_Change(uchar *number,uchar a,uchar b,uchar c,
uchar d,uchar e,uchar f,uchar g,uchar h)
{
LCD_Pos(0,0);
LCD_Wdat(0x4c);
LCD_Wdat(0x4c);
LCD_Pos(0,1);
LCD_Wdat(0x59);
LCD_Wdat(0xba);
LCD_Pos(0,7);
LCD_Wdat(0x0e);
LCD_Wdat(0x0e);
LCD_Pos(0,3);
LCD_Wdat(number[g/10]);
LCD_Wdat(number[g%10]);
LCD_Pos(0,4);
LCD_Wdat(number[h/10]);
LCD_Wdat(number[h%10]);
LCD_Pos(0,7);
LCD_Wdat(0x0e);
LCD_Wdat(0x0e);
LCD_Pos(1,0);
LCD_Wdat(number[e/10]);
LCD_Wdat(number[e%10]);
LCD_Pos(1,1);
LCD_Wdat(0xd4);
LCD_Wdat(0xc2);
LCD_Pos(1,2);
LCD_Wdat(number[d/10]);
LCD_Wdat(number[d%10]);
LCD_Pos(1,3);
LCD_Wdat(0xc8);
LCD_Wdat(0xd5);
LCD_Pos(1,5);
LCD_Wdat(0xd0);
LCD_Wdat(0xc7);
LCD_Pos(1,6);
LCD_Wdat(0xc6);
LCD_Wdat(0xda);
LCD_Pos(1,7);
LCD_Wdat(number[f/10]);
LCD_Wdat(number[f%10]);
LCD_Pos(2,0);
LCD_Wdat(number[c/10]);
LCD_Wdat(number[c%10]);
LCD_Pos(2,1);
LCD_Wdat(':');
LCD_Wdat(number[b/10]);
LCD_Pos(2,2);
LCD_Wdat(number[b%10]);
LCD_Wdat(':');
LCD_Pos(2,3);
LCD_Wdat(number[a/10]);
LCD_Wdat(number[a%10]);
}
/******************************************************/
/* 函数名称:Key_Data_Photo()
/* 功 能:反白显示,pointer有所变化
/* 入口参数:无
/* 出口参数:
/******************************************************/
void Key_Data_Photo()
{
pointer++;
switch(pointer)
{
case 2: Photo_Display(3,0,1);break;
case 3: Photo_Display(4,0,1);break;
case 4: Photo_Display(0,1,1);break;
case 5: Photo_Display(2,1,1);break;
case 6: Photo_Display(7,1,1);break;
case 7: Photo_Display(0,2,1);break;
case 8: Photo_Display(1,2,2);break;
case 9: Photo_Display(3,2,1);break;
}
LCD_Wcmd(0x30);
}
/******************************************************/
/* 函数名称:Key_Decrease(uchar *number)
/* 功 能:日历重置-按键down,新修改数有所变化
/* 入口参数:number
/* 出口参数:无
/******************************************************/
void Key_Decrease(uchar *number)
{
if(pointer==2)
{
year1--;
if(year1>99)
{
year1=99;
}
Key_Data_Change(number,second,minute,hour,day,month,week,year1,year2);
}
if(pointer==3)
{
year2--;
if(year2>99)
{
year2=99;
}
Key_Data_Change(number,second,minute,hour,day,month,week,year1,year2);
}
if(pointer==4)
{
month--;
if(month<1)
{
month=12;
}
Key_Data_Change(number,second,minute,hour,day,month,week,year1,year2);
}
if(pointer==5)
{
day--;
if(day>31)
{
day=31;
}
Key_Data_Change(number,second,minute,hour,day,month,week,year1,year2);
}
if(pointer==6)
{
week--;
if(week>7)
{
week=7;
}
Key_Data_Change(number,second,minute,hour,day,month,week,year1,year2);
}
if(pointer==7)
{
hour--;
if(hour>24)
{
hour=23;
}
Key_Data_Change(number,second,minute,hour,day,month,week,year1,year2);
}
if(pointer==8)
{
minute--;
if(minute>60)
{
minute=59;
}
Key_Data_Change(number,second,minute,hour,day,month,week,year1,year2);
}
if(pointer==9)
{
second--;
if(second>60)
{
second=59;
}
Key_Data_Change(number,second,minute,hour,day,month,week,year1,year2);
}
if(pointer>9)
{
pointer=0;
}
}
/******************************************************/
/* 函数名称:Key_Increase(uchar *number)
/* 功 能:日历重置-按键down,新修改数有所变化
/* 入口参数:number
/* 出口参数:无
/******************************************************/
void Key_Increase(uchar *number)
{
if(pointer==2)
{
year1++;
if(year1>99)
{
year1=0;
}
Key_Data_Change(number,second,minute,hour,day,month,week,year1,year2);
}
if(pointer==3)
{
year2++;
if(year2>99)
{
year2=0;
}
Key_Data_Change(number,second,minute,hour,day,month,week,year1,year2);
}
if(pointer==4)
{
month++;
if(month>12)
{
month=1;
}
Key_Data_Change(number,second,minute,hour,day,month,week,year1,year2);
}
if(pointer==5)
{
day++;
if(day>31)
{
day=1;
}
Key_Data_Change(number,second,minute,hour,day,month,week,year1,year2);
}
if(pointer==6)
{
week++;
if(week>7)
{
week=1;
}
Key_Data_Change(number,second,minute,hour,day,month,week,year1,year2);
}
if(pointer==7)
{
hour++;
if(hour>23)
{
hour=0;
}
Key_Data_Change(number,second,minute,hour,day,month,week,year1,year2);
}
if(pointer==8)
{
minute++;
if(minute>59)
{
minute=0;
}
Key_Data_Change(number,second,minute,hour,day,month,week,year1,year2);
}
if(pointer==9)
{
second++;
if(second>59)
{
second=0;
}
Key_Data_Change(number,second,minute,hour,day,month,week,year1,year2);
}
if(pointer>9)
{
pointer=0;
}
}
/******************************************************/
/* 函数名称:New_Clock_Time(uchar *clock_time)
/* 功 能:更新clock_time
/* 入口参数:clock_time
/* 出口参数:无
/******************************************************/
void New_Clock_Time(uchar *clock_time)
{
clock_time[0]=second;
clock_time[1]=minute;
clock_time[2]=hour;
clock_time[3]=day;
clock_time[4]=month;
clock_time[5]=week;
clock_time[6]=year2;
clock_time[7]=year1;
}
/******************************************************/
/* 函数名称:Key_Data()
/* 功 能:日历重置
/* 入口参数:无
/* 出口参数:无
/******************************************************/
void Key_Data(uchar *number,uchar *clock_time)
{
LCD_Clear();
Key_Data_Change(number,second,minute,hour,day,month,week,year1,year2);
while(1)
{
switch(Key_Scan())
{
case function:
{
Key_Data_Photo();
break;
}
case down:
{
Delay_300ms();
Key_Decrease(number);
break;
}
case up:
{
Delay_300ms();
Key_Increase(number);
break;
}
case true:
{
New_Clock_Time(clock_time);
DS1302_Init(clock_time);
return;
}
}
}
}
/******************************************************/
/* 函数名称:Key_Alarm_Change(uchar *number,uchar a,uchar b,uchar c)
/* 功 能:闹钟重置刷新
/* 入口参数:number,a,b,c,
/* 出口参数:无
/******************************************************/
void Key_Alarm_Change(uchar *number,uchar a,uchar b,uchar c)
{
LCD_Pos(2,0);
LCD_Wdat(number[a/10]);
LCD_Wdat(number[a%10]);
LCD_Pos(2,1);
LCD_Wdat(':');
LCD_Wdat(number[b/10]);
LCD_Pos(2,2);
LCD_Wdat(number[b%10]);
LCD_Wdat(':');
LCD_Pos(2,3);
LCD_Wdat(number[c/10]);
LCD_Wdat(number[c%10]);
}
/******************************************************/
/* 函数名称:Key_Alarm_Photo()
/* 功 能:闹钟重置界面反白
/* 入口参数:无
/* 出口参数:无
/******************************************************/
void Key_Alarm_Photo()
{
pointer1++;
switch(pointer1)
{
case 2:Photo_Display(0,2,1);break;
case 3:Photo_Display(1,2,2);break;
case 4:Photo_Display(3,2,1);break;
}
LCD_Wcmd(0x30);
}
/******************************************************/
/* 函数名称:Key_Alarm_Photo()
/* 功 能:闹钟重置-down减少
/* 入口参数:number
/* 出口参数:无
/******************************************************/
void Key_Alarm_Decrease(uchar *number)
{
if(pointer1==2)
{
alarmhour--;
if(alarmhour>23)
{
alarmhour=23;
}
Key_Alarm_Change(number,alarmhour,alarmminute,alarmsecond);
}
if(pointer1==3)
{
alarmminute--;
if(alarmminute>59)
{
alarmminute=59;
}
Key_Alarm_Change(number,alarmhour,alarmminute,alarmsecond);
}
if(pointer1==4)
{
alarmsecond--;
if(alarmsecond>59)
{
alarmsecond=59;
}
Key_Alarm_Change(number,alarmhour,alarmminute,alarmsecond);
}
}
/******************************************************/
/* 函数名称:Key_Alarm_Increase(uchar *number)
/* 功 能:闹钟重置-up增加
/* 入口参数:number
/* 出口参数:无
/******************************************************/
void Key_Alarm_Increase(uchar *number)
{
if(pointer1==2)
{
alarmhour++;
if(alarmhour>23)
{
alarmhour=0;
}
Key_Alarm_Change(number,alarmhour,alarmminute,alarmsecond);
}
if(pointer1==3)
{
alarmminute++;
if(alarmminute>59)
{
alarmminute=0;
}
Key_Alarm_Change(number,alarmhour,alarmminute,alarmsecond);
}
if(pointer1==4)
{
alarmsecond++;
if(alarmsecond>59)
{
alarmsecond=0;
}
Key_Alarm_Change(number,alarmhour,alarmminute,alarmsecond);
}
}
/******************************************************/
/* 函数名称:Key_Alarm(uchar *number)
/* 功 能:闹钟重置
/* 入口参数:number
/* 出口参数:无
/******************************************************/
void Key_Alarm(uchar *number)
{
LCD_Clear();
Key_Alarm_Change(number,alarmhour,alarmminute,alarmsecond);
while(1)
{
switch(Key_Scan())
{
case function:
{
Key_Alarm_Photo();
break;
}
case down:
{
Delay_300ms();
Key_Alarm_Decrease(number);
break;
}
case up:
{
Delay_300ms();
Key_Alarm_Increase(number);
break;
}
case true:
{
return;
}
}
}
}
/******************************************************/
/* 函数名称:Key_Function()
/* 功 能:按键功能选择
/* 入口参数:无
/* 出口参数:无
/******************************************************/
void Key_Function(uchar *number,uchar *clock_time)
{
while(1)
{
switch(Key_Scan())
{
case up:
{
Key_Data(number,clock_time);
}
case down:
{
Key_Alarm(number);
}
case true:
{
LCD_Clear();
return;
}
default:Key_FunctionFace();
}
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -