跟着视频学习51单片机,学到了矩阵键盘后,怎么都不会成功,发现这里面有个BUG。
有人还专门就此问题写了一个论文。
这个问题困扰了一天,我找了很多办法,终于成功实现了一种,贴在这里:
#include "reg51.h"
sbit L1=P1^0;
sbit L2=P1^1;
sbit L3=P1^2;
sbit L4=P1^3;
unsigned s[]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};
void delay(unsigned int n)
{
unsigned int i=0,j=0;
for (i=0;i<n;i++)
{
for (j=0;j<120;j++);
}
}
void key_scan()
{
P1=0xef;
if (L1 == 0) P0=~s[0];
if (L2 == 0) P0=~s[4];
if (L3 == 0) P0=~s[8];
if (L4 == 0) P0=~s[12];
delay(10);
P1=0xdf;
if (L1 == 0) P0=~s[1];
if (L2 == 0) P0=~s[5];
if (L3 == 0) P0=~s[9];
if (L4 == 0) P0=~s[13];
delay(10);
P1=0xbf;
if (L1 == 0) P0=~s[2];
if (L2 == 0) P0=~s[6];
if (L3 == 0) P0=~s[10];
if (L4 == 0) P0=~s[14];
delay(10);
P1=0x7f;
if (L1 == 0) P0=~s[3];
if (L2 == 0) P0=~s[7];
if (L3 == 0) P0=~s[11];
if (L4 == 0) P0=~s[15];
delay(10);
}
void main()
{
while(1)
{
key_scan();
}
}