#include<reg51.h> unsigned char table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, 0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; void delay10ms(int n); void main() { unsigned char i,j,t; while(1) { P2=table[0]; P3=0x0F; t=P3; P3=t; while(P3==0x0F); delay10ms(1); if(P3!=0x0F) { switch(P3) { case 0x07:i=4;;break; case 0x0B:i=3;break; case 0x0D:i=2;break; case 0x0E:i=1;break; default:i=0;break; } P3=0xEF; t=P3; P3=t; if(P3!=0xEF) j=1; P3=0xDF; t=P3; P3=t; if(P3!=0xDF) j=2; P3=0xBF; t=P3; P3=t; if(P3!=0xBF) j=3; P3=0x7F; t=P3; P3=t; if(P3!=0x7F) j=4 ; P2=table[5*i-6+j]; } } } void delay10ms(int n) { int i,j; while(n--) { for(i=11;i>0;i--) for(j=108;j>0;j--); } }
这个是4*4矩阵键盘的源程序 ,我在KEIL和PROTEUS中联调一直单步运行能显示最后结果(要按下的那个键在PROTEUS电路中我连接起来让它短路,说明是这个键按下了),但是为什么在KEIL中生成.HEX文件 加载到PROTEUS中运行时,按下按键又没反应了,是不是上面的程序有问题,希望懂的高手能解答!!
[ 本帖最后由 cs350203 于 2011-1-1 20:13 编辑 ] |