1. 程式人生 > >51微控制器:獨立按鍵與矩陣按鍵控制數碼管

51微控制器:獨立按鍵與矩陣按鍵控制數碼管

一,獨立按鍵注意一下幾點

>按下的時候,電壓被拉低,所以IO口要傳低電平( 0x0 )

>按下的時候要消除抖動 ( 延時10ms ),在判斷,是否還是低電平,再做業務處理

下面這段程式,就是通過一個獨立按鍵連線到p1口,控制靜態數碼管的 一段 進行亮和滅的切換。

#include <reg52.h>

sbit key_control = P1^0;
sbit led = P0^0;

typedef unsigned char u8;
typedef unsigned int u16;

void delay( u16 i ){
    while( i-- );
}

void key_press(){ if( key_control == 0x0 ) { delay( 1110 ); if( key_control == 0x0 ){ led = ~led; } while( !key_control ); } } void main (){ /* while( 1 ){ if( key_control == 0x0 ) { delay( 1110 ); //大概10ms if ( key_control == 0x0 ) { led = 1; } }else if( key_control == 0x1 ) { delay( 1110 ); if ( key_control == 0x1 ) { led = 0; } } }
*/ led = 0; while( 1 ) { key_press(); } }

二, 當按鍵比較多的時候,用矩陣按鈕,因為如果不用矩陣按鈕,一個獨立按鍵需要一個IO口,浪費資源。

如: 16個獨立按鍵需要16個io口, 而16個矩陣按鍵(4x4,一共8個管腳)需要8個IO口

下面的程式,通過16個矩陣按鈕,控制靜態數碼管,顯示0~F

#include <reg52.h>

#define GPIO_DIG    P0   //段選數碼管
#define GPIO_KEY     P1      //
矩陣按鍵 typedef unsigned char u8; typedef unsigned int u16; void delay( u16 i ){ while( i-- ); } u8 key_value; //靜態數碼管段碼 u8 character [16] = { 0xC0, 0xF9 , 0xA4 , 0xB0 , 0x99 , 0x92, 0x82 , 0xF8 , 0x80 , 0x90 , 0x88 , 0x83, 0xC6 , 0xA1 , 0x86 , 0x8E}; void key_down(){ u8 count = 0; //行列掃描 判斷哪個鍵被按下 GPIO_KEY = 0x0F; //高四位全部輸出低電平,低四位輸出高電平-->判斷被按下的按鈕所在的列 if( GPIO_KEY != 0x0F ) { //有按鍵按下 delay( 1110 ); //消除抖動 if( GPIO_KEY != 0x0F ){ switch( GPIO_KEY ){ case 0x07: key_value = 0; //矩陣第1列的按鈕被按下 break; case 0x0B: key_value = 1; //矩陣第2列的按鈕被按下 break; case 0x0D: key_value = 2; //矩陣第3列的按鈕被按下 break; case 0x0E: key_value = 3; //矩陣第4列的按鈕被按下 break; } GPIO_KEY = 0xF0; //高四位輸出高電平,低四位輸出低電平-->判斷被按下的按鈕所在的行 switch( GPIO_KEY ){ case 0x70: key_value = key_value; //矩陣第1行的按鈕被按下 break; case 0xB0: key_value = key_value + 4; //矩陣第2行的按鈕被按下 break; case 0xD0: key_value = key_value + 8; //矩陣第3行的按鈕被按下 break; case 0xE0: key_value = key_value + 12; //矩陣第4行的按鈕被按下 break; } GPIO_DIG = character[key_value]; //如果一直按下按鍵,等待500ms,強制退出 while( ( count < 50 ) && ( GPIO_KEY != 0xF0 ) ) { count++; } } } } void main (){ while( 1 ) { key_down(); } }

相關推薦

51微控制器獨立按鍵矩陣按鍵控制數碼

一,獨立按鍵注意一下幾點 >按下的時候,電壓被拉低,所以IO口要傳低電平( 0x0 ) >按下的時候要消除抖動 ( 延時10ms ),在判斷,是否還是低電平,再做業務處理 下面這段程式,就是通過一個獨立按鍵連線到p1口,控制靜態數碼管的 一段 進行亮和滅的切換。 #include &l

51單片機獨立按鍵矩陣按鍵控制數碼

#define clas 4行 ++ 浪費 down 技術分享 sig .com 一,獨立按鍵註意一下幾點 >按下的時候,電壓被拉低,所以IO口要傳低電平( 0x0 ) >按下的時候要消除抖動 ( 延時10ms ),在判斷,是否還是低電平,再做業務處理 下

關於獨立按鍵矩陣按鍵的程式(51微控制器)

