這兩天在學(xué)習(xí)按鍵的時候遇到一個問題不明白,想在這里請教一下各位。 這個問題是關(guān)于 判斷按鍵是否消除。我在主程序中標(biāo)出了出錯的位置和情況,就是搞不懂為何會出錯。請大家指正!
#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數(shù)組當(dāng)中,在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來確認(rèn)鍵釋放,能夠正常執(zhí)行程序。 //如果放到if語句之外,如位置1,會使程序出問題 /按下鍵后,數(shù)碼管會黑,但無法計算鍵值,鍵松開后實驗板將按key數(shù)組中的初值顯示。 //這是為什么呢? } Display(); //~~~~~~~~~~位置1 } }
另外,我的筆記本編譯的程序在數(shù)碼管上會出現(xiàn)亂碼,而臺式機上編譯的卻不會,都是vision3,不知道為什么會出現(xiàn)這樣恐怖的事情。
還有網(wǎng)站好像有什么錯誤,我登陸顯示密碼錯誤,而且不支持opera發(fā)帖,會出現(xiàn)混亂
[此貼子已經(jīng)被作者于2009-10-5 16:01:09編輯過]
|