?
前言:感謝您的關注哦,我會持續更新編程相關知識,愿您在這里有所收獲。如果有任何問題,歡迎溝通交流!期待與您在學習編程的道路上共同進步了。
?
目錄
一.? 器件介紹及實驗原理
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)獨立按鍵在開發板中的位置:
?
(2)按鍵介紹:
? 按鍵是一種電子開關,使用時輕輕按開關按鈕就可使開關接通,當松開手時, 開關斷開。開發板上使用的按鍵及內部簡易圖:
?
? 按鍵管腳兩端距離長的表示默認是導通狀態,距離短的默認是斷開狀態, 如 果按鍵按下,初始導通狀態變為斷開,初始斷開狀態變為導通。?
?
(3)按鍵的抖動:
? 通常的按鍵所用開關為機械彈性開關,當機械觸點斷開、閉合時,電壓信號 如下圖所示:
?? 由于機械點的彈性作用,按鍵開關在閉合時不會馬上穩定的接通,在斷開時也不會一下子斷開,因而在閉合和斷開的瞬間均伴隨著一連串的抖動。抖動時間 的長短由按鍵的機械特性決定的,一般為 5ms 到 10ms。按鍵穩定閉合時間的長 短則由操作人員的按鍵動作決定的,一般為零點幾秒至數秒。按鍵抖動會引起按 鍵被誤讀多次。為了確保 CPU 對按鍵的一次閉合僅作一次處理,必須進行消抖。?
?
(4)開發板中獨立按鍵模塊:
注意:1.這里開關K1對應P3-1,K2對應P3-0,K3對應P3-2,K4對應P3-3
? ? ? ? ? ?2.GND為接地符號,用于為電路提供一個電勢參考點,通常與電路的電源負極相連,即表示低電勢一端。
?
2.LED模塊 :
LED模塊圖:?
注意:1.具體介紹可見51單片機博客2(LED流水燈)
? ? ? ? ? ?2.這里VCC代表電源正極或者電路的供電電壓,即表示高電平一端?
?
3.獨立按鍵與核心的連接:
連接圖:
??
?
二.? 程序軟件設計
?
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.補充符號:
這里我們寫的程序中主要含等于,邏輯或,按位取反符號。?
?
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
感謝老鐵的瀏覽,希望老鐵可以一鍵三連加個關注,您的支持和鼓勵是我前進的動力,后續會分享更多學習編程的內容。?
?
?
?
?