单片机学习小组
直播中

凌晨3点睡

12年用户 563经验值
私信 关注

怎样利用矩阵键盘去制作一种密码锁呢

怎样利用矩阵键盘去制作一种密码锁呢?利用矩阵键盘制作密码锁有何优势?

回帖(1)

陈游斗

2022-1-20 13:57:33
本周学习了关于矩阵键盘的知识,并利用矩阵键盘制作了密码锁。
矩阵键盘利用矩阵式的连接减少了IO口的使用,并用扫描的方式保证每一个按键的响应。
下面是代码
main

#include
#include "lcd1602.h"
#include "delay.h"
#include "MatrixKey.h"


unsigned char keynum,Password,Count;


void main()
{
       
        LCD_Init();
        LCD_ShowString(1,1,"helloworld");
        while(1)
        {
                keynum=MatrixKey();
               
                if(keynum)
                {
                        if(NUMBER<=10)
                        {
                                if(Count<4)
                                {
                                        Password*=10;
                                        Password=KeyNum%10;
                                        Count++;
                                }
                        }
                                LCD_ShowNum(2,1,keynum,4);
               
                        if(KeyNum==11)
                        {
                                if(Password==0619)
                                {
                                        LCD_ShowString(1,14,"OK ");
                                        Password=0;
                                        Count=0;
                                        LCD_ShowNum(2,1,keynum,4);
                                       
                                }
                                else
                                {
                                        LCD_ShowString(1,14,"ERR");
                                        Password=0;
                                        Count=0;
                                        LCD_ShowNum(2,1,keynum,4);
                                }
                        }
                        if(KeyNum==12)
                        {
                                        Password=0;
                                        Count=0;
                                        LCD_ShowNum(2,1,keynum,4);
                        }
                }
        }
}


MatrixKey.c

unsigned char MatrixKey()
{
    unsigned char Keynum=0;
          
          P1_0=0xFF;
          P1_3=0;
          if(P1_7==0){delay(20);while(P1_7==0);delay(20);Keynum=1;}
                if(P1_6==0){delay(20);while(P1_6==0);delay(20);Keynum=5;}
                if(P1_5==0){delay(20);while(P1_5==0);delay(20);Keynum=9;}
                if(P1_4==0){delay(20);while(P1_4==0);delay(20);Keynum=13;}
               
                P1_0=0xFF;
          P1_2=0;
          if(P1_7==0){delay(20);while(P1_7==0);delay(20);Keynum=2;}
                if(P1_6==0){delay(20);while(P1_6==0);delay(20);Keynum=6;}
                if(P1_5==0){delay(20);while(P1_5==0);delay(20);Keynum=10;}
                if(P1_4==0){delay(20);while(P1_4==0);delay(20);Keynum=14;}
               
                P1_0=0xFF;
          P1_1=0;
          if(P1_7==0){delay(20);while(P1_7==0);delay(20);Keynum=3;}
                if(P1_6==0){delay(20);while(P1_6==0);delay(20);Keynum=7;}
                if(P1_5==0){delay(20);while(P1_5==0);delay(20);Keynum=11;}
                if(P1_4==0){delay(20);while(P1_4==0);delay(20);Keynum=15;}


    P1_0=0xFF;
          P1_0=0;
          if(P1_7==0){delay(20);while(P1_7==0);delay(20);Keynum=4;}
                if(P1_6==0){delay(20);while(P1_6==0);delay(20);Keynum=8;}
                if(P1_5==0){delay(20);while(P1_5==0);delay(20);Keynum=12;}
                if(P1_4==0){delay(20);while(P1_4==0);delay(20);Keynum=16;}
               
                return(Keynum);
}
这个矩阵扫描方式虽然有点繁琐,但是最好理解
.h

#ifndef __MATRIXKEY_H__
#define __MATRIXKEY_H__
unsigned char MatrixKey();
#endif
举报

更多回帖

发帖
×
20
完善资料,
赚取积分