本周学习了关于矩阵键盘的知识,并利用矩阵键盘制作了密码锁。
矩阵键盘利用矩阵式的连接减少了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
本周学习了关于矩阵键盘的知识,并利用矩阵键盘制作了密码锁。
矩阵键盘利用矩阵式的连接减少了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
举报