十年專注單片機方案開發(fā)的方案公司英銳恩,分享PIC16F87X單片機4X4矩陣鍵盤。英銳恩現提供服務產品涉及主控芯片:8位單片機、16位單片機、32位單片機及各類運算放大器等。
/************************************************* * 鍵盤掃描子程序 * *************************************************/ unsigned char keyscan() { unsigned char temp,key_value; static bit b_keyoncol; //某一列上有按鍵時置1
PORTB=0xFF; b_keyoncol=0; key_value=0; //掃描RB0 RB0=0; #asm nop nop nop nop #endasm temp=key_col[PORTB>>4]; DELAY(); if(temp==key_col[PORTB>>4]){ if(temp==0xFF) return 0xFF; else if(temp!=0){ b_keyoncol=1; key_value=temp; } } //掃描RB1 RB0=1; RB1=0; temp=key_col[PORTB>>4]; DELAY(); if(temp==key_col[PORTB>>4]){ if(temp==0xFF) return 0xFF; else if (temp!=0){ if(b_keyoncol==1) return 0xFF; else
{key_value=temp+4; b_keyoncol=1;} } } //掃描RB2 RB0=1; RB1=1; RB2=0; temp=key_col[PORTB>>4]; DELAY(); if(temp==key_col[PORTB>>4]){ if (temp==0xFF) return 0xff; else if (temp!=0){ if(b_keyoncol==1) return 0xFF; else {key_value=temp+8; b_keyoncol=1;} } } //掃描RB3 RB0=1; RB1=1; RB2=1; RB3=0; temp=key_col[PORTB>>4]; DELAY(); if(temp==key_col[PORTB>>4]){ if (temp==0xFF) return 0xff; else if (temp!=0){ if(b_keyoncol==1) return 0xFF; else {key_value=temp+12; b_keyoncol=1;} } }
//掃描結束 RB3=1;
return key_value; }
(文源網絡,侵刪)