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

📄 keyboard.c

📁 ARM键盘驱动程序
💻 C
字号:

//*----------------------------------------------------------------------------
//*----------------------------------------------------------------------------
//* File Name           : lib_test_system_lcd.h
//* Object              : 键盘-针对测试系统-库函数文件
//*
//* 2003-7-20           : Creation
//*---------------------------------------------------------------------------
#include "lib_keyboard.h"




//*==============================================================================
//* Function Name       : key_open
//* Object              : 键盘初始化
//* Input Parameters    :  
//*
//* Output Parameters   : none
//*==============================================================================
void key_init()
{      
     //Key_Press=0;
	 LCD_Current_Interface=1;
	 LCD_set_Interface=1;	 
}


//*==============================================================================
//* Function Name       : key_open
//* Object              : 打开键
//* Input Parameters    : key_num 键号,在.h文件定义了7个键
//*
//* Output Parameters   : none
//*==============================================================================
void key_open(u_int key_num)
{ 
    
   if ( (key_num & KEY_SET)!=0)
   {
      at91_extirq_open(&IRQ0_DESC,
                       2,
                       AIC_SRCTYPE_EXT_NEGATIVE_EDGE,
                       key_set_irq_asm_handler); 
   }
   if ( (key_num & KEY_RETURN)!=0)
   {
       at91_extirq_open(&IRQ1_DESC,
                        2,
                        AIC_SRCTYPE_EXT_NEGATIVE_EDGE,
                        key_return_irq_asm_handler);     
   }   
   if ( (key_num & KEY_ADD)!=0)
   {
       at91_extirq_open(&IRQ4_DESC,
                        2,
                        AIC_SRCTYPE_EXT_NEGATIVE_EDGE,
                        key_add_irq_asm_handler); 
   }
   if ( (key_num & KEY_SUB)!=0)
   {
       at91_extirq_open(&IRQ2_DESC,
                        2,
                        AIC_SRCTYPE_EXT_NEGATIVE_EDGE,
                        key_sub_irq_asm_handler); 
   }
    if ( (key_num & KEY_LEFT)!=0)
   {
       at91_extirq_open(&IRQ3_DESC,
                        2,
                        AIC_SRCTYPE_EXT_NEGATIVE_EDGE,
                        key_left_irq_asm_handler); 
   }
   if ( (key_num & KEY_RIGHT)!=0)
   {
       at91_extirq_open(&IRQ5_DESC,
                        2,
                        AIC_SRCTYPE_EXT_NEGATIVE_EDGE,
                        key_right_irq_asm_handler); 
   }    
}

//*==============================================================================
//* Function Name       : key_open
//* Object              : 关闭键
//* Input Parameters    : key_num 键号,在.h文件定义了7个键
//*
//* Output Parameters   : none
//*==============================================================================
void key_close(u_int key_num)
{
   if ( (key_num & KEY_SET)!=0)
   {
       at91_extirq_close(&IRQ0_DESC); 
   }
   if ( (key_num & KEY_RETURN)!=0)
   {
       at91_extirq_close(&IRQ1_DESC);      
   }   
   if ( (key_num & KEY_ADD)!=0)
   {
       at91_extirq_close(&IRQ4_DESC); 
   }
   if ( (key_num & KEY_SUB)!=0)
   {
       at91_extirq_close(&IRQ2_DESC); 
   }
   if ( (key_num & KEY_LEFT)!=0)
   {
       at91_extirq_close(&IRQ3_DESC); 
   }
   if ( (key_num & KEY_RIGHT)!=0)
   {
       at91_extirq_close(&IRQ5_DESC); 
   } 
}


//*==============================================================================
//* Function Name       : key_set_irq_handler
//* Object              : key中断处理程序:---设置键---
//* Input Parameters    :  
//* Output Parameters   : none
//*==============================================================================
void key_set_irq_handler()
{     
     key_close(KEY_LEFT|KEY_RIGHT|KEY_RETURN|KEY_SET|KEY_ADD|KEY_SUB);
     int i;                            //1为设置界面
     switch(LCD_Current_Interface)
     {  
       case 1:
       		  ptr_bit=1;
              ptr_list=0;
              //LCD_CLEAR();
       		  show_cur_pic(LCD_Current_Interface,36,1);    //待修改
       		  require_pointer(LCD_Current_Interface,36, &Ptrlist);
       		  LCD_set_Interface=0;    //允许改变
       		  //LCD_Current_Interface=1; 
       		  if(Ptrlist->choose_num==1) 
       		  	LCD_Current_Interface=2; 
       		  else if(Ptrlist->choose_num==2)
       		  	     LCD_Current_Interface=3;
       		  	   else if(Ptrlist->choose_num==3)
       		  	          LCD_Current_Interface=4;//频率调整
       		  	        else 
       		  	         LCD_Current_Interface=5;//相位调整
       		  LCD=0;
   		  	    
   		    	     		  
       break;       
       case 2:  
              ptr_bit=1;
              ptr_list=0;      
              LCD_CLEAR();
              lcd_disp_interface(2);          //频率设置界面
              for(i=0;i<return_max_array(2);i++)
	          {
	          	show_cur_pic(LCD_Current_Interface, i, 0);
	          }
              
              require_pointer(LCD_Current_Interface,0, &Ptrlist);
              if(Ptrlist->curtype==1)
 			  {
				 show_bit_num(LCD_Current_Interface, 0, 1, 1);
	          }
	         else
	     	     show_cur_pic(LCD_Current_Interface,0,1);
	     	     
	     	 LCD_Current_Interface=3;
             LCD_set_Interface=2;
             LCD=0;
	  break;
	  case 3:
	          ptr_bit=1;                    //相位设置界面
              ptr_list=0;
              LCD_CLEAR();
              lcd_disp_interface(3);
              for(i=0;i<return_max_array(3);i++)
	          {
	          	show_cur_pic(LCD_Current_Interface, i, 0);
	          }
                            
              require_pointer(LCD_Current_Interface,0, &Ptrlist);
              if(Ptrlist->curtype==1)
 			  {
				 show_bit_num(LCD_Current_Interface, 0, 1, 1);
	          } 
	          else
	     	     show_cur_pic(LCD_Current_Interface,0,1);
	     	  
	     	  LCD_Current_Interface=2;
              LCD_set_Interface=2;
              LCD=0;
	    break;              
       default:
              break;
      }     
      
     
     for (i=0;i<99999;i++){}   
     AIC_ICCR=0xffffffff; 
     key_open(KEY_LEFT|KEY_RIGHT|KEY_RETURN|KEY_SET|KEY_ADD|KEY_SUB);   
}
//*==============================================================================
//* Function Name       : key_return_irq_handler
//* Object              : key中断处理程序:----返回键:返回到主界面---
//* Input Parameters    :  
//* Output Parameters   : none
//*==============================================================================
void key_return_irq_handler()
{    
     key_close(KEY_LEFT|KEY_RIGHT|KEY_RETURN|KEY_SET|KEY_ADD|KEY_SUB);
     int i;
     //switch (LCD_Current_Interface)          //1主界面
     //{
       // case 1:
              //write_to_dataflash(2);  
              //trans_interface_nums(2);
              LCD_CLEAR();
              lcd_disp_interface(1);  //显示主界面
              //将频率相位设置界面的数据转换到主界面
              CovBit_to_Dec(1);
              CovBit_to_Dec(2);
              CovBit_to_Dec(3);
              if(LCD_Current_Interface==2||LCD_Current_Interface==3)
              {
              	Write_to_main_interface();
              }
              LCD=0;
              Write_to_fpgareg();
              if(LCD_Current_Interface==4)
              {
              	LCD=1;
              }
              if(LCD_Current_Interface==5)
              {
              	LCD=2;
              } 
              for(i=0;i<return_max_array(1);i++)
	          	{
	          		show_cur_pic(1, i, 0);           //待修改
	          	}                      
              
             
	          //Write_to_main_interface(1);
	          
              LCD_Current_Interface=1;
              LCD_set_Interface=1;  //不允许改变
              //break;
        
         //default:
             // break;
    // }  
     
     for (i=0;i<200000;i++){}  
     AIC_ICCR=0xffffffff;      
     key_open(KEY_LEFT|KEY_RIGHT|KEY_RETURN|KEY_SET|KEY_ADD|KEY_SUB);   
}
//*==============================================================================
//* Function Name       : key_sub_irq_handler
//* Object              : key中断处理程序:---减键---
//* Input Parameters    :  
//* Output Parameters   : none
//*==============================================================================
void key_sub_irq_handler()
{
     key_close(KEY_LEFT|KEY_RIGHT|KEY_RETURN|KEY_SET|KEY_ADD|KEY_SUB);
     int i;
         
     if((LCD_Current_Interface==2||LCD_Current_Interface==3)&&LCD_set_Interface==2)
     {  
        if(LCD_Current_Interface==2)
        {
        	change_curr_blank(3,ptr_list,ptr_bit,1);
        	for(i=0;i<36;i++)
        	{
        		if(i%6==0)
        		{
        			obpic2[i].choose_num=obpic3[i].choose_num;   obpic1[i].choose_num=obpic3[i].choose_num;
        		}       	
        	}
        }	
        else
        {
        	change_curr_blank(2,ptr_list,ptr_bit,1);
        	for(i=0;i<36;i++)
        	{
        		if(i%6==0)
        		{
        			obpic3[i].choose_num=obpic2[i].choose_num;   obpic1[i].choose_num=obpic2[i].choose_num;
        		}       	
        	}
        }
              
     }
     else
     {  
        if(LCD_set_Interface==0)
        {
     		change_curr_blank(1,36,ptr_bit,1);
     		require_pointer(1,36, &Ptrlist);
     		//LCD_Current_Interface=1;
        	//LCD_set_Interface=1;
       	 	if(Ptrlist->choose_num==1) 
       			LCD_Current_Interface=2; 
       		else if(Ptrlist->choose_num==2)
       		  	     LCD_Current_Interface=3;
       		  	   else if(Ptrlist->choose_num==3)
       		  	     LCD_Current_Interface=4;//频率调整
       		  	     else 
       		  	     LCD_Current_Interface=5;//相位调整
       	}	
     }	
     
     for (i=0;i<125000;i++){}  
     AIC_ICCR=0xffffffff;     
     key_open(KEY_LEFT|KEY_RIGHT|KEY_RETURN|KEY_SET|KEY_ADD|KEY_SUB);      
}

//*==============================================================================
//* Function Name       : key_add_irq_handler
//* Object              : key中断处理程序:---加键---
//* Input Parameters    :  
//* Output Parameters   : none
//*==============================================================================
void key_add_irq_handler()
{
     key_close(KEY_LEFT|KEY_RIGHT|KEY_RETURN|KEY_SET|KEY_ADD|KEY_SUB);
     int i;           
     
     if((LCD_Current_Interface==2||LCD_Current_Interface==3)&&LCD_set_Interface==2)
     { 
        if(LCD_Current_Interface==2)
        {
        	change_curr_blank(3,ptr_list,ptr_bit,0);
        	for(i=0;i<36;i++)
        	{
        		if(i%6==0)
        		{
        			obpic2[i].choose_num=obpic3[i].choose_num;   obpic1[i].choose_num=obpic3[i].choose_num;
        		}       	
        	}
        	/*obpic2[0].choose_num=obpic3[0].choose_num;   obpic1[0].choose_num=obpic3[0].choose_num;
        	obpic2[6].choose_num=obpic3[6].choose_num;   obpic1[6].choose_num=obpic3[6].choose_num;
        	obpic2[12].choose_num=obpic3[12].choose_num;   obpic1[12].choose_num=obpic3[12].choose_num;
        	obpic2[18].choose_num=obpic3[18].choose_num;   obpic1[18].choose_num=obpic3[18].choose_num;
        	obpic2[24].choose_num=obpic3[24].choose_num;   obpic1[24].choose_num=obpic3[24].choose_num;
        	obpic2[30].choose_num=obpic3[30].choose_num;   obpic1[30].choose_num=obpic3[30].choose_num; */      	
        }                                                 //针对2,3界面通道状态一致
        else
        {
        	change_curr_blank(2,ptr_list,ptr_bit,0); 
        	for(i=0;i<36;i++)
        	{
        		if(i%6==0)
        		{
        			obpic3[i].choose_num=obpic2[i].choose_num;   obpic1[i].choose_num=obpic2[i].choose_num;
        		}       	
        	}
        	/*obpic3[0].choose_num=obpic2[0].choose_num;   obpic1[0].choose_num=obpic2[0].choose_num;
        	obpic3[6].choose_num=obpic2[6].choose_num;   obpic1[6].choose_num=obpic2[6].choose_num;
        	obpic3[12].choose_num=obpic2[12].choose_num;   obpic1[12].choose_num=obpic2[12].choose_num;
        	obpic3[18].choose_num=obpic2[18].choose_num;   obpic1[18].choose_num=obpic2[18].choose_num;
        	obpic3[24].choose_num=obpic2[24].choose_num;   obpic1[24].choose_num=obpic2[24].choose_num;
        	obpic3[30].choose_num=obpic2[30].choose_num;   obpic1[30].choose_num=obpic2[30].choose_num;*/ 
        }
     }
     else
     {
     	if(LCD_set_Interface==0)
        {
     		change_curr_blank(1,36,ptr_bit,0);
     		require_pointer(1,36, &Ptrlist);
        	//LCD_set_Interface=1;
        	LCD_Current_Interface=1;
        	if(Ptrlist->choose_num==1) 
       			LCD_Current_Interface=2; 
         	else if(Ptrlist->choose_num==2)
       		  	     LCD_Current_Interface=3;
       		  	   else if(Ptrlist->choose_num==3)
       		  	     LCD_Current_Interface=4;//频率调整
       		  	     else 
       		  	     LCD_Current_Interface=5;//相位调整
       	}	
     }	
     
     for (i=0;i<125000;i++){}  
     AIC_ICCR=0xffffffff;     
     key_open(KEY_LEFT|KEY_RIGHT|KEY_RETURN|KEY_SET|KEY_ADD|KEY_SUB);
     
}
 

//*==============================================================================
//* Function Name       : key_left_irq_handler
//* Object              : key中断处理程序:---左移键---
//* Input Parameters    :  
//* Output Parameters   : none
//*==============================================================================
void key_left_irq_handler()
{
     key_close(KEY_LEFT|KEY_RIGHT|KEY_RETURN|KEY_SET|KEY_ADD|KEY_SUB);
     int i;
     
     if((LCD_Current_Interface==2||LCD_Current_Interface==3)&&LCD_set_Interface==2)
     { 
        if(LCD_Current_Interface==2)
        	jump_next_blank(3,&ptr_list,&ptr_bit,1);
        else 
        	jump_next_blank(2,&ptr_list,&ptr_bit,1);
     }
     
     for (i=0;i<125000;i++){}  
     AIC_ICCR=0xffffffff;          
     key_open(KEY_LEFT|KEY_RIGHT|KEY_RETURN|KEY_SET|KEY_ADD|KEY_SUB);        
}

//*==============================================================================
//* Function Name       : key_right_irq_handler
//* Object              : key中断处理程序:---右移键---
//* Input Parameters    :  
//* Output Parameters   : none
//*==============================================================================
void key_right_irq_handler()
{
     
     key_close(KEY_LEFT|KEY_RIGHT|KEY_RETURN|KEY_SET|KEY_ADD|KEY_SUB);
     int i;
     
     if((LCD_Current_Interface==2||LCD_Current_Interface==3)&&LCD_set_Interface==2)
     { 
        if(LCD_Current_Interface==2)
        	jump_next_blank(3,&ptr_list,&ptr_bit,0);
        else 
        	jump_next_blank(2,&ptr_list,&ptr_bit,0); 
     } 
     
     for (i=0;i<125000;i++){}  
     AIC_ICCR=0xffffffff;     
     key_open(KEY_LEFT|KEY_RIGHT|KEY_RETURN|KEY_SET|KEY_ADD|KEY_SUB);
     
}



⌨️ 快捷键说明

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