1.LCD调试
需要在文件中包含这两个文件,提供测试的函数
2.矩阵键盘原理
矩阵键盘扫描(输入扫描)
原理:读取第1行(列)一读取第2行(列)一读取第3行(列......然后快速循环这个过程,最终实现所有按键同时检测的效果
3.扫描代码
我们给P1_3赋0,其他赋1检查第一列,代码:
P1=0xFF; //全部赋1
P1_3 = 0; //P1_3对应的列,也就是第一列
//下面是逐个检查第一列上的每个元素是否被按下,被按下就记录对应的keyNumber
if(P1_7 == 0){Delay1ms(20);while(P1_7 == 0);Delay1ms(20);keyNumber = 1;}
if(P1_6 == 0){Delay1ms(20);while(P1_6 == 0);Delay1ms(20);keyNumber = 5;}
if(P1_5 == 0){Delay1ms(20);while(P1_5 == 0);Delay1ms(20);keyNumber = 9;}
if(P1_4 == 0){Delay1ms(20);while(P1_4 == 0);Delay1ms(20);keyNumber = 13;}
//以上检查完第一列的按键
剩下三列也是一样的操作,最重要的:一列扫描完毕准备扫描下一列的时候将P1重新赋值为0xFF
P1=0xFF;
P1_2 = 0;
if(P1_7 == 0){Delay1ms(20);while(P1_7 == 0);Delay1ms(20);keyNumber = 2;}
if(P1_6 == 0){Delay1ms(20);while(P1_6 == 0);Delay1ms(20);keyNumber = 6;}
if(P1_5 == 0){Delay1ms(20);while(P1_5 == 0);Delay1ms(20);keyNumber = 10;}
if(P1_4 == 0){Delay1ms(20);while(P1_4 == 0);Delay1ms(20);keyNumber = 14;}
P1=0xFF;
P1_1 = 0;
if(P1_7 == 0){Delay1ms(20);while(P1_7 == 0);Delay1ms(20);keyNumber = 3;}
if(P1_6 == 0){Delay1ms(20);while(P1_6 == 0);Delay1ms(20);keyNumber = 7;}
if(P1_5 == 0){Delay1ms(20);while(P1_5 == 0);Delay1ms(20);keyNumber = 11;}
if(P1_4 == 0){Delay1ms(20);while(P1_4 == 0);Delay1ms(20);keyNumber = 15;}
P1=0xFF;
P1_0 = 0;
if(P1_7 == 0){Delay1ms(20);while(P1_7 == 0);Delay1ms(20);keyNumber = 4;}
if(P1_6 == 0){Delay1ms(20);while(P1_6 == 0);Delay1ms(20);keyNumber = 8;}
if(P1_5 == 0){Delay1ms(20);while(P1_5 == 0);Delay1ms(20);keyNumber = 12;}
if(P1_4 == 0){Delay1ms(20);while(P1_4 == 0);Delay1ms(20);keyNumber = 16;}
然后将keyNumber返回,再在主函数中通过LCD_ShowNum()打印即可实现按下对应的键LCD显示相应的数字的效果。
4.矩阵键盘密码锁
unsigned char key=0;
unsigned int Password=0,count=0;
void main()
{
LCD_init();
LCD_ShowNum(2,1,Password,4);
LCD_ShowString(1,1,"Password:");
while(1)
{
key = MatrixKey();
if(key)
{
LCD_ShowString(1,14," "); //当重新输入密码的时候清除OK和ERR
if(key<=10)
{
//四位密码,count用来计数
if(count < 4)
{
key%=10;//将10转换为0
Password*=10;
Password+=key;
count++;
}
}
//确认按钮
if(key == 11)
{
if(Password == 5555 && count == 4)
{
LCD_ShowString(1,14,"OK ");
Password=0,count=0;
}
else
{
LCD_ShowString(1,14,"ERR");
Password=0,count=0;
}
}
if(key == 12) //back
{
if(count >0)
{
Password /= 10;
count --;
}
}
LCD_ShowNum(2,1,Password,4);
key=0;
}
}
}