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