【51單片機系列】獨立按鍵介紹

本文是關于獨立按鍵的介紹及使用。首先介紹了按鍵,包括什么是按鍵及使用按鍵時如何實現軟件消抖。然后使用proteus仿真實現獨立按鍵控制LED指示燈的操作。

之前的LED、蜂鳴器、數碼管中IO口都是作為輸出使用,這里通過獨立按鍵實驗介紹IO口作為輸入的使用。

文章目錄

  • 一、按鍵介紹
  • 二、獨立按鍵檢測原理
  • 三、硬件設計
  • 四、軟件設計

一、按鍵介紹

按鍵是一種電子開關,使用時按開關按鈕就可使開關接通,當松開手時,開關斷開。簡單的按鍵及內部簡易圖如下:

按鍵及內部簡易圖

按鍵管腳兩端距離長的表示默認是導通狀態,距離短的默認是斷開狀態。

如果按鍵按下,初始導通狀態變為斷開,初始斷開狀態變為導通。

通常的按鍵使用的開關為機械彈性開關,當機械觸電斷開、閉合時,電壓信號如下所示:

機械觸點斷開閉合時的電壓信號

由于機械點的彈性作用,按鍵開關在閉合時不會馬上穩定的接通,在斷開時也不會一下子斷開。因而在閉合和斷開的瞬間均伴隨著一連串的抖動。抖動時間的長短由按鍵的機械特性決定,一般為5ms到10ms。

按鍵穩定閉合時間的長短由操作人員的按鍵動作決定,一般為零點幾秒至數秒。按鍵抖動會引起按鍵被誤讀多次。為了確保CPU對按鍵的依次閉合僅作一次處理,必須及時進行消抖。

按鍵消抖有兩種方式,一種是硬件消抖,另一種是軟件消抖。為了使電路更加簡單,通常采用軟件消抖。

軟件消抖一般來說一個簡單的按鍵消抖就是先讀取按鍵的狀態,如果得到按鍵按下之后,延時10ms,再次讀取按鍵狀態,如果按鍵還是按下狀態,那么說明按鍵已經按下。其中的延時10ms就是軟件消抖處理。

常用的軟件去抖動方法:

  1. 先設置IO口為高電平,由于開發板IO有上拉電阻,默認IO為高電平;
  2. 讀取IO口電平確認是否有按鍵按下;
  3. 如果有IO電平為低電平后,延時幾個毫秒;
  4. 再讀取該IO電平,如果仍為低電平,說明按鍵按下;
  5. 執行相應按鍵的程序;

鍵盤分為編碼鍵盤和非編碼鍵盤。鍵盤上閉合鍵的識別由專用的硬件編碼器實現,并產生鍵編碼號或鍵值的稱為編碼鍵盤,如計算機鍵盤。靠軟件編程來識別的鍵盤稱為非編碼鍵盤。

單片機系統中,用的較多的是非編碼鍵盤。非編碼鍵盤又分為獨立鍵盤和行列式鍵盤(即常說的矩陣鍵盤)。

二、獨立按鍵檢測原理

獨立按鍵電路構成是由各個按鍵的一個管腳連接在一起接地,按鍵其它引腳分別接到單片機IO口。

單片機的IO口既可作為輸出也可作為輸入使用,當檢測按鍵時用的是它的輸入功能,獨立按鍵的一端接地,另一端與單片機的某個IO口相連,開始時先給IO口賦一高電平,然后讓單片機不斷檢測該IO口是否變為低電平,當按鍵閉合時,相當于該IO口通過按鍵與地相連,變成低電平,程序一旦檢測到IO口變為低電平則說明按鍵被按下,然后執行相應的指令。

三、硬件設計

要實現的功能是:通過開發板上的獨立按鍵控制LED指示燈亮滅。使用到的硬件資源如下:

  • LED指示燈
  • K1按鍵

proteus中仿真如下:

獨立按鍵硬件設計

從電路中可以知道,該電路是獨立的,4個獨立按鍵的控制管腳直接連接到單片機的P3^0 ~ P3^3 IO口上。

要想單片機能夠檢測按鍵是否按下,需要通過單片機管腳來控制獨立按鍵。

四、軟件設計

實現代碼如下:

/*實現功能:使用獨立按鍵控制指示燈的亮滅[2023-12-06] zoya
*/
#include "reg52.h"typedef unsigned int u16;sbit KEY1 = P3^0;  // 獨立按鍵#define GPIO_LED P2  // 指示燈// 延時函數,i=1延時10us
void delay(u16 i)
{while(i--);
}// 獨立按鍵處理函數
void keypros()
{if(0 == KEY1){  // 2. 讀取IO口是否為低電平確認按鍵是否按下delay(1000);  // 3. 延時10msif(0 == KEY1) {  // 4. 在讀取IO口判斷是否為低電平,如果仍然是低電平,說明按鍵按下GPIO_LED = ~GPIO_LED;  // 5. 執行按鍵按下的操作}while(!KEY1);  // 6. 穩定閉合期間保持按鍵操作}
}void main()
{KEY1 = 1;  // 1. 先設置IO口為高電平GPIO_LED = 0xFF;  // 默認指示燈為不亮狀態while(1){keypros();}
}

仿真結果:

獨立按鍵控制指示燈

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211242.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211242.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211242.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Edge 中的msedgewebview2總想聯網

目錄預覽 一、問題描述二、原因分析三、解決方案四、參考鏈接 一、問題描述 使用Edge瀏覽器的時候,右下角火絨總會彈出“msedgewebview2”想要聯網的彈窗,如下 點擊發起程序,找到路徑如下: C:\Program Files (x86)\Microsoft\…

zabbix 進階

zabbix的字段發現機制: zabbix客戶端主動和服務端聯系,將自己的地址和端口發送服務端實現字段添加監控主機。 客戶端是主動一方。 缺點:自定義網段中主機數量太多,登記耗時會很久,而且這個自動發現機制不是很穩定。…

centos6.8下載地址

Index of /centos-store/6.8/isos/x86_64/ (liu.se) archive.kernel.org : http - rsynclinuxsoft.cern.ch : http - rsyncmirror.nsc.liu : http - rsync

被遺忘的書籍

C-被遺忘的書籍_牛客小白月賽82 (nowcoder.com) #include <iostream> #include <queue> #include <string> #include <stack> #include <vector> #include <set> #include <map> #include <unordered_map> #include <unor…

計組中各種透明性總結

虛擬存儲器&#xff0c;對應用程序員不可見。主存- cache層由硬件自動完成&#xff0c;對程序員不可見。cache純硬件&#xff0c;程序員不可見。內存&#xff0c;對程序員可見。知識點來源&#xff1a;王道模擬第六套主存-輔存層由硬件和操作系統共同完成&#xff0c;對應用程序…

【Docker一】Docker架構、鏡像操作和容器操作

一、docker基本管理和概念 1、概念 docker&#xff1a;開源的應用容器引擎。基于go語言開發的。運行在Linux系統中的開源的輕量級的“虛擬機” docker的容器技術可用在一臺主機上輕松到達為任何應用創建一個輕量級到的&#xff0c;可移植的&#xff0c;自給自足的容器 dock…

免費的數據采集軟件,最新免費的幾款數據采集軟件【2024】

在當今數字化時代&#xff0c;數據是企業決策和業務發展的關鍵。而如何高效獲取數據成為許多企業和研究機構的關注焦點。本文將深入探討數據采集軟件的種類。幫助大家選擇最適合自己需求的數據采集工具。 數據采集軟件種類 在眾多數據采集軟件中&#xff0c;有一類強大而多樣…

postgresql自帶指令命令系列二

簡介 在安裝postgresql數據庫的時候會需要設置一個關于postgresql數據庫的PATH變量 export PATH/home/postgres/pg/bin:$PATH&#xff0c;該變量會指向postgresql安裝路徑下的bin目錄。這個安裝目錄和我們在進行編譯的時候./configure --prefix [指定安裝目錄] 中的prefix參…

跨境電商運營常用的ChatGPT通用提示詞模板

市場分析&#xff1a;如何分析目標市場&#xff1f; 選品策略&#xff1a;如何選擇要銷售的商品&#xff1f; 供應鏈管理&#xff1a;如何管理供應鏈&#xff1f; 物流解決方案&#xff1a;如何選擇合適的物流解決方案&#xff1f; 跨國支付&#xff1a;如何處理跨國支付&a…

labelimg遇到的標簽修改問題:修改一張圖像的標簽時,保存后導致classes.txt改變

問題描述&#xff1a;修改一張圖像的標簽時候&#xff0c; classes.txt 會同步更新&#xff0c;導致重新生成了 classes.txt 但是這個 classes.txt 只有你現在寫的那個類別名&#xff0c;以前的沒有了。 解決&#xff1a;設置一個 predefined_classes.txt&#xff0c;內容和模…

Metasploit滲透測試的漏洞利用和攻擊方法

預計更新 第一章 Metasploit的使用和配置 1.1 安裝和配置Metasploit 1.2 Metasploit的基礎命令和選項 1.3 高級選項和配置 第二章 滲透測試的漏洞利用和攻擊方法 1.1 滲透測試中常見的漏洞類型和利用方法 1.2 Metasploit的漏洞利用模塊和選項 1.3 模塊編寫和自定義 第三章 Me…

基于ssm理發店會員管理系統的設計和實現論文

摘 要 網絡技術和計算機技術發展至今&#xff0c;已經擁有了深厚的理論基礎&#xff0c;并在現實中進行了充分運用&#xff0c;尤其是基于計算機運行的軟件更是受到各界的關注。加上現在人們已經步入信息時代&#xff0c;所以對于信息的宣傳和管理就很關鍵。因此理發店會員信息…

Cache的基本概念和原理

目錄 一. Cache的工作原理二. 局部性原理三. 性能分析四. 待解決的問題 \quad 一. Cache的工作原理 \quad 存儲系統存在的問題 雖然雙端口RAM、多模塊存儲器提高存儲器的工作速度, 但是優化后的速度與CPU差距依然很大, 為了改善這個問題就出現了Cache, 來解決存儲器與CPU速度不…

創作活動(五十一)———編程中常見的技術難題有哪些?

#編程中常見的技術難題有哪些&#xff1f;# 編程世界里的三大謎題&#xff1a;bug、性能優化與跨平臺兼容性 每個職業都有其固有的挑戰和困難&#xff0c;對于程序員來說&#xff0c;這些困難往往來自于技術本身。編程&#xff0c;就像是一個充滿謎題的世界&#xff0c;而程序…

大屏適配方案二——vw和vh

按照設計稿的尺寸&#xff0c;將px按比例計算轉為vw和vh&#xff0c;轉換公式如下 假設設計稿尺寸為 1920*1080&#xff08;做之前一定問清楚 ui 設計稿的尺寸&#xff09;即&#xff1a; 網頁寬度1920px 網頁高度1080px我們都知道 網頁寬度100vw 網頁寬度100vh所以&#xff0…

ubuntu安裝docker及docker常用命令

docker里有三個部分 daemon 鏡像 和 容器 我們需要了解的概念 容器 鏡像 數據卷 文章目錄 docker命令docker鏡像相關命令docker容器相關命令數據卷ubuntu安裝docker docker命令 #啟動&#xff0c;停止&#xff0c;重啟docker systemctl start docker systemctl stop docker s…

SpringBoot的依賴管理和自動配置

與其明天開始&#xff0c;不如現在行動&#xff01; 文章目錄 1 依賴管理機制2 自動配置機制2.1 初步理解2.2 完整流程 &#x1f48e;總結 1 依賴管理機制 為什么導入starter-web后所有相關依賴都會導入進來&#xff1f; 開發什么場景&#xff0c;導入什么場景啟動器-spring-bo…

vscode調試pytorch分布式訓練

launch.json文件如下"cwd" "${fileDirname}"表示代碼調試的根目錄是當前你調試的文件&#xff0c;也就是pretrain.py所在的目錄。其他路徑參數都是相對這個目錄的 如果改成"cwd" "${workspaceFolder}" 表示代碼調試的根目錄是打開的工…

【Python百寶箱】構筑銅墻鐵壁:Python 認證與授權庫實戰指南

Python認證與授權&#xff1a;構建安全、可擴展的應用 前言 在當今數字化時代&#xff0c;用戶認證和授權是構建安全、可信任的應用程序的基石。Python生態系統提供了豐富而強大的庫和工具&#xff0c;以支持多種身份驗證和授權方案。本文將深入探討一系列Python庫&#xff0…

MyBatis框架中的5種設計模式總結

前言 MyBatis框架中使用的5種設計模式分別是&#xff1a;1、建造者模式&#xff08;生成器模式&#xff09;。2、工廠模式。3、單例模式。4、代理模式。5、適配器模式。 1、建造者模式&#xff08;生成器模式&#xff09; 在MyBatis環境的初始化過程中&#xff0c;SqlSessio…