📄 3键密码锁_带数码管显示.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 + -