發一個51微控制器的鍵盤掃描程式,演算法簡單有效                                       再給大家分享一個不錯按鍵程式(來自ourdev)/**************************************** 鍵盤_不採用定時

基於proteus的51微控制器模擬例項六十、8位數碼顯示例項

1、本例實現在8位數碼管上同時顯示多個不同字元。 2、本例使用了8只整合式7段共陽數碼管(pruteus中元件標識為7seg-mpx8-ca-blu,共陽為ca,共陰為cc),所有8個數碼管的段碼引腳a,b,c,d,e,f,g,dp都是分別並聯在一起,任何時候傳送的段碼

單片機入門-矩陣鍵盤控制數碼顯示

矩陣 right 控制 入門 i/o num .cn mar oid 任務簡述:通過按下4X4矩陣鍵盤實現數碼管對應顯示數字 實現方式:通過行列分接法,可以節省使用單片機的I/O口,掃描矩陣鍵盤是否有按下,判斷P2端口得到的值。 protues 硬件系統 單片機晶振復位電

51微控制器獨立按鍵矩陣鍵盤(概念及原理)

一、基本知識         1.按鍵分類與輸入原理         按鍵按照結構原理科分為兩類,一類是觸點式開關按鍵,如機械式開關、導電橡膠式開關燈;另一類是無觸點式開關按鍵,如電氣式按鍵,磁感應按鍵等。前者造價低,後者壽命長。目前,微機系統中最常見的是觸點式開關按鍵。

利用51微控制器矩陣鍵盤按鍵顯示0--F在數碼

程式碼如下:       #include <reg52.h> #define uchar unsigned char #define uint  unsigned int sbit we = P2^7; sbit du = P2^

51微控制器STC89C52 獨立按鍵檢測

KEY1 BIT P3.4 LED1 BIT P1.0 LED2 BIT P1.1 ORG 0000H LOOP: SETB KEY1 JNB KEY1,KEY1DOWN0 SJMP LOOP K

51微控制器獨立按鍵控制LED

1.獨立按鍵的原理(1703A)1.獨立按鍵一共有四個針腳,兩個短針腳之間預設不導通,兩個長針腳之間預設導通2.按下按鈕後,會出現“抖動”,消抖後,輸入低電平;2.為什麼會出現按下按鈕輸入低電平?1.對於p1,p2,p3口而言,是屬於準雙向IO口結構,在按下按鈕(按鈕在p3口

(學習筆記)手把手教你學51微控制器中斷數碼動態顯示

一、c語言的陣列 1.1陣列的基本概念 陣列是具有相同資料型別的有序資料的組合,一般來講陣列定義後滿足以下三個條件: (1)具有相同的資料型別 (2)具有相同的名字 (3)在儲存器中是被連續存放的 1.2陣列的宣告 資料型別 陣列名【陣列長度】; (1)同一個

(學習筆記)手把手教你學51微控制器變數進階點陣LED

一、變數的作用域 作用域:變數的有效範圍。分為:區域性變數和全域性變數。 1.1區域性變數 在函式內部宣告的變數,只在本函式內部可以使用。 1.2全域性變數 在函式外宣告的變數就是全域性變數。 二、變數的儲存類別 變數的儲存類別分為自動、靜態、暫存器和外部四種。

51微控制器按鍵控制數碼加減和秒錶

#include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit k1=P3^4; sbit k2=P3^5; sbit k3=P3^6; sbit k4=P3^7; sbit du=P

獨立按鍵矩陣按鍵

 我們和微控制器之間進行資訊互動,主要包含兩大類,輸入裝置和輸出裝置。前邊講的LED小燈、數碼管、點陣都是輸出裝置,這節課我們學習一下最常用的輸入裝置——按鍵。在本節課的學習過程中我們還會穿插介紹一點硬體設計的基礎知識。 8.1 微控制器最小系統電路解析

(學習筆記)手把手教你學51微控制器點亮你的LED

 2.1 微控制器內部資源 三大資源: Flash:程式儲存空間 RAM:資料儲存空間 SFR:特殊功能暫存器 2.2微控制器最小系統 三要素:電源、晶振、復位電路 2.3LED小燈 限流:5~20mA(限流電阻阻值計算) 自身壓降2V 2.4程式程式碼編寫

KST-51微控制器c語言程式設計實現數碼動態顯示秒錶的倒計時

/*60S倒計時*/ /*個位每1S變一次,從0~9*/ /*十位,個位為0的下一秒十位發生變化*/ #include<reg52.h> sbit ADDR0=P1^0; sbit ADDR1=P1^1; sbit ADDR2=P1^2; sbit ADDR3

51微控制器每次按S1鍵,流水燈移位演示

原理圖 //原始碼 #include <reg52.h> #include <intrins.h> //包含移位函式 #define uint unsigned

線性代數(十五)對偶空間矩陣的轉置

0 可能需要預習的知識 線性空間 1 線性標量值函式 (i)設X是域K上的線性空間。L是定義在X上的標量值函式:L : X->K 如果對任意x,y∈X都有:L(x+y)=L(x)+L(y) 對任意x∈X k∈K 都有:L(kx) = kL(x) 則稱L是線性標量值函

51微控制器IO口擴充套件晶片用法(74HC165,74HC595)

IO口擴充套件晶片,主要是解決微控制器IO口太少。 74HC165:資料從並轉串 74HC595:資料從串轉並 兩種晶片,都是通過時序電路,加上移位功能,進行資料傳輸 74HC165:資料從並轉串。以下例項,實現8個獨立按鍵,控制數碼管的8段 #include <reg52.h

51微控制器通過ESP8266模組手機進行通訊(微控制器

 本人在校大學生一枚,前段時間參加校內大學生創新創業比賽,專案需要讓手機控制微控制器進行控制,搗鼓了很久,在網上找了很多資料,發現做微控制器嵌入式的有很多,做移動開發的也有很多,但把他們結合起來的很少,所以現在我把我做專案的經驗分享出來  Step1:配置ESP8266

51微控制器8位數碼動態顯示,從12345678開始,每次按S1鍵加1

原始碼 #include <reg52.h> #include <stdlib.h> #define uint unsigned long #define uchar unsigned char sbit