這兩天在學(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)亂碼,而臺式機(jī)上編譯的卻不會,都是vision3,不知道為什么會出現(xiàn)這樣恐怖的事情。
還有網(wǎng)站好像有什么錯誤,我登陸顯示密碼錯誤,而且不支持opera發(fā)帖,會出現(xiàn)混亂
昨天答復(fù)的帖子,可是系統(tǒng)出錯了,我重新寫下吧。
1.關(guān)于屏幕黑的問題,你的“ while(P1!=0xf0);//用while來確認(rèn)鍵釋放,能夠正常執(zhí)行程序!边@條語句放在主函數(shù)大循環(huán)里了,當(dāng)你按住不放,命令執(zhí)行始終停在這一條,不能繼續(xù)執(zhí)行下面的 dispbuf(),dipsbuf是你的顯示程序,不能執(zhí)行屏幕當(dāng)然要黑.
2.如果放到位置1上,已經(jīng)跳出if(P1!=0xf0) {}這個命令了,不會對里面的內(nèi)容產(chǎn)生影響。
3.亂碼不知道是怎么回事。
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |