欢迎来到天天文库
浏览记录
ID:56369271
大小:32.00 KB
页数:3页
时间:2020-06-22
《这是我在网上论坛上看到的用少量的IO口实现多个按键的电.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、这是我在网上论坛上看到的用少量的I/O口实现多个按键的电路。我改了一下,用两个口实现五个按键。我实现的电路是这样的,用P1.1和P1.0两个口接通五个键,K1,K2,K3,K4,K5分别用P2.0,P2.1,P2.2,P2.3,P2.4,P2.5控制五个灯,每个灯代表一个按键按下。可是我的程序能调试通过。可就是当模拟的时候看不到效果,出现两个现象(1)只有K1,K2和K3三个键的功能可以实现,K4,K5的就不行,我怀疑是不是我的对K4,K5的逻辑处理有问题。(2)P2.3的输出灯一直亮。当按下K1,K2和K3这三个键时候可以看见对应的灯亮(此时P2.3对应的
2、灯是灭的)。可是当按K4,K5时就不行了。没反应(P2.3对应的灯是亮的)。K0K1按键二极管接地P1.0P1.1K2K3K4按键的图就是上边那个,然后我通过按键程序的返回值为0,1,2,3,4。去控制P2.0,P2.1,P2.2,P2.3,P2.4,P2.5五个口。去驱动五个小灯(发光二极管)。程序如下,基本思想是先对P1.1和P1.0口输入11.然后读取P1口的状态,当读到00时就认为是K0按下,子程序返回0当读到01时认为是K1键按下,子程序返回1当读到10时认为是K2键按下。子程序返回2当读到11时。认为K0,K1,K2键都没有按下。则再对P1口输入
3、10。如果读到00时认为是K3按下。子程序返回3当读到其它状态时(10,11,01)再对P1口输入01如果读到00时隐时现认为是K4按下。子程序返回4#include#defineucharunsignedcharvoiddelay(unsignedinti);uchargetkey(void);ucharkeyvol;voidmain(void){P2=0x00;for(;;){keyvol=getkey();switch(keyvol){case0:{P2=0x01;}break;//驱动发光二极管case1:{P2=0x02;}bre
4、ak;case2:{P2=0x04;}break;case3:{P2=0x08;}break;case4:{P2=0x10;}break;default:break;}}}uchargetkey(void){ucharx;P1=P1
5、0x03;x=P1&0x03;if(x<3){delay(7000);//延时P1=P1
6、0x03;x=P1&0x03;}//直接返回K0,K1,K2键号0,1,2else{delay(7000);//延时P1=P1
7、0x03;x=P1&0x03;if(x>=3){P1=P1
8、0x03;P1=P1&0xfe;//P1口输入10x
9、=P1&0x03;x=x+3;}if(x==3){delay(7000);P1=P1
10、0x03;P1=P1&0xfe;//10x=P1&0x03;x=x+3;//返回K3键号}if(x>3){P1=P1
11、0x03;P1=P1&0xfd;//01x=P1&0x03;x=x+4;//返回K4键号if(x==4){delay(7000);P1=P1
12、0x03;P1=P1&0xfd;//01x=P1&0x03;x=x+4;}}}returnx;}voiddelay(unsignedinti){while(i--);}
此文档下载收益归作者所有