51單片機學習(3)-----獨立按鍵控制LED的亮滅狀態

?

前言:感謝您的關注哦,我會持續更新編程相關知識,愿您在這里有所收獲。如果有任何問題,歡迎溝通交流!期待與您在學習編程的道路上共同進步了。

?

e6d98440ee274d5f9ee0ee6b6ac7f36a.jpeg

目錄

一.? 器件介紹及實驗原理

1.獨立按鍵

(1)獨立按鍵在開發板中的位置:

(2)按鍵介紹:

(3)按鍵的抖動:

(4)開發板中獨立按鍵模塊:

2.LED模塊?

3.獨立按鍵與核心的連接:

二.? 程序軟件設計

1.延時函數的設置 :

2.按鍵抖動的消除:?

3.補充符號:

4.程序設計:?

程序1:K1,K2控制同時控制LED1

程序2:K1控制LED1,K2控制LED2,K3控制LED3,K4控制LED4

三.實驗視頻?

? ?


?

一.? 器件介紹及實驗原理

?

1.獨立按鍵

(1)獨立按鍵在開發板中的位置:

f830656140d948b19df77de168c8e81a.png

?

(2)按鍵介紹:

? 按鍵是一種電子開關,使用時輕輕按開關按鈕就可使開關接通,當松開手時, 開關斷開。開發板上使用的按鍵及內部簡易圖:

f66cbe412eb24e72bb9ce17f567e78bf.png

?

? 按鍵管腳兩端距離長的表示默認是導通狀態,距離短的默認是斷開狀態, 如 果按鍵按下,初始導通狀態變為斷開,初始斷開狀態變為導通。?

?

(3)按鍵的抖動:

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

86ed13eccebd4a7f9b3a7cbc06c4867b.png

?? 由于機械點的彈性作用,按鍵開關在閉合時不會馬上穩定的接通,在斷開時也不會一下子斷開,因而在閉合和斷開的瞬間均伴隨著一連串的抖動。抖動時間 的長短由按鍵的機械特性決定的,一般為 5ms 到 10ms。按鍵穩定閉合時間的長 短則由操作人員的按鍵動作決定的,一般為零點幾秒至數秒。按鍵抖動會引起按 鍵被誤讀多次。為了確保 CPU 對按鍵的一次閉合僅作一次處理,必須進行消抖。?

?

(4)開發板中獨立按鍵模塊:

2d6019e471eb4d94920fc256265317f9.png

注意:1.這里開關K1對應P3-1,K2對應P3-0,K3對應P3-2,K4對應P3-3

? ? ? ? ? ?2.GND為接地符號,用于為電路提供一個電勢參考點,通常與電路的電源負極相連,即表示低電勢一端。

?

2.LED模塊 :

LED模塊圖:7a461cbebc1c4077b306baa4a641a3a9.png?

注意:1.具體介紹可見51單片機博客2(LED流水燈)

? ? ? ? ? ?2.這里VCC代表電源正極或者電路的供電電壓,即表示高電平一端?

?

3.獨立按鍵與核心的連接:

連接圖:

73a637b29a6e448889606405968a727b.png??

?

二.? 程序軟件設計

?

1.延時函數的設置 :

這里關于自定義的延時函數的獲取可以參考51單片機2(LED流水燈),具體程序如下:

void Delay(unsigned int xms)	//@11.0592MHz
{unsigned char data i, j;while(xms){i = 2;j = 199;do{while (--j);} while (--i);xms--;}
}

?

2.按鍵抖動的消除:?

? ?按鍵消抖有兩種方式,一種是硬件消抖,另一種是軟件消抖。為了使電路更 加簡單,通常采用軟件消抖。我們開發板也是采用軟件消抖,一般來說一個簡單 的按鍵消抖就是先讀取按鍵的狀態,如果得到按鍵按下之后,延時 10ms,再次 讀取按鍵的狀態,如果按鍵還是按下狀態,那么說明按鍵已經按下。其中延時 10ms 就是軟件消抖處理,這里給大家列出單片機常用的軟件去抖動方法:

