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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1723|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品日韩 | 国产免费黄色片 | 天天射日日干 | 五月婷婷深深爱 | 国产成人精品免费 | 亚洲午夜精品 | 久久综合国产 | 美日韩精品 | 国产成人精 | 天天干一干 | 国产高潮在线观看 | 欧美精品在线看 | 国产女人高潮视频 | 一级理论片 | 欧美成人精品一区二区三区 | 午夜在线视频观看日韩17c | 日韩小视频在线观看 | av在线精品| a级片在线 | 亚洲精品福利视频 | 另类ts人妖一区二区三区 | 日韩精品免费视频 | 国产黄色片视频 | www.操| 国内自拍偷拍 | 日韩亚洲一区二区 | 日日干夜夜爽 | 亚洲欧美天堂 | 久久精品二区 | 久久久久久久影院 | 午夜999 | 日韩一区二区在线播放 | 国产视频成人 | 男人爱看的网站 | 国产99在线 | 精品国产欧美一区二区三区成人 | 亚洲视频三区 | 天天精品视频 | 国产精品九九 | 一区二区三区高清 | 夜夜躁狠狠躁日日躁av |