Mình làm theo hướng dẫn sau mà làm hoài vẫn bị lỗi:

Và đây là đoạn code mình làm:
Kết quả hiển thị trên bóng đèn không đúng như mong đợi, xin các bạn sửa giúp.
Code:
Set Columns as inputs, Rows as outputs Set a Row x to low, read Columns y If Column y is low, delay 20ms to debounce If Column y is still low, wait until Column y go high Assume corresponding key was pressed

Và đây là đoạn code mình làm:
Code:
#define LED_PORT P0 // 8 bóng đèn led được nối vào P0
sbit C0 = P2^0;
sbit C1 = P2^1;
sbit C2 = P2^2;
sbit C3 = P2^3;
sbit R0 = P2^7;
sbit R1 = P2^6;
sbit R2 = P2^5;
sbit R3 = P2^4;
void delay(tWord ms);
tByte key_scan(void);
void delay(tWord ms)
{
unsigned int x, y;
for (x = 0; x <= ms; x++)
{
for (y = 0; y <= 120; y++);
}
}
tByte key_scan(void)
{
unsigned char key = 0xFF;
if(R0==0&&R1==1&&R2==1&&R3==1) // R: row, C:column
{
if(C0==0)
{
delay(100);
if(C0==0)
{
while(C0==0);
key=1;
}
}
if(C1==0)
{
delay(100);
if(C1==0)
{
while(C1==0);
key=2;
}
}
if(C2==0)
{
delay(100);
if(C2==0)
{
while(C2==0);
key=3;
}
}
if(C3==0)
{
delay(100);
if(C3==0)
{
while(C3==0);
key=4;
}
}
}
if(R0==1&&R1==0&&R2==1&&R3==1)
{
if(C0==0)
{
delay(100);
if(C0==0)
{
while(C0==0);
key=5;
}
}
if(C1==0)
{
delay(100);
if(C1==0)
{
while(C1==0);
key=6;
}
}
if(C2==0)
{
delay(100);
if(C2==0)
{
while(C2==0);
key=7;
}
}
if(C3==0)
{
delay(100);
if(C3==0)
{
while(C3==0);
key=8;
}
}
}
if(R0==1&&R1==1&&R2==0&&R3==1)
{
if(C0==0)
{
delay(100);
if(C0==0)
{
while(C0==0);
key=9;
}
}
if(C1==0)
{
delay(100);
if(C1==0)
{
while(C1==0);
key=10;
}
}
if(C2==0)
{
delay(100);
if(C2==0)
{
while(C2==0);
key=11;
}
}
if(C3==0)
{
delay(100);
if(C3==0)
{
while(C3==0);
key=12;
}
}
}
if(R0==1&&R1==1&&R2==1&&R3==0)
{
if(C0==0)
{
delay(100);
if(C0==0)
{
while(C0==0);
key=13;
}
}
if(C1==0)
{
delay(100);
if(C1==0)
{
while(C1==0);
key=14;
}
}
if(C2==0)
{
delay(100);
if(C2==0)
{
while(C2==0);
key=15;
}
}
if(C3==0)
{
delay(100);
if(C3==0)
{
while(C3==0);
key=16;
}
}
}
return key;
}
void main(void)
{
unsigned char i ;
while (1)
{
i = key_scan();
LED_PORT = i;
delay(1000);
}
}

Comment