久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1662|回復: 2
收起左側

很經典不占用資源的單片機按鍵檢測程序

[復制鏈接]
ID:30165 發表于 2024-4-17 08:39 | 顯示全部樓層 |閱讀模式
不占用中斷 不使用延時  沒有死循環!!!不占用任何資源
這個按鍵檢測程序我在20年前網上看到過。當時沒有試用。今又看到這個單片機代碼。于是決定測試一下
unsigned char num,trg1=0, trg2=0,cont1=0,cont2=0;//一定是全局變量
unsigned char
sbit key1=P1^1;
sbit key2=P1^2;

unsigned key1scan()
{
unsigned char a=!key1;//網上是異或運算a=key1^0x01,對于一位按鍵可以直接寫成取反
trg1= a&(a^cont1);
cont1=a;
if(trg1&!key1) //網上是(trg1&key1)實際測試不能使用!!因為任何時候都不可能為真。只有改成(trg1&!key1)才可以完美執行!!!
return 1;//返回等于1 表示按鍵按下。
//{
//此處可以是自己需要執行的程序。(去掉前面的返回)
//}

}


unsigned key2scan()
{
unsigned char a=!key2;//網上是異或運算a=key2^0x01,對于一位按鍵可以直接寫成取反
trg2= a&(a^cont2);
cont2=a;
if(trg2&!key2)  
return 1;//返回等于1 表示按鍵按下。
//{
//此處可以是自己需要執行的程序。(去掉前面的返回)
//}

}

void main()
{
while(1)
{
  if(key1scan()) //每次按下按鍵只會執行一次,按鍵不放開絕對不會重復執行。
  {
    //自己的程序。
  }

if(key2scan()) //每次按下按鍵只會執行一次,按鍵不放開絕對不會重復執行。
  {
    num++;
if(num==20)//按一次按鍵 num加1.num可以作為switch程序的條件。
num=0;
  }

}

}

我今天吧這個代碼移植到一個帶按鍵的程序中。原來的按鍵按下不放開的時候,顯示屏停止顯示。因為有一句(while(!key1).現在換成這個按鍵不放,單片機沒有任何影響!!

此代碼也可以放到中斷程序 執行

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:1001436 發表于 2024-4-17 16:30 | 顯示全部樓層
原來大概就是靠現在MCU的高主頻,狂刷按鍵狀態,然后根據狀態變化處理按鍵
回復

使用道具 舉報

ID:385637 發表于 2024-4-18 17:53 | 顯示全部樓層
按鍵不用防抖的嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人综合一区二区三区 | 中文字幕在线观看精品 | 国产精品自产拍 | 亚洲精品成人在线 | 日日操日日干 | 国产精品免费大片 | 一二三四在线视频观看社区 | 中文在线一区二区 | 中文字幕黄色大片 | 久热国产精品视频 | 精品自拍视频 | 国产精品欧美精品日韩精品 | 亚洲 中文 欧美 日韩 在线观看 | 国产91一区二区三区 | 国产一区三区在线 | 亚洲成人精品 | 国产一区二区三区四区在线观看 | 国产影音先锋 | 综合久久综合久久 | 日韩av第一页 | 精久久 | 久草院线 | 91精品国产乱码久久久久久 | 午夜a区 | 亚洲男人的天堂网站 | 精品一区视频 | 国产精品美女久久久久aⅴ国产馆 | 亚洲国产精品一区二区第一页 | 亚洲欧美在线视频 | 日韩激情一区 | 特级生活片 | 日本一区二区三区四区 | 日韩一区二区三区在线 | av在线播放网址 | 天天拍天天色 | 国产精品3区 | 精品国产一二三区 | 亚洲人成在线播放 | 最新高清无码专区 | 巨大荫蒂视频欧美另类大 | 99久久精品国产麻豆演员表 |