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

📄 keyinitial.c

📁 在采样的基础上实现数码管显示和利用TI公司的FFT算法进行运算
💻 C
字号:
#include "2407.h"
#include "zimo.h"
#include "System.h"
#include "2407.h"
#include "zimo.h"
#include "System.h"
int KeyScan() {
	unsigned int KeyCount;
	*PADATDIR = (*PADATDIR & 0XC03F) | 0XC03F;
//	LCDDELAY;
	KeyCount = *PADATDIR & 0X0038;
	if(KeyCount==0x0038)
		KeyCount = 0;
	else
		KeyCount = 1;
	if(KeyCount==1) {
		KeyDelay();
		KeyDelay();
		KeyCount = *PADATDIR & 0X0038;
		if(KeyCount == 0x0038) 
			KeyCount = 0 ;
		else
			KeyCount = 1;
	}
	
	return(KeyCount);
}


int GetKeyCode(void) 
{
	int KeyCode,tempCode;
	*PADATDIR=0xC0FF;
//	LCDDELAY;
//	LCDDELAY;
    KEY_WAIT;
    KEY_WAIT;
	*PADATDIR = (*PADATDIR & 0XC0BF) | 0XC0BF;
//	LCDDELAY;
    KEY_WAIT;
	KeyCode = *PADATDIR & 0X00B8;
	if(KeyCode == 0x00B8)
	  	KeyCode = Keyline();
	  	
	while(1)                     //等待释放
	{
//	  *PADATDIR = (*PADATDIR & 0XC03F) | 0XC03F;
      *PADATDIR = 0x0C03F;
	  tempCode=*PADATDIR & 0X0038;
	  if(tempCode==0x0038)
	     break;
	}
	 return(KeyCode); 
}

int Keyline()		{
	 int b;
     *PADATDIR = (*PADATDIR&0XC078)|0XC078;
  //   LCDDELAY;
     KEY_WAIT;
     b= *PADATDIR&0X0038;
	  
	 return(b);
}

//当页面参数为0时进行如下处理。处理过程中根据光标位置的不同
//六个键的功能也不一样。
int* KeyServePage0(int code, int *CsrFlag )	{
	switch(code)	{
	
		case KeyEnter: 
			if (*CsrFlag == 0)	{
				  // SimuCsr(30,202,98,222,LCD_SET);
				   FillRect(29,201,99,223,LCD_TOG);
				   *CsrFlag=1;
			}
			else	if (*CsrFlag== 1)	{
				CLEAR();
				PageNum = PAGE_ONE();
			}
			else 	if (*CsrFlag == 2)	{
				CLEAR();
				PageNum = PAGE_TWO();
			}
			else 	if (*CsrFlag == 3)	{
			    *CsrFlag=1;
				CLEAR();
				PageNum = PAGE_THREE(1);   //根据CsrFlag,默认选中第一页面
			  //  SimuCsr(30,220,98,236,LCD_SET);
			    FillRect(29,219,99,237,LCD_TOG);   //选中第一页
			    
							}			
			break;
		case KeyEsc:
			break;
		case KeyUp:
			break;
		case KeyDown:
			break;
		case KeyRight:
			if (*CsrFlag == 1)	{
			
			//	SimuCsr(30,202,98,222,LCD_CLR);
			//	SimuCsr(126,202,192,222,LCD_SET);
			    FillRect(29,201,99,223,LCD_TOG);
			    FillRect(125,201,195,223,LCD_TOG);
				*CsrFlag=2;
			}
			else	{ 
				if (*CsrFlag == 2)	{
			//	SimuCsr(126,202,192,222,LCD_CLR);
			//	SimuCsr(222,202,290,222,LCD_SET);
			    FillRect(125,201,195,223,LCD_TOG);
			    FillRect(221,201,291,223,LCD_TOG);
				*CsrFlag=3;
			}
			else	{ 
				if (*CsrFlag == 3)	{
			//	SimuCsr(222,202,290,222,LCD_CLR);
		   //	SimuCsr(30,202,98,222,LCD_SET);
		        FillRect(221,201,291,223,LCD_TOG);
		        FillRect(29,201,99,223,LCD_TOG);
				*CsrFlag=1;
					}
				}
		    }
			break;
		case KeyLeft:		
			if(*CsrFlag== 1)	{
			   // SimuCsr(30,202,98,222,LCD_CLR);
			  //  SimuCsr(222,202,290,222,LCD_SET);
			    FillRect(29,201,99,223,LCD_TOG);
			    FillRect(221,201,291,223,LCD_TOG);
				*CsrFlag=3;
			}
			else if (*CsrFlag == 2)	{
			//	SimuCsr(126,202,192,222,LCD_CLR);
			//	SimuCsr(30,202,98,222,LCD_SET);
			    FillRect(125,201,195,223,LCD_TOG);
			    FillRect(29,201,99,223,LCD_TOG);
				*CsrFlag=1;
			}
			else if (*CsrFlag == 3)	{
			//	SimuCsr(222,202,290,222,LCD_CLR);
			//	SimuCsr(126,202,192,222,LCD_SET);
			    FillRect(221,201,291,223,LCD_TOG);
			    FillRect(125,201,195,223,LCD_TOG);
				*CsrFlag=2; 
			}
			break;
		default:
		 	break;
	}
	return(CsrFlag);
}
	
