c51单片机P1.0-P1.7控制列,P2.0-P2.3控制行,8*4的矩阵键盘扫描,程序思路都好,求大虾帮忙!!!!c语言

[复制链接]
查看11 | 回复4 | 2011-9-6 12:17:52 | 显示全部楼层 |阅读模式
回复

使用道具 举报

千问 | 2011-9-6 12:17:52 | 显示全部楼层
我随便写了下,配着注释,你理解下意思,然后弄个适合你的voidkey_scan(){unsignedcharkey1,key2;unsignedintkey;P1=0XFF;//P1拉高P2//P2.0-P2.3拉低if(P1!=0XFF)//如果有按键按下,P1就有引脚被拉低,{delay_ms(10);//延时10ms,防抖if(P1!=0XFF){key1=P1;//记下P1口的值P1=0X00;P2|=0X0F;//P1拉低,P2拉高if((P2//记下P2后4位的值//现在通过key1和key2就可以区分每个按键了key=(key28)key1;//把key1和key2组合在一起switch(key)//每个key值都对应着一个按键,用case语句执行就行了{case0X077F:按键1按下的子程序;break;.....................}}}}大致就这个意思是按键扫描的行列翻转法,
回复

使用道具 举报

千问 | 2011-9-6 12:17:52 | 显示全部楼层
键盘矩阵
回复

使用道具 举报

千问 | 2011-9-6 12:17:52 | 显示全部楼层
锐志单片机官方交流论坛:http://bbs.richmcu.tk
回复

使用道具 举报

千问 | 2011-9-6 12:17:52 | 显示全部楼层
以下是4*3矩阵键盘的扫描程序,一些该修改的地方自己修改一下。仿照一下就行了voidmatrixkeyscan(){uchartemp;P1=0xfd;temp=P1;temp=tempif(temp!=0xf0){delay(10);temp=P1;temp=tempif(temp!=0xf0){temp=P1;switch(temp){case0xed:key=0;break;case0xdd:key=1;break;case0xbd:key=2;break;case0x7d:key=3;break;}while(temp!=0xf0){temp=P1;temp=temp}display(key);}}P1=0xfb;temp=P1;temp=tempif(temp!=0xf0){delay(10);temp=P1;temp=tempif(temp!=0xf0){temp=P1;switch(temp){case0xeb:key=4;break;case0xdb:key=5;break;case0xbb:key=6;break;case0x7b:key=7;break;}while(temp!=0xf0){temp=P1;temp=temp}display(key);}}P1=0xf7;temp=P1;temp=tempif(temp!=0xf0){delay(10);temp=P1;temp=tempif(temp!=0xf0){temp=P1;switch(temp){case0xe7:key=8;break;case0xd7:key=9;break;case0xb7:key=10;break;case0x77:key=11;break;}while(temp!=0xf0){temp=P1;temp=temp}display(key);}}}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行