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

📄 key.c

📁 nokia5110智能电子钟的设计ds1302+ds18b20+stc12c5a60s2
💻 C
字号:
/**************************************************************************************
*		         			子程序:底层程序     								      *			  					  
*						    功能:按键处理,键值显示;								  *
*     								      											  *
*																					  *
***************************************************************************************/
# include "main.h"
# include "ds1302.h"
# include "nokia5110.h"
# include "delay.h"
# include "printf.h"
# include "eeprom.h"
uchar set=0;	//按键选择标志位;
char key_flag=0;//按键加减标志位;
uchar menue=0;	//菜单选择标志位;
uchar ok=0;		//确认标志位;
char miao,fen,shi,ri,yue,zhou,nian;/*时间日期数值标志位;*/

uchar clocktable[5];	 //分,时,星期;
char hour=7;
char minute=30;
char week2=1;


void Delay10ms()		//@11.0592MHz
{
	unsigned char i, j;

	i = 108;
	j = 145;
	do
	{
		while (--j);
	} while (--i);
}



void key()
{
		  EA=0;
		 /*判断选择按键是否按下;如果按下了当松开的时候让背光打开;set++;*/
		 if(keyswitch==0)
		 {	
		  Delay10ms();
			if(keyswitch==0)   
			{  
				Delay10ms();
				while(keyswitch==0);				
				LCD_BLA=1;
				if(set>8)set=0;
				set++;	
			}
		}



	 	/*up和down按键的检测;加减标志位*/
		if(keyup==0)
		{	Delay10ms();
			if(keyup==0)	
			{ 	
			LCD_BLA=1;			
			Delay10ms();
			while(keyup==0);			
			 
			 key_flag++;
			}
		}

		if(keydown==0)
		{	Delay10ms();
			if(keydown==0)
			{  
			LCD_BLA=1;
			Delay10ms();
			while(keydown==0);		
	
			key_flag--;
			}
		}
		 if(keymenue==0)
		{
		Delay10ms();
		if(keymenue==0)	  //菜单选择标志位;
		{  	   			
		   Delay10ms();
		while(keymenue==0);					
		  LCD_BLA=1;
		  menue++;
		  if(menue>3)menue=0;
		   
		}
		} if(keyok==0)
		 {
		  Delay10ms();
		  if(keyok==0)	   //确认标志位;
		  {	Delay10ms();		 			
		  while(keyok==0);
		  ok++;
		  if(ok>1)ok=0;
		  set=0;LCD_BLA=0;TR0 = 0;
		  }
		  }
	   if(set>=2)TR0 = 0;
	   EA=1;
}

void set_date_time()

{
if(set==2)
{	
	
//	while(keyup==0|keydown==0);
	{	
	
		miao=l_tmpdisplay[10]*10+l_tmpdisplay[11];
		miao=miao+key_flag;
		if((key_flag<0)&(miao==0))miao=59;
		if(miao>59)miao=0;	
		miao=miao%10+(miao/10)*16;

		Write_Ds1302(0x8E,0x00);
		Write_Ds1302(0x80,miao);
		Write_Ds1302(0x8E,0x80);

	}

	
}

if(set==3)
{	 	
//   while(keyup==0||keydown==0);
   {

	fen=l_tmpdisplay[8]*10+l_tmpdisplay[9];
	fen=fen+key_flag;
	if(fen>59)
	{
	fen=0;
	}

	if((key_flag<0)&&(fen<0))
	{
	fen=59;
	}

	
	fen=fen%10+(fen/10)*16;
	
	Write_Ds1302(0x8E,0x00);
	Write_Ds1302(0x82,fen);
	Write_Ds1302(0x8E,0x80);
	}

}
if(set==4)
{	
// while(keyup==0||keydown==0);

{
	shi=l_tmpdisplay[6]*10+l_tmpdisplay[7];
	shi=shi+key_flag;
	if(shi>23)shi=0;
	if((key_flag<0)&&(shi<0))shi=23;
    shi=shi%10+(shi/10)*16;

	Write_Ds1302(0x8E,0x00);
	Write_Ds1302(0x84,shi);
	Write_Ds1302(0x8E,0x80);
	}	
}

if(set==5)
{   
//   while(keyup==0||keydown==0);
   {
    ri=l_tmpdisplay[4]*10+l_tmpdisplay[5];
	ri=ri+key_flag;
	if(ri>31)ri=1;
	if((key_flag<0)&&(ri<1))ri=31;
	ri=ri%10+(ri/10)*16;

	Write_Ds1302(0x8E,0x00);
	Write_Ds1302(0x86,ri);
	Write_Ds1302(0x8E,0x80);
	}	
}
if(set==6)
{	
//while(keyup==0||keydown==0);
{
    yue=l_tmpdisplay[2]*10+l_tmpdisplay[3];
	yue=yue+key_flag;
	if(yue>12)yue=1;
	if((key_flag<0)&&(yue<1))yue=12;
	yue=yue%10+(yue/10)*16;

	Write_Ds1302(0x8E,0x00);
	Write_Ds1302(0x88,yue);
	Write_Ds1302(0x8E,0x80);
	}	
}
if(set==7)
{	
//while(keyup==0||keydown==0);

{
	zhou=l_tmpdisplay[12];
	zhou=zhou+key_flag;
	if(zhou>7)zhou=1;
	if((key_flag<0)&&(zhou<1))zhou=7;
	zhou=zhou%10+(zhou/10)*16;

	Write_Ds1302(0x8E,0x00);
	Write_Ds1302(0x8A,zhou);
	Write_Ds1302(0x8E,0x80);
	}	
}
if(set==8)
{	
//	while(keyup==0||keydown==0);
	{
	nian=l_tmpdisplay[0]*10+l_tmpdisplay[1]+key_flag;;
	if(nian>79)nian=0;
	if((key_flag<0)&&(nian<0))nian=79;
	
	nian=nian%10+(nian/10)*16;

	Write_Ds1302(0x8E,0x00);
	Write_Ds1302(0x8C,nian);
	Write_Ds1302(0x8E,0x80);

	}
		
}
key_flag=0;	
		   
	
}

void caidan()
{
	   uchar counter;
	   uchar function;
		/*光标显示位置控制*/
		if(menue==0)
		{
		LCD_write_hanzi(0,4,10);Delay1ms(120);LCD_write_hanzi(0,0,3);Delay1ms(120);LCD_write_hanzi(0,2,10);LCD_write_hanzi(4,0,10);
		}
		else if(menue==1)
		{
		LCD_write_hanzi(0,0,10);Delay1ms(120);LCD_write_hanzi(0,2,3);Delay1ms(120);LCD_write_hanzi(0,4,10);LCD_write_hanzi(4,0,10);
		}
		else if(menue==2)
		{
		LCD_write_hanzi(0,2,10);Delay1ms(120);LCD_write_hanzi(0,4,3);Delay1ms(120);LCD_write_hanzi(0,0,10);LCD_write_hanzi(4,0,10);
		}
		else if(menue==3) 
		{LCD_write_hanzi(0,4,10);Delay1ms(120);LCD_write_hanzi(0,0,10);Delay1ms(120);LCD_write_hanzi(0,2,10);LCD_write_hanzi(4,0,28);}
		else
		{
		LCD_write_hanzi(0,4,10);Delay1ms(120);LCD_write_hanzi(0,0,3);Delay1ms(120);LCD_write_hanzi(0,2,10);LCD_write_hanzi(4,0,10);
		}
	 	

		for(function=0;function<2;function++)
		{
		LCD_write_hanzi(function+1,0,function+4);
		LCD_write_hanzi(function+1,2,function+6);
		LCD_write_hanzi(function+1,4,function+8);
		}

   		if(set<2)
	{	 
		TR0 = 1;
		if(TF0==1)
		{
			counter++;
			TF0=0;
		}
		if(counter==100)
		{
			
		 	counter=0;LCD_BLA=0;TR0 = 0;
			if(menue==0)ok=1;
		} 
    } 



}
/*闹钟程序	*/



void clock()
{

	Read_RTC();//读取时钟;
	data_change();//时钟数据处理
	
if(set==2)
{	
	
//		while(keyup==0||keydown==0);
		{	
		
			minute+=key_flag;
			if((key_flag<0)&(minute==0))minute=59;
			if(minute>59)minute=0;


			EA=0;//使用iap功能时关闭中断;
			hour=R_EROM(1,2);//读闹钟小时数据;
			week2=R_EROM(1,3);//读闹钟分数据;
		   	C_EROM(1);
			W_EROM(1,1,minute);	//写闹钟分数据;
			W_EROM(1,2,hour); //写闹钟小时数据;
			W_EROM(1,3,week2);//写闹钟星期数据;
			EA=1;//不使用iap功能时打开中断;
		}
  key_flag=0;
	
}

if(set==3)
{	 	
//	   while(keyup==0||keydown==0);
	   {
		hour=hour+key_flag;
		if(hour>23)hour=0;
		if((key_flag<0)&&(hour<0))hour=23;

		}
			EA=0;//使用iap功能时关闭中断 
			minute=R_EROM(1,1);
			week2=R_EROM(1,3);
			C_EROM(1);
			W_EROM(1,1,minute);
			W_EROM(1,2,hour);
			W_EROM(1,3,week2);
		    EA=1;//不使用iap功能时打开中断;

	key_flag=0;

}
if(set==4)
{	
//	 while(keyup==0||keydown==0);
	
	{
	
		week2=week2+key_flag;
		if(week2>7)week2=1;
		if((key_flag<0)&&(week2<1))week2=7;

	}
			EA=0;//使用iap功能时关闭中断
			minute=R_EROM(1,1);
			hour=R_EROM(1,2);
		
			C_EROM(1);
			W_EROM(1,1,minute);
			W_EROM(1,2,hour);
			W_EROM(1,3,week2);
			EA=1;//不使用iap功能时打开中断;
key_flag=0;	
}	





		EA=0;//使用iap功能时关闭中断
	    minute=R_EROM(1,1);
		hour=R_EROM(1,2);
		week2=R_EROM(1,3);
		EA=1;//不使用iap功能时打开中断;

	  clocktable[0]=minute/10;//分十位;
	  clocktable[1]=minute%10;//分个位
	  clocktable[2]=hour/10;  //时十位
	  clocktable[3]=hour%10;  //时个位
	  clocktable[4]=week2;	  //星期;


	LCD_write_hanzi(2,0,28);

	LCD_write_shu(1,2,clocktable[2]);
	LCD_write_shu(2,2,clocktable[3]);//时
		
	LCD_write_shu(3,2,64);

	LCD_write_shu(4,2,clocktable[0]);
	LCD_write_shu(5,2,clocktable[1]);//分;


	if(clocktable[4]==1)
	{

		LCD_write_6x8shu(10,3,23);
		LCD_write_6x8shu(11,3,25);
		LCD_write_6x8shu(12,3,24);	
	}
	if(clocktable[4]==2)
	{
		LCD_write_6x8shu(10,3,30);
		LCD_write_6x8shu(11,3,31);
		LCD_write_6x8shu(12,3,15);	
	}

	if(clocktable[4]==3)
	{
	
		LCD_write_6x8shu(10,3,33);
		LCD_write_6x8shu(11,3,15);
		LCD_write_6x8shu(12,3,14);	
	}

	if(clocktable[4]==4)
	{
	
		LCD_write_6x8shu(10,3,30);
		LCD_write_6x8shu(11,3,18);
		LCD_write_6x8shu(12,3,31);	
	}

	if(clocktable[4]==5)
	{

		LCD_write_6x8shu(10,3,16);
		LCD_write_6x8shu(11,3,28);
		LCD_write_6x8shu(12,3,19);		
	}

	if(clocktable[4]==6)
	{

		LCD_write_6x8shu(10,3,29);
		LCD_write_6x8shu(11,3,11);
		LCD_write_6x8shu(12,3,30);
	}

	if(week2==7)
	{
		LCD_write_6x8shu(10,3,29);
		LCD_write_6x8shu(11,3,31);
		LCD_write_6x8shu(12,3,24);	
	}


switch(set)
	{
	case 0: LCD_write_6x8shu(10,4,96);LCD_write_6x8shu(11,4,96);LCD_write_6x8shu(12,4,96);LCD_write_6x8shu(13,4,96);break;

	case 1: LCD_write_6x8shu(10,4,96);LCD_write_6x8shu(11,4,96);LCD_write_6x8shu(12,4,96);LCD_write_6x8shu(13,4,96);break;

	case 2:	Delay100ms();LCD_write_shu(4,2,76);LCD_write_shu(5,2,76);Delay100ms();			 LCD_write_6x8shu(10,4,96);LCD_write_6x8shu(11,4,23);LCD_write_6x8shu(12,4,45);LCD_write_6x8shu(13,4,50);break;

	case 3: Delay100ms();LCD_write_shu(1,2,76);LCD_write_shu(2,2,76);Delay100ms();			LCD_write_6x8shu(10,4,18);LCD_write_6x8shu(11,4,51);LCD_write_6x8shu(12,4,57);LCD_write_6x8shu(13,4,54);break;

	case 4:	Delay100ms();LCD_write_6x8shu(10,3,98);LCD_write_6x8shu(11,3,98);LCD_write_6x8shu(12,3,98);Delay100ms();			LCD_write_6x8shu(10,4,33);LCD_write_6x8shu(11,4,41);LCD_write_6x8shu(12,4,41);LCD_write_6x8shu(13,4,47);break;

	default:LCD_write_6x8shu(10,4,96);LCD_write_6x8shu(11,4,96);LCD_write_6x8shu(12,4,96);LCD_write_6x8shu(13,4,96);set=0;break;
	}


	

}

void checkclock()
{
	key();
	if((hour==(l_tmpdisplay[6]*10+l_tmpdisplay[7]))&&(minute==(l_tmpdisplay[8]*10+l_tmpdisplay[9]))&&(week2==l_tmpdisplay[12])&&(set==0))
	{ beep=0;}
	else 
	beep=1;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -