msp430按键中断ⅱ-凯发旗舰

嵌入式 > 技术百科 > 详情

msp430按键中断ⅱ

发布时间:2024-12-03 发布时间:
|

#include  

  

typedef unsigned char uchar;  

typedef unsigned int uint;  

#define keyin (p1in & 0x0f)  

#define wei_h p5out |= bit5  

#define wei_l p5out &= bit5  

#define duan_l p6out &= ~bit6  

#define duan_h p6out |= bit6  

  

uchar table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};  

//uchar num = 0;  

  uint keyval=0;  

void delay(int z)  

{  

  int i,j;  

  for(i=z;i>0;i--)  

    for(j=112;j>0;j--);  

}  

  

void display(uchar dat)  

{  

  p4out = table[dat];  

  duan_h;  

  duan_l;  

  p4out = 0x00;  

  wei_h;  

  wei_l;  

}  

  

void main( void )  

{  

//  uint temp,keyval;  

  p1ies = 0x0f;         //下降沿触发  

  p1ie = 0x0f;  

  p1dir = 0xf0;  

  p1out = 0x00;  

    

//  p1dir = 0xff;p1out = 0xff;  

  p4dir = 0xff;p4out = 0x00;  

  p5dir = 0xff;p5out = 0xf7;  

  p6dir = 0xff;  

  _eint();  

  // stop watchdog timer to prevent time out reset  

  wdtctl = wdtpw wdthold;  

    

  while(1)  

  {  

    lpm1;  

  }  

}  

  

#pragma vector = port1_vector  

__interrupt void port1_isr(void)  

{  

  

  if(p1ifg & 0x0f)  

  {  

    switch(p1ifg)  

    {  

    case 0x01:  

      if(keyin == 0x0e)  

      {  

        delay(20);  

        if(keyin == 0x0e)  

        {  

          while(keyin != 0x0f)  

            keyval = 1;  

          display(keyval);  

          p1ifg = 0;            //必须软件清除  

          return;  

        }  

      }  

    case 0x02:  

      if(keyin == 0x0d)  

      {  

        delay(20);  

        if(keyin == 0x0d)  

        {  

          while(keyin != 0x0f)  

            keyval = 1;  

          display(keyval);  

          p1ifg = 0;            //必须软件清除  

          return;  

        }  

      }         

    case 0x03:  

      if(keyin == 0x0b)  

      {  

        delay(20);  

        if(keyin == 0x0b)  

        {  

          while(keyin != 0x0f)  

            keyval = 1;  

          display(keyval);  

          p1ifg = 0;            //必须软件清除  

          return;  

        }  

      }  

    case 0x04:  

      if(keyin == 0x07)  

      {  

        delay(20);  

        if(keyin == 0x07)  

        {  

          while(keyin != 0x0f)  

            keyval = 1;  

          display(keyval);  

          p1ifg = 0;            //必须软件清除  

          return;            

        }  

      }  

    }  

  }  

}  


 

『本文转载自网络,凯发旗舰的版权归原作者所有,如有侵权请联系删除』

热门文章 更多
高效led驱动器具有可控硅调光和有源pfc特性
网站地图