P1默认高电平
因为矩阵按键按行扫描会使用到蜂鸣器,所以按列扫描
以第一列为例
main.c
#include <REGX52.H>
#include "delay.h"
#include "LCD1602.h"
#include "key.h"
unsigned char ke;
void main()
{
LCD_Init();
while(1)
{
ke=key();
if (ke)
{
LCD_ShowNum(1,1,ke,2);
}
}
}
注意:if判断ke是否按下是不可省略的!!因为显示是放在循环里面的,如果没有if的判断,那么ke则是一直为0(因为按下改变一下变得很快是看不到的)
key.c
#include <REGX52.H>
#include "delay.h"
unsigned char key()
{
unsigned char k=0;
P1=0xff;
P1_3=0;
if (P1_7==0) {delay(20); while(P1_7==0);delay(20);k=1;}
if (P1_6==0) {delay(20); while(P1_6==0);delay(20);k=2;}
if (P1_5==0) {delay(20); while(P1_5==0);delay(20);k=3;}
if (P1_4==0) {delay(20); while(P1_4==0);delay(20);k=4;}
return k;
}
delay.c
void delay(unsigned int x)
{
unsigned char i, j,k;
for (k=0;k<x;k++)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}