欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 關于按鍵判斷while放置位置不同導致程序運行的問題 [打印本頁]

作者: 碳棒    時間: 2009-10-5 15:53
標題: 關于按鍵判斷while放置位置不同導致程序運行的問題

這兩天在學習按鍵的時候遇到一個問題不明白,想在這里請教一下各位。
這個問題是關于 判斷按鍵是否消除。我在主程序中標出了出錯的位置和情況,就是搞不懂為何會出錯。請大家指正!

#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編輯過]

作者: 牧笛橫吹    時間: 2009-10-10 10:24

昨天答復的帖子,可是系統出錯了,我重新寫下吧。

 

1.關于屏幕黑的問題,你的“ while(P1!=0xf0);//用while來確認鍵釋放,能夠正常執行程序!边@條語句放在主函數大循環里了,當你按住不放,命令執行始終停在這一條,不能繼續執行下面的 dispbuf(),dipsbuf是你的顯示程序,不能執行屏幕當然要黑.

 

2.如果放到位置1上,已經跳出if(P1!=0xf0) {}這個命令了,不會對里面的內容產生影響。

 

3.亂碼不知道是怎么回事。


作者: heicad    時間: 2009-10-10 13:44
謝謝,解釋得很好 我完全懂了




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1