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

📄 msp430键盘程序.c

📁 430各模块例程包
💻 C
字号:
MSP430键盘程序[中断方式]
// 此示例程序为中断方式,得到键盘的键值,存放在队列keybuff[10]中
// 此示例程序没有显示,
// 键盘的按键按下引起P1口的中断服务程序,得到键盘的键值,保存到键值队列
// 在其他的中断服务程序中通过键值队列中的数据引导程序的流程
#include <msp430x14x.h>  
unsigned char keybuff[10];
unsigned char keypoint=0;

void delay(int v)
    {
        while(v!=0)v--;
    }
     
unsigned char key(void)
{
    unsigned char x=0xff;
    P1DIR=0X0F;
    P1OUT=0X01;                 //扫描第一行
    if((P1IN&0X70)==0X10)       
       x=0;
    else if((P1IN&0X70)==0X20)
       x=1;
    else if((P1IN&0X70)==0x40)
       x=2;
    else 
    {
          P1OUT=0X02;            //扫描第二行
          if((P1IN&0X70)==0X10)
             x=3;
          else if((P1IN&0X70)==0X20)
             x=4;
		  else if((P1IN&0X70)==0x40)
             x=5;
          else
          {
				P1OUT=0X04;           //扫描第三行
				if((P1IN&0X70)==0X10)
					x=6;
				else if((P1IN&0X70)==0X20)
					x=7;
                else if((P1IN&0X70)==0x40)
                    x=8;
				else 
				{
					P1OUT=0x08;           //扫描第四行
					if((P1IN&0X70)==0X10)
						x=9;
					else if((P1IN&0X70)==0X20)
						x=10;
					else if((P1IN&0X70)==0x40)
						x=11;
                }
            }      
	}     
  
	return(x);
}
  
  
unsigned char keyj(void)      
{
	unsigned char x;
    P1DIR=0x0f;
    P1OUT=0x0f;        //键盘硬件:P10--P13为行线,最上面一根为P10
    x=(P1IN&0X70);      //         P14--P16为列线,最左边一根为P14,列线下拉
    return(x);          // 无按键,返回 0?;  有按键返回 非0
}  
     
       
interrupt[PORT1_VECTOR] void port1key(void)
{
    if(keyj()!=0X00)
    {
		 delay(300)  ;   //消抖动
         if(keyj()!=0X00)
         {
            keybuff[keypoint]=key();    //按键见键值保存到队列
            keypoint++;                 //
            if(keypoint==10)
                 keypoint=0;
          }
     }
     P1OUT=0X0F;
     P1IFG=0X0;         //清除中断标志
}

   

void main(void)
{ 
  WDTCTL = WDTPW + WDTHOLD;  /*   // Stop WDT */
  P1DIR=0XF;
  P1OUT=0XF;
  P1IES=0X0;
  P1IE=0X70;    //列线上升沿允许P1中断
   _EINT();                      /*/ Enable interrupts                 */
  
  while(1)
  { 
  
     LPM0;                   
    _NOP();   
   
  }
} 

⌨️ 快捷键说明

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