(1)先設置 IO 口為高電平(由于開發板 IO 都有上拉電阻,所以默認 IO 為高 電平)。? ? ? ? ? (2)讀取 IO 口電平確認是否有按鍵按下。? ? ? (3)如有 IO 電平為低電平后,延時幾個毫秒。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

(4)再讀取該 IO 電平,如果仍然為低電平,說明按鍵按下。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

(5)執行按鍵控制程序。?

? ? ?獨立按鍵電路構成是由各個按鍵的一個管腳連接在一起接地,按鍵其他引腳 分別接到單片機 IO 口。 我們知道單片機的 IO 口既可作為輸出也可作為輸入使用,當檢測按鍵時用 的是它的輸入功能,獨立按鍵的一端接地, 另一端與單片機的 I/O 口相連,開 始時先給該 IO 口賦一高電平,然后讓單片機不斷地檢測該 I/O 口是否變為低 電平,當按鍵閉合時,即相當于該 I/O 口通過按鍵與地相連,變成低電平,程序一旦檢測到 I/O 口變為低電平則說明按鍵被按下,然后執行相應的指令。

?

3.補充符號:

6f50799ffa614b939ae5d0274cb767fc.png

這里我們寫的程序中主要含等于,邏輯或,按位取反符號。?

?

4.程序設計:?

程序1:K1,K2控制同時控制LED1

#include <REGX52.H>void Delay(unsigned int xms)	//@11.0592MHz  //延時函數設置
{unsigned char data i, j;while(xms){i = 2;j = 199;do{while (--j);} while (--i);xms--;}
}
void main()
{while(1)   //while循環語句{if(P3_1==0||P3_0==0)   //if語句,并且運用邏輯或{Delay(20);    //延時20ms,去除第一段抖動while(P3_1==0||P3_0==0);Delay(20);  //去除第二段抖動P2_0=~P2_0;   //按位取反,即對應的LED狀態改變}}
}

注意:這里對于端口的定義也可以參考流水燈博客一文,即對于0與1所對應的含義,及端口所代表的連接地方和功能。?

?

程序2:K1控制LED1,K2控制LED2,K3控制LED3,K4控制LED4

#include <REGX52.H>void Delay(unsigned int xms)	//@11.0592MHz
{unsigned char data i, j;while(xms){i = 2;j = 199;do{while (--j);} while (--i);xms--;}
}
void main()
{while(1){if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);P2_0=~P2_0;}if(P3_0==0){Delay(20);while(P3_0==0);Delay(20);P2_1=~P2_1;}if(P3_2==0){Delay(20);while(P3_2==0);Delay(20);P2_2=~P2_2;}if(P3_3==0){Delay(20);while(P3_3==0);Delay(20);P2_3=~P2_3;}}
}

?

三.實驗視頻?

?

51單片機獨立矩陣控制LED?

51單片機獨立矩陣控制LED

感謝老鐵的瀏覽,希望老鐵可以一鍵三連加個關注,您的支持和鼓勵是我前進的動力,后續會分享更多學習編程的內容。?

?

?

?

?

? ?

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

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

相關文章

react 實現路由攔截

簡單介紹下項目背景&#xff0c;我這里做了一個demo&#xff0c;前端使用mock數據&#xff0c;然后實現簡單的路由攔截&#xff0c;校驗session是否包含用戶作為已登錄的依據&#xff0c;react-router-dom是v6。不像vue可以設置登錄攔截beforeenter&#xff0c;react需要我們自…

外包干了3個月,技術退步明顯

先說一下自己的情況&#xff0c;本科生&#xff0c;19年通過校招進入廣州某軟件公司&#xff0c;干了接近4年的功能測試&#xff0c;今年年初&#xff0c;感覺自己不能夠在這樣下去了&#xff0c;長時間呆在一個舒適的環境會讓一個人墮落!而我已經在一個企業干了四年的功能測試…

