技术热线: 4007-888-234
设计开发

专注差异化嵌入式产品解决方案 给智能产品定制注入灵魂给予生命

开发工具

提供开发工具、应用测试 完善的开发代码案例库分享

技术支持

从全面的产品导入到强大技术支援服务 全程贴心伴随服务,创造无限潜能!

新品推广

提供新的芯片及解决方案,提升客户产品竞争力

新闻中心

提供最新的单片机资讯,行业消息以及公司新闻动态

PIC16F87X单片机4X4矩阵键盘

更新时间: 2019-03-23
阅读量:2318

十年专注单片机方案开发的方案公司英锐恩,分享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; }

(文源网络,侵删)