十年專注單片機(jī)方案開發(fā)的方案公司英銳恩,分享PIC16F87X單片機(jī)4X4矩陣鍵盤。英銳恩現(xiàn)提供服務(wù)產(chǎn)品涉及主控芯片:8位單片機(jī)、16位單片機(jī)、32位單片機(jī)及各類運(yùn)算放大器等。
/************************************************* * 鍵盤掃描子程序 *
*************************************************/ unsigned char
keyscan() { unsigned char temp,key_value; static bit b_keyoncol; //某一列上有按鍵時(shí)置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;} } }
//掃描結(jié)束 RB3=1;
return key_value; }
(文源網(wǎng)絡(luò),侵刪)