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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5001|回復: 0
打印 上一主題 下一主題
收起左側

單片機按鍵一次處理的優化方法

[復制鏈接]
跳轉到指定樓層
樓主
ID:102668 發表于 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;   //標志清零,為下次按鍵做準備(其實為一次處理)
}
}
程序已經仿真,沒改過的之前,長按按鍵數碼管只有最后一個亮。
改過后長按按鍵,數碼管顯示正常。
細細回味非常有意思,和大家分享。


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表