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

標題: 單片機按鍵一次處理的優化方法 [打印本頁]

作者: 51hei社區    時間: 2016-1-16 02:27
標題: 單片機按鍵一次處理的優化方法
                        以前做單片機的時候總會遇到一個問題就是:在單片機的鍵盤輸入的鍵盤一次處理時,原來的做法通常是通過“延時”等待鍵盤的松開,所以單片機就會停留在此處,其他的程序進行不下去。會出現顯示不正常、無響應等錯誤。
以前的程序如下:
其中p10P10端口做鍵盤輸入,p10= =0為按下,調用的delay程序為
voiddelay(unsigned int cnt)
{
unsigned char i;
while(cnt--!=0)
for(i=100;i!=0;i--);
}
鍵盤掃描子程序如下:
voidscankey()  //掃描按鍵
{
if(p10==0) //p10口按鍵及處理程序
      {
      delay(100);//鍵盤防抖動
      if(p10==0)
             {
             do delay(10);//如果鍵盤一直按下則一直“延時”等待松開
             while(p10==0);
             TR0=!TR0;   //松開時相應
             }
      }
}
所以從以上程序看如果程序一直按下則單片機一直會在延時程序等待,占用了整個單片機
我想通過flag可以很好的解決這個問題
bitflag=0; 定義標志
以下是鍵盤處理程序:
voidscankey()  //掃描按鍵
{

if(p10==0&&flag= =0) //p10口按鍵及處理程序,其中flag如果為1就不用再掃描
{
delay(10);
flag=1;
delay(5);
}
if(p10==1&&flag= =1)  //如果p101flag1說明已經被按下并抬起
{
TR0=!TR0;   //松開時相應
flag=0;   //標志清零,為下次按鍵做準備(其實為一次處理)
}
}
程序已經仿真,沒改過的之前,長按按鍵數碼管只有最后一個亮。
改過后長按按鍵,數碼管顯示正常。
細細回味非常有意思,和大家分享。







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