int* KeyServePage1(int code, int *CsrFlag )	{
	switch(code)	{
	
		case KeyEnter: 
//			SimuCsr(142,216,178,236);
			break;
		case KeyEsc:
			CLEAR();
		//	KeyDelay();
	    	PageNum = LCDPAGE0();
	    //	SimuCsr(30,202,98,222,LCD_SET);
	        FillRect(29,201,99,223,LCD_TOG);
	    	*CsrFlag=1;
			break;
		case KeyUp:
			break;
		case KeyDown:
			break;
		case KeyLeft:
			break;
		case KeyRight:
			break;
		default:
			break;
	}
	return(CsrFlag);
}

int* KeyServePage3(int code, int *CsrFlag )	{
	switch(code)	{
			case KeyEnter: 
		//	CLEAR();
		 //   FillRect(0,0,280,215,LCD_CLR);
		 // ShowFlagPage3=*CsrFlag;
		//	PageNum = PAGE_THREE();
		//	SimuCsr(30,220,98,236,LCD_SET);
			break;
		case KeyEsc:
			CLEAR();
	    	PageNum = LCDPAGE0();
	    //	SimuCsr(30,202,98,222,LCD_SET);
	        FillRect(29,201,99,223,LCD_TOG);
	    	*CsrFlag=1;
			break;
		case KeyUp:
			break;
		case KeyDown:
			break;
		case KeyRight:
		if (*CsrFlag == 1)	{
		        *CsrFlag = 2;
		        CLEAR();
			    PageNum = PAGE_THREE(2);
              //  SimuCsr(30,218,98,236,LCD_CLR);
			//	SimuCsr(126,220,192,236,LCD_SET);
			//   FillRect(29,219,99,237,LCD_TOG);
			   FillRect(125,219,195,237,LCD_TOG);
				
			}
			else	{ 
				if (*CsrFlag == 2)	{
				*CsrFlag = 3;
				CLEAR();
			    PageNum = PAGE_THREE(3);
			//	SimuCsr(222,220,290,236,LCD_SET);
			//   FillRect(125,219,195,237,LCD_TOG);
			   FillRect(221,219,291,237,LCD_TOG);
				
			}
			else	{ 
				if (*CsrFlag == 3)	{
				*CsrFlag = 1;
				CLEAR();
			    PageNum = PAGE_THREE(1);
			//	SimuCsr(30,220,98,236,LCD_SET);
			//	FillRect(221,219,291,237,LCD_TOG);
		        FillRect(29,219,99,237,LCD_TOG);
					}
				}
		    }
			break;
		case KeyLeft:
		if(*CsrFlag== 1)	{
		        *CsrFlag = 3;
				CLEAR();
			    PageNum = PAGE_THREE(3);
			//	SimuCsr(222,220,290,236,LCD_SET);
			//	FillRect(29,219,99,237,LCD_TOG);
			    FillRect(221,219,291,237,LCD_TOG);
			}
			else if (*CsrFlag == 2)	{
			    *CsrFlag = 1;
				CLEAR();
			    PageNum = PAGE_THREE(2);
			//  SimuCsr(30,220,98,236,LCD_SET);
			//	FillRect(125,219,195,237,LCD_TOG);
			    FillRect(29,219,99,237,LCD_TOG);
				
			}
			else if (*CsrFlag == 3)	{
			    *CsrFlag = 2;
				CLEAR();
			    PageNum = PAGE_THREE(1);
		//	    SimuCsr(126,220,192,236,LCD_SET);
		//		FillRect(221,219,291,237,LCD_TOG);
			    FillRect(125,219,195,237,LCD_TOG);
				
			}
			break;
		default:
			break;
	}
	return(CsrFlag);
}
//根据不同的页面标志,转入各自的键盘处理程序
int* KeyServe(int num, int code, int *CsrFlagPage0)	{
	switch(num)	{
		case 0:
			 KeyServePage0(code, CsrFlagPage0 );
			break;
		case 1:
		      KeyServePage1(code, CsrFlagPage0 );
			break;
		case 2:
			  KeyServePage2(code, CsrFlagPage0 );
			break;
		case 3:
			  KeyServePage3(code, CsrFlagPage0 );
			break;
		default:
			break;
	}
	
	return(CsrFlagPage0);
}


void KeyDelay(void)	{
	int i,j;
	for(j=0;j<100;j++)	{
		for(i=0;i<120;i++)	
			asm(" nop");
	}
}                          

⌨️ 快捷键说明

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