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

📄 3键密码锁_带数码管显示.c

📁 MSP430开发板413演示程序 MSP430开发板413演示程序
💻 C
字号:
//通过中断写键盘程序

#include  <msp430x44x.h>

char key =0;
const char ma[11]={0,1,2,2,2,2,1,0,0,1,1};
const unsigned char NUM_LED[]=
                       {
                       0xd7,0x14,0xcd,0x5d,0x1E,  // 0 ~ 4
                       0x5b,0xdb,0x15,0xdf,0x5f,   // 5 ~ 9
                       0x9f,0xda,0xc3,0xdc,0xcb,   // a ~ e
                       0x8b,0x00,0x40,0x8,
                       0xf7,0x34,0xed,0x7d,0x3E,  // 0 ~ 4
                       0x7b,0xfb,0x35,0xff,0x7f,   // 5 ~ 9
                       0xbf,0xfa,0xe3,0xfc,0xcb,   // a ~ e
                       0x8b,0x00,0x40,0x8,
                       };                 //f,0x00使LED不显示

unsigned char led_Buf[6]={18,18,18,18,18,18};  // LED显示缓冲区 ,
char m_ok = 0;        //0xff 为正确
char input_con = 0;   //3 为输入结束
char input_buffer[3]={0}; //键缓存
void delay(int xx)
{
  int i=3000;
  char j;
  for (j=0;j<xx;j++)
   {
    do (i--);
    while (i !=0);
    i=3000;
   }
}

void delay1(unsigned long v)
    {
        while(v!=0)v--;
    }

/*******************************************************
*     模块初始化
*******************************************************/
void init_LED(void){
    char tmpv;
    P3DIR  = 0xff;    // 设置 p3 输出
    P3OUT  = 0x00;    // 设置 初始值为0
    P4DIR |= 0x03;    // 设置 p4.0,p4.1 输出
    P4OUT &= 0xfc;    // 设置初始值
}

/****************************************************
*     LED 显示  ,该函数可以放到定时器中断中
****************************************************/
void led_Display(){
      unsigned tmp ,i ;
      tmp    = 0x01;
      for(i=0;i<6;i++)
      {
      P3OUT  = NUM_LED[led_Buf[i]];  // 设置显示值
      P4OUT |= 0x02;                        // 打开数据锁存器
      P4OUT &= 0XFD;                        // 关闭数据锁存
      P3OUT  = ~(tmp<<i);            // 设置那只LED显示
      P4OUT  |= 0x01;                       // 打开控制锁存
      P4OUT  &= 0XFE;                       // 关闭控制锁存
      delay1(300);
      }
}

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;              // 关闭看门狗
  P1DIR &=~(BIT3+BIT2+BIT1);             // 输入设置
  P1IE |=(BIT3+BIT2+BIT1);              //允许P1的123可以中断  高到低设为1
  P1IES |=(BIT3+BIT2+BIT1);             //设置下降沿中断
  init_LED();
  _EINT();    //开中断
  for(;;)
      led_Display();
  //__bis_SR_register(LPM3_bits + GIE);
}

//中断程序
#pragma vector = PORT1_VECTOR
__interrupt void PP(void)
{
  if((P1IFG&0XE)==BIT1)
    key=0;
  else if((P1IFG&0XE)==BIT2)
    key=1;
  else if((P1IFG&0XE)==BIT3)
    key=2;
  P1IFG=0;
  
  led_Buf[input_con]=key;
  
  if(input_con > 2)
      {
          input_con = 0 ;
          //比照是否密码正确
          if((input_buffer[0]==ma[0])&(input_buffer[1]==ma[1])&(input_buffer[2]==ma[2]))//密码正确
              {
                P1DIR |= BIT0;
                P1OUT |= BIT0 ;
                delay(300);
                P1OUT &= ~BIT0;
                m_ok= 0 ; 
              }
          else 
              m_ok = 0 ;
      }
  else
      {
          input_buffer[input_con]= key ;//正在输入密码
          input_con++;
      }
  
  //键盘程序
}

⌨️ 快捷键说明

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