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

📄 deal.h

📁 利用时间片思想设计的一个AVR单片机的时钟程序
💻 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 + -