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

📄 main.c

📁 LPC2138外接的4*4矩阵键盘扫描!硬件方面接到了2138的P1.16到P1.23.使用定时器0定时检测键盘扫描.
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                                   
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2008-10-23
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			Way1201
** Created date:		2004-09-16
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include "config.h"
uint32 key_flag=0,key_value=0;

/********************************************************************************************************
** 函数名称 :DelayNS()
** 函数功能 :长软件延时
** 入口参数 :dly	延时参数,值越大,延时越久
** 出口参数 :无
*********************************************************************************************************
*/
void DelayNS (uint32 dly)
{
    uint32 i;
	
	for ( ; dly>0; dly--)
		for (i=0; i<50000; i++);
		
}

/*********************************************************************************************************
**函数名称:IRQ_Keyboarb                            
**函数功能:键盘扫描子程序
**调试说明:无
**入口参数:无
**出口参数:key_value
**
********************************************************************************************************/

__irq void SCAN_Keyboard(void)
{   uint32 temp;
    T0IR =0x01;                                     //关闭中断
    VICVectAddr=0x00;   
  
    IO1CLR|= 0x00f00000;                            /* 键盘行信号清零 */           
    temp = IO1PIN&0x000f0000;
    if(temp!=0x000f0000)
    { 
      
      DelayNS(5);
      temp = IO1PIN&0x000f0000;
      if(temp!=0x000f0000)
      { key_flag=1; 
        IO1SET|= 0x00f00000;                        /* 扫描行信号0    */
        IO1CLR|= 0x00800000;
        temp = IO1PIN;
        temp = temp&0x000f0000;
        while(temp!=0x000f0000)
        { temp = IO1PIN&0x000f0000; 
          switch(temp)
          {
            case 0x000e0000:key_value=1;break;
            case 0x000d0000:key_value=2;break;
            case 0x000b0000:key_value=3;break;
            case 0x00070000:key_value=4;break;
          }
                 
          break;
        }
       
       
        IO1SET|= 0x00f00000;                        /* 扫描行信号1    */
        IO1CLR|= 0x00400000;
        temp = IO1PIN;
        temp = temp&0x000f0000;
        while(temp!=0x000f0000)
        { 
          temp = IO1PIN&0x000f0000;
          switch(temp)
          {
            case 0x000e0000:key_value=5;break;
            case 0x000d0000:key_value=6;break;
            case 0x000b0000:key_value=7;break;
            case 0x00070000:key_value=8;break;
          }
          break;
        }
        
        
        IO1SET|= 0x00f00000;                        /* 扫描行信号2    */
        IO1CLR|= 0x00200000;
        temp = IO1PIN;
        temp = temp&0x000f0000;
        while(temp!=0x000f0000)
        { 
          temp = IO1PIN&0x000f0000;
          switch(temp)
          {
            case 0x000e0000:key_value=0x09;break;
            case 0x000d0000:key_value=0x0a;break;
            case 0x000b0000:key_value=0x0b;break;
            case 0x00070000:key_value=0x0c;break;
          }
          break;
        }
        
        
        IO1SET|= 0x00f00000;                        /* 扫描行信号3    */
        IO1CLR|= 0x00100000;
        temp = IO1PIN;
        temp = temp&0x000f0000;
        while(temp!=0x000f0000)
        { 
          temp = IO1PIN&0x000f0000;
          switch(temp)
          {
            case 0x000e0000:key_value=0x0d;break;
            case 0x000d0000:key_value=0x0e;break;
            case 0x000b0000:key_value=0x0f;break;
            case 0x00070000:key_value=0;break;
          }
          break;
        }
        
      }
      
    }
    

    //return key_value; 
} 
/*********************************************************************************************************
**函数名称:main()                            
**函数功能:使用定时器0定时检测键盘扫描
**调试说明:无
**
********************************************************************************************************/

        int main (void)
{   
   
    PINSEL0|= 0x00030055;					        /* 设置管脚连接GPIO			 */
	PINSEL1|= 0x20000000;
	PINSEL2|= 0x00000004;
	IO0DIR |= 0xffffffff;
	IO1DIR |= 0x00f00000;
	IO0SET |= 0xffffffff;							/* 设置键盘控制口输入		 */
	IO0CLR |= 1<<4;
	IRQEnable();                                    /* IRQ中断使能 			     */
	
	 /* 定时器0初始化 */
	 
	T0TC  =0;                                       /* 定时器设置为0             */
	T0PR  =0;                                       /* 时钟不分频			     */
	T0MCR =0X03;                                    /* 设置匹配后复位,并产生中断*/
	T0MR0 =Fpclk/5;                                /* 时间定时20ms		         */
	T0TCR =0x01;                                    /* 启动定时器		         */
	
	 /* 设置定时器0为IRQ中断*/
	
	VICIntSelect= 0x00000000;                       /* 设置所有中断分配为IRQ中断 */
	VICVectCntl0=0x20|0x04;                         /* 分配定时器0到向量中断0    */
	VICVectAddr0=(uint32)SCAN_Keyboard;             /* 设置中断服务程序地址      */
	VICIntEnable=1<<0x04;                           /* 使能定时器0中断           */
	
	IO1CLR|= 0x00f00000;                            /* 键盘行信号清零            */
	while(1)
	{IO0CLR|=1<<27;
	 
	 //key_value=1;
	 if(key_flag==1)
	 {key_flag=0;
	  
	  IO0SET|=1<<4;
	  DelayNS(25);
	  IO0CLR|=1<<4;
	 }
	}
	


// add user source code 
    return 0;
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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