星之深 星之深
关注数: 17 粉丝数: 53 发帖数: 3,663 关注贴吧数: 6
求教一个循环问题 #include"reg51.h" #define key_port P0 sbit hc573_en = P1^3; unsigned char key_value; void delay(unsigned int z) {unsigned int x,y;for(x=z;x>0;x--)for(y=100;y>0;y--);} void key_scan(){ unsigned char temp; key_port = 0x7f; delay(5); temp=key_port; switch(temp) { case 0x77: key_value=1;break; case 0x7b: key_value=2;break; case 0x7d: key_value=3;break; case 0x7e: key_value=4;break; default:break; } while(key_port!=0x7f); key_port = 0xbf; delay(5); temp=key_port; switch(temp) { case 0xb7: key_value=5;break; case 0xbb: key_value=6;break; case 0xbd: key_value=7;break; case 0xbe: key_value=8;break; default:break; } while(key_port!=0xbf); key_port = 0xdf; delay(5); temp=key_port; switch(temp) { case 0xd7: key_value=9;break; case 0xdb: key_value=10;break; case 0xdd: key_value=11;break; case 0xde: key_value=12;break; default:break; } while(key_port!=0xdf); key_port = 0xef; delay(5); temp=key_port; switch(temp) { case 0xe7: key_value=13;break; case 0xeb: key_value=14;break; case 0xed: key_value=15;break; case 0xee: key_value=0;break; default:break; } while(key_port!=0xef); } main() {hc573_en=0;P1=0; hc573_en=1; P2=0; key_value=0xff; while(1) { key_scan(); P2=~key_value; }} 这是一个扫描矩阵键盘的程序,我的问题是,比如按下按键1不放开,那么主函数的while(1)在调用函数key_scan()时候,key_value确实等于1,但如果手一直不放开的话,会一直循环在while(key_port!=0xbf),即循环在主函数while(1)的key_scan();不会跳到下一句P2=~key_value;那么P2就不会输出了,我这么理解对不对?
首页 1 2 3 4 5 6 下一页