Linux之用戶和用戶組的深入了解

目錄 一、簡介 1.1、用戶&#xff1a; 1.2、用戶組 1.3、UID和GID 1.3、用戶賬戶分類 查看用戶類別 超級用戶root(0) 程序用戶(1~499) 普通用戶(500~65535) 二、用戶 2.1、添加新的用戶賬號&#xff1a;useradd 2.2、刪除賬號&#xff1a;userdel 有-r與沒有-r區別…

OSDI 2023: Hyrax Fail-in-Place Server Operation in Cloud Platforms

我們使用以下6個分類標準對本文的研究選題進行分析: 1. 硬件故障類型 DRAM: 此類別涉及研究如何處理內存相關的錯誤。這包括單比特錯誤,使用傳統 ECC 進行校正,以及需要冗余、修復技術或隔離故障內存區域的更廣泛的故障。磁盤: 此處研究將解決存儲故障,尤其是 SSD 中的故障…

運維07:堡壘機

什么是跳板機 跳板機就是一臺服務器而已&#xff0c;運維人員在使用管理服務器的時候&#xff0c;必須先連接上跳板機&#xff0c;然后才能去操控內網中的服務器&#xff0c;才能登錄到目標設備上進行維護和操作 開發小張 ---> 登錄跳板機 ---> 再登錄開發服務器 測試…

貸齊樂系統最新版SQL注入(無需登錄繞過WAF可union select跨表查詢)

一、環境 已上傳資源&#xff08;daiqile&#xff09; 二、代碼解釋 1.1Request 不管get請求還是post請求都可以接收到 1.2過濾的還挺多 1.3第二個WAF把數據分為兩個了一個Key一個value&#xff0c;全是explode的功勞 1.4submit是if進入的前提 很明顯走進來了 1.5那我們在這…

學習JAVA的第三天(基礎)

目錄 流程控制語句 順序結構 分支結構 循環結構 分類&#xff1a; 練習 跳轉控制語句 練習 數組 數組介紹 數組的定義和靜態初始化 數組定義 數組的靜態初始化 數組元素訪問 數組遍歷 數組動態初始化 JAVA內存分配 流程控制語句 順序結構 是Java程序默認的執行流程…

UIKit 在 UICollectionView 中拖放交換 Cell 視圖的極簡實現

概覽 UIKit 中的 UICollectionView 視圖是我們顯示多列集合數據的不二選擇&#xff0c;而豐富多彩的交互操作更是我們選擇 UICollectionView 視圖的另一個重要原因。 如上圖所示&#xff1a;我們實現了在 UICollectionView 中拖放交換任意兩個 Cell 子視圖的功能&#xff0c;這…

js如何判斷一個對象中某一個屬性存在并且有值

在JavaScript中&#xff0c;可以使用不同的方法來判斷一個對象中某個屬性是否存在并且有值。以下是幾種常見的方法&#xff1a; 1、使用hasOwnProperty()方法&#xff1a;該方法用于檢查對象是否具有指定的屬性。可以通過以下方式來判斷屬性是否存在并且有值&#xff1a; if (…

整理了去年的一些運維面試題一

Ingress的yaml文件需要包含哪些&#xff1f; CICD搭建流程&#xff1f; JAVA程序打包工具&#xff1f; 如何檢測Linux端口如何通信&#xff1f; k8s集群之間如何通信的&#xff1f; docker組成部分&#xff1f; 20位掩碼有多少主機IP&#xff1f; 在linux中四個T的硬盤使用什…

Zabbix 遠程監控主機

目錄 1、安裝 Zabbix 安裝客戶端 服務端測試通訊 Web頁面添加主機 2、監控 Nginx 自定義腳本監控 Nginx web配置臺 3、監控 MySQL 配置模版文件 配置Web界面 1、安裝 Zabbix node-12 作為zabbix的被監控端&#xff0c;提供mysql服務器&#xff0c;配置zabbix監控node…

jquery寫組件滑動人機驗證組件

jquery組件&#xff0c;雖然 jquery 語法古老&#xff0c;但是寫好了用起來真的很爽啊&#xff0c;本文用滑動人機驗證給大家做個詳細教程&#xff08;直接復制代碼就可以用噢o(*&#xffe3;▽&#xffe3;*)ブ&#xff09; 第一步 先看下組件本身 component.js (function() {…

Nginx網絡服務三-----(三方模塊和內置變量)

1.驗證模塊 需要輸入用戶名和密碼 我們要用htpasswd這個命令&#xff0c;先安裝一下httpd 生成文件和用戶 修改文件 訪問頁面 為什么找不到頁面&#xff1f; 對應的路徑下&#xff0c;沒有這個文件 去創建文件 去虛擬機瀏覽器查看 有的頁面不想被別人看到&#xff0c;可以做…

【UI自動化】使用poco框架進行元素唯一定位

直接選擇&#xff1a; 1.poco(text買入).click() 2.poco("android.widget.ImageView").click()相對選擇、空間選擇&#xff1a; 3.poco(text/name).parent().child()[0].click()正則表達式&#xff1a; 4.listpoco(textMatches".*ETF")今天主要想記錄下…

centos 系統盤 放到 win pc 中的異常解決

有一塊 2.5 480g sata ssd&#xff0c;之前是筆記本電腦的centos系統盤&#xff0c;后來沒用了&#xff0c;打算掛到臺式機上當下載盤。臺式機pc的主板是華碩 h610m-a。 難點一&#xff1a; 因為臺式pc上已經掛了兩塊3.5 hdd&#xff0c;發現sata的電源線都在3.5hdd附近&#…

利用RBI(Remote Browser Isolation)技術訪問ChatGPT

系統組網圖 #mermaid-svg-Bza2puvd8MudMbqR {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Bza2puvd8MudMbqR .error-icon{fill:#552222;}#mermaid-svg-Bza2puvd8MudMbqR .error-text{fill:#552222;stroke:#552222;…

300分鐘吃透分布式緩存-10講:MC是怎么定位key的?

我們在進行 Mc 架構剖析時&#xff0c;除了學習 Mc 的系統架構、網絡模型、狀態機外&#xff0c;還對 Mc 的 slab 分配、Hashtable、LRU 有了簡單的了解。本節課&#xff0c;將進一步深入學習這些知識點。 接下來&#xff0c;進入 Memcached 進階的學習。會講解 Mc 是如何進行…

QT應用軟件【協議篇】周立功CAN接口卡代碼示例

文章目錄 USBCAN系列CAN接口卡規格參數資料下載QT引用周立功的庫安裝sdk代碼USBCAN系列CAN接口卡 USBCAN系列CAN接口卡兼容USB2.0全速規范,可支持1/2/4/8路CAN接口。采用該接口卡,PC機可通過USB連入CAN網絡,進行CAN總線數據采集和處理,主要具備以下幾大優勢特點: 支持車載…

正交匹配追蹤(Orthogonal Matching Pursuit, OMP)的MATLAB實現

壓縮感知&#xff08;Compressed Sensing, CS&#xff09;是一種利用稀疏信號的先驗知識&#xff0c;用遠少于奈奎斯特采樣定理要求的樣本數目恢復整個信號的技術。正交匹配追蹤&#xff08;Orthogonal Matching Pursuit, OMP&#xff09;是一種常見的貪婪算法&#xff08;Gree…

【CF】團隊訓練賽2 J-Palindrome Reversion 題解

傳送門&#xff1a;Palindrome Reversion 標簽&#xff1a;字符串 題目大意 規定一個操作&#xff1a;選擇字符串中的一段區間[l,r]并使其翻轉。現在給出一個字符串s&#xff0c;你要判斷能否通過一次操作使其變為回文串。 輸入&#xff1a;一個字符串&#xff0c;其長度不超…