⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key.h

📁 万年历
💻 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 + -