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