Hôm nay buồn buồn kg có việc gì làm bèn đem cái code C viết cho con atmega32 dùng để chống dội phím ra cho anh em tham khảo rồi dùng. Code này đảm bảo chống dội phím tối đa, khi bạn nhấn một phím và giữ bất kì bao lâu cũng được, khi nhả phím ra nó mới thực hiện.
- Kết nối phần cứng bàn phím ma trận 4x4, 4 chân nối vào 4 bit thấp của portB, 4 chân nối vào 4 bit cao của portB.
- Phuơng pháp quét phím cấp điện lần lượt 4 chân bít thấp, kiểm tra sự thay đổi ở 4 chân bit cao. khi nào có sự thay đổi nhảy đến phần chống dội phím, sau đó xử lí sự kiện có phím nhấn.
Code quét phím:
while(1)
{
DDRB=0x0F;
PORTB=0;
PORTB.0=1;
delay_ms(5);
if (PINB>15) break;
PORTB=0;
PORTB.1=1;
delay_ms(5);
if (PINB>15) break;
PORTB=0;
PORTB.2=1;
delay_ms(5);
if (PINB>15) break;
PORTB=0;
PORTB.3=1;
delay_ms(5);
if (PINB>15) break;
}
Code chống dội phím
void chongdoi(void)
{ int i;
loinhan:;
for (i=0;i<=50;i++) // khi có phím nhấn sẽ nhảy đến đây
{
if (PINB<=15) goto loinhan; //đảm bảo kg còn dội nữa
}
ma_key=PINB; // luu gia tri portB
delay_ms(50);
while(1)
{
if (PINB<=15) //đợi phím nhả ra
{
loinha:;
for (i=0;i<=50;i++)
{
if (PINB>15) goto loinha;
}
break;
}
}
PORTB=0; //reset PORTB
}
Cái này mình tự viết chạy OK, vì làm đồ án mà (T_T). Trước đây search tá lả lun mà kg có, đành tự tìm hiểu rùi tự viết thấy khổ quá, giờ share cho anh em khỏi cất công viết lại cực khổ, vì mình đã trải qua cái khổ rùi! Khổ chỉ một lần, có gì anh em ta share cho nhau!!!!!!
- Kết nối phần cứng bàn phím ma trận 4x4, 4 chân nối vào 4 bit thấp của portB, 4 chân nối vào 4 bit cao của portB.
- Phuơng pháp quét phím cấp điện lần lượt 4 chân bít thấp, kiểm tra sự thay đổi ở 4 chân bit cao. khi nào có sự thay đổi nhảy đến phần chống dội phím, sau đó xử lí sự kiện có phím nhấn.
Code quét phím:
while(1)
{
DDRB=0x0F;
PORTB=0;
PORTB.0=1;
delay_ms(5);
if (PINB>15) break;
PORTB=0;
PORTB.1=1;
delay_ms(5);
if (PINB>15) break;
PORTB=0;
PORTB.2=1;
delay_ms(5);
if (PINB>15) break;
PORTB=0;
PORTB.3=1;
delay_ms(5);
if (PINB>15) break;
}
Code chống dội phím
void chongdoi(void)
{ int i;
loinhan:;
for (i=0;i<=50;i++) // khi có phím nhấn sẽ nhảy đến đây
{
if (PINB<=15) goto loinhan; //đảm bảo kg còn dội nữa
}
ma_key=PINB; // luu gia tri portB
delay_ms(50);
while(1)
{
if (PINB<=15) //đợi phím nhả ra
{
loinha:;
for (i=0;i<=50;i++)
{
if (PINB>15) goto loinha;
}
break;
}
}
PORTB=0; //reset PORTB
}
Cái này mình tự viết chạy OK, vì làm đồ án mà (T_T). Trước đây search tá lả lun mà kg có, đành tự tìm hiểu rùi tự viết thấy khổ quá, giờ share cho anh em khỏi cất công viết lại cực khổ, vì mình đã trải qua cái khổ rùi! Khổ chỉ một lần, có gì anh em ta share cho nhau!!!!!!
Comment