这两天在学习按键的时候遇到一个问题不明白,想在这里请教一下各位。 这个问题是关于 判断按键是否消除。我在主程序中标出了出错的位置和情况,就是搞不懂为何会出错。请大家指正!
#include<reg51.h> #include<intrins.h> #define uint unsigned int uint code dsycode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff}; uint key[]={16,16,16,16,16,16}; //重启时所有管置暗 uint keynum,t=0;
//延时 void Delay(uint x) {int i; while(x--) for(i=0;i<120;i++); }
//显示程序 void Display() { int="int" m,i,j; for(j=0;j<100;j++) { m=0x7f; for(i=0;i<6;i++) { m="_crol_(m,1); " p2="m; " p0="dsycode[key]; " Delay(2); } }
}
//计算键值,并存入key数组当中,在Display中用来显示 void Keyscan() {uint temp; p1="0x0f; " temp="P1^0x0f; " switch(temp) { case="case" 1:keynum=0;break; case="case" 2:keynum=1;break; case="case" 4:keynum=2;break; case="case" 8:keynum=3;break; }
p1="0xf0; " temp="P1">>4^0x0f; switch(temp) { case 1:keynum+=0;break; case 2:keynum+=4;break; case 4:keynum+=8;break; case 8:keynum+=12;break; } key[t]=keynum; t=(t+1)%6; }
void main() {P1=0xf0; P0=0xff; P2=0xff; while(1) { if(P1!=0xf0) { Keyscan(); Delay(200); while(P1!=0xf0);//用while来确认键释放,能够正常执行程序。 //如果放到if语句之外,如位置1,会使程序出问题 /按下键后,数码管会黑,但无法计算键值,键松开后实验板将按key数组中的初值显示。 //这是为什么呢? } Display(); //~~~~~~~~~~位置1 } }
另外,我的笔记本编译的程序在数码管上会出现乱码,而台式机上编译的却不会,都是vision3,不知道为什么会出现这样恐怖的事情。
还有网站好像有什么错误,我登陆显示密码错误,而且不支持opera发帖,会出现混乱
[此贴子已经被作者于2009-10-5 16:01:09编辑过]
|