在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

單片機獨立按鍵與矩陣鍵盤實現原理

CHANBAEK ? 來源:電子開發之家 ? 作者:小樹 ? 2023-10-31 15:56 ? 次閱讀

1獨立按鍵

圖片
獨立按鍵模塊位置示意圖

硬件連接原理:

圖片
圖1.2獨立按鍵原理圖

把對應的端口賦值高電平,即“1”,按鍵按下,端口被拉低至低電平,即“0”,通過檢測該端口的電平即可判斷按鍵是否按下。

去抖分析:

按鍵是機械器件,按下或者松開時有固定的機械抖動,抖動圖如下:

圖片
圖1.3按鍵抖動示意圖

上圖看出按鍵按下和松開的瞬間出現機械抖動,這個抖動時間雖然很短,一般10~15ms,不同按鍵抖動不同,但對應單片機來說,很輕松就能檢測到,單片機是uS 級別。

但這個結果并不是我們需要的,實際上只進行一次按鍵操作,但有可能執行了多次按鍵結果,這就是抖動造成的,所以大多數產品實際使用中都使用了按鍵去抖功能。

按鍵去抖分為硬件去抖和軟件去抖,硬件去抖最簡單的就是按鍵2端并聯電容,容量根據實驗而定。軟件去抖使用方便不增加硬件成本,容易調試,所以現在大都使用軟件去抖。

軟件去抖原理:

1、檢測到按鍵按下后進行10~15ms 延時,用于跳過這個抖動區域;

2、延時后再檢測按鍵狀態,如果沒有按下表明是抖動或者干擾造成,如果仍舊按下,可以

認為是真正的按下。并進行對應的操作。

3、同樣按鍵釋放后也要進行去抖延時,延時后檢測按鍵是否真正松開。

程序樣例中沒有使用按鍵釋放去抖程序,用戶可以自行添加。

多數時候按鍵需要在釋放時才起作用,像電腦鼠標一樣,這個時候需要檢測按鍵是否釋放,如果沒有釋放則一直等待。

獨立按鍵控制LED

程序如下圖:

/*-----------------------------------------------
  名稱:獨立按鍵控制led
  內容:按一次按鍵,led點亮,再按一次熄滅,以此循環
------------------------------------------------*/
#include< reg52.h > //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義

sbit KEY=P1^1;  //定義按鍵輸入端口
sbit LED=P1^2;  //定義led輸出端口


void DelayUs2x(unsigned char t);//函數聲明
void DelayMs(unsigned char t);
/*------------------------------------------------
                    主函數
------------------------------------------------*/
void main (void)
{

KEY=1; //按鍵輸入端口電平置高
while (1)         //主循環
{
  if(!KEY)  //如果檢測到低電平,說明按鍵按下
    {
     DelayMs(10); //延時去抖,一般10-20ms
     if(!KEY)     //再次確認按鍵是否按下,沒有按下則退出
      {
        while(!KEY);//如果確認按下按鍵等待按鍵釋放,沒有釋放則一直等待
	 {
	    LED=!LED;//釋放則執行需要的程序
	  }
	 }
    }
     //主循環中添加其他需要一直工作的程序
  }
}
/*------------------------------------------------
 uS延時函數,含有輸入參數 unsigned char t,無返回值
 unsigned char 是定義無符號字符變量,其值的范圍是
 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
 長度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
 while(--t);
}
/*------------------------------------------------
 mS延時函數,含有輸入參數 unsigned char t,無返回值
 unsigned char 是定義無符號字符變量,其值的范圍是
 0~255 這里使用晶振12M,精確延時請使用匯編
------------------------------------------------*/
void DelayMs(unsigned char t)
{
 while(t--)
 {	//大致延時1mS
     DelayUs2x(245);
	 DelayUs2x(245);
 }
}

圖1.4獨立按鍵程序

接線方式:

圖片

實驗現象:按一次按鍵,led點亮,再按一次熄滅,以此循環。

2矩陣鍵盤

圖片
圖2.1矩陣鍵盤模塊示意圖

矩陣鍵盤反轉掃描:

圖片
圖2.2矩陣鍵盤硬件原理圖

通過八個IO口控制16個按鍵,節省IO口。

重點是弄清基本原理,結合鍵盤掃描程序代碼分析、理解。

1.矩陣鍵盤逐行掃描(逐行掃描思路簡單,但程序較長)

2.矩陣鍵盤反轉掃描(反轉掃描程序簡短,思路巧妙)

本節著重講矩陣鍵盤的反轉掃描,逐行掃描將在外部中斷部分

程序如下:

/*-----------------------------------------------
  名稱:矩陣鍵盤反轉掃描
------------------------------------------------*/
#include< reg52.h > //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義

#define KeyPort P3
sbit dula=P2^1;
sbit wela=P2^0;
unsigned char code DuanMa[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};

void DelayUs2x(unsigned char t);//us級延時函數聲明
void DelayMs(unsigned char t); //ms級延時

unsigned char KeyScan(void);//鍵盤掃描
unsigned char KeyPro(void);
void display(unsigned char aa);
/*------------------------------------------------
                    主函數
------------------------------------------------*/
void main (void)
{
unsigned char num;
	dula=1;
	P1=0x00;
	dula=0;
	wela=1;
	P1=0x00;
	wela=0;
while (1)         //主循環
	{
		num=KeyPro();
	if(num!=0xff)
   {
		display(num);
	}
}
}
void display(unsigned char aa)
{
	dula=1;
	P1=DuanMa[aa];
	dula=0;		
}
/*------------------------------------------------
          按鍵掃描函數,返回掃描鍵值
------------------------------------------------*/
unsigned char KeyScan(void)  //鍵盤掃描函數,使用行列反轉掃描法
{
	unsigned char cord_h,cord_l;//行列值中間變量
	KeyPort=0x0f;            //列線輸出全為0
	cord_h=KeyPort&0x0f;     //讀入行線值
	if(cord_h!=0x0f)    //先檢測有無按鍵按下
	{
		DelayMs(10);        //去抖
		if((KeyPort&0x0f)!=0x0f)
	{
    cord_h=KeyPort&0x0f;  //讀入行線值
    KeyPort=cord_h|0xf0;  //輸出當前列線值
    cord_l=KeyPort&0xf0;  //讀入列線值

    while((KeyPort&0xf0)!=0xf0);//等待松開并輸出
    return(cord_h+cord_l);//鍵盤最后組合碼值
   }
  }return(0xff);     //返回該值
}
/*------------------------------------------------
              按鍵值處理函數,返回掃鍵值
------------------------------------------------*/
unsigned char KeyPro(void)
{
 switch(KeyScan())
 {
  case 0x7e:return 0;break;//0 按下相應的鍵顯示相對應的碼值
  case 0x7d:return 1;break;//1
  case 0x7b:return 2;break;//2
  case 0x77:return 3;break;//3
  case 0xbe:return 4;break;//4
  case 0xbd:return 5;break;//5
  case 0xbb:return 6;break;//6
  case 0xb7:return 7;break;//7
  case 0xde:return 8;break;//8
  case 0xdd:return 9;break;//9
  case 0xdb:return 10;break;//a
  case 0xd7:return 11;break;//b
  case 0xee:return 12;break;//c
  case 0xed:return 13;break;//d
  case 0xeb:return 14;break;//e
  case 0xe7:return 15;break;//f
  default:return 0xff;break;
 }
}
/*------------------------------------------------
 uS延時函數,含有輸入參數 unsigned char t,無返回值
 unsigned char 是定義無符號字符變量,其值的范圍是
 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
 長度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
 while(--t);
}
/*------------------------------------------------
 mS延時函數,含有輸入參數 unsigned char t,無返回值
 unsigned char 是定義無符號字符變量,其值的范圍是
 0~255 這里使用晶振12M,精確延時請使用匯編
------------------------------------------------*/
void DelayMs(unsigned char t)
{
 while(t--)
 {
     //大致延時1mS
     DelayUs2x(245);
	 DelayUs2x(245);
 }
}

矩陣鍵盤反轉掃描程序

接線方式:

圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 原理圖
    +關注

    關注

    1298

    文章

    6343

    瀏覽量

    234057
  • 單片機
    +關注

    關注

    6037

    文章

    44558

    瀏覽量

    635306
  • 矩陣鍵盤
    +關注

    關注

    7

    文章

    206

    瀏覽量

    31471
  • 獨立按鍵
    +關注

    關注

    1

    文章

    45

    瀏覽量

    11563
收藏 人收藏

    評論

    相關推薦

    基于單片機矩陣鍵盤檢測案例

    /O端口資源,導致單片機與其它外部設備無法連接。在這種情況下,可以使用矩陣鍵盤實現多個按鍵單片機
    的頭像 發表于 10-31 14:35 ?1275次閱讀
    基于<b class='flag-5'>單片機</b>的<b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>檢測案例

    51單片機矩陣鍵盤獨立鍵盤沖突

    請問在用51單片機做一個計算器,4*4矩陣鍵盤和四個獨立按鍵都要使用到,如何掃描按鍵才能使它們不
    發表于 07-27 12:17

    單片機獨立按鍵矩陣鍵盤概念及原理

    按鍵。這樣鍵盤按鍵的個數就為4*4個。這種行列式鍵盤結構能有效地提高單片機系統中I/O口的利用率。
    發表于 11-30 16:32

    51單片機鍵盤接口-獨立按鍵矩陣按鍵 精選資料分享

    51單片機鍵盤接口-獨立按鍵矩陣按鍵按鍵的分類鍵輸
    發表于 07-16 07:57

    請問怎么實現51單片機獨立按鍵矩陣按鍵

    請問怎么實現51單片機獨立按鍵矩陣按鍵
    發表于 08-30 06:17

    單片機獨立按鍵矩陣鍵盤的原理是什么?

    單片機獨立按鍵矩陣鍵盤的原理是什么?鍵盤的工作方式是什么?
    發表于 01-18 07:31

    矩陣鍵盤檢測獨立按鍵單片機連接

    4.2 矩陣鍵盤檢測獨立按鍵單片機連接時,每個按鍵都需要
    發表于 02-22 06:14

    使用單片機C語言實現獨立按鍵檢測與矩陣鍵盤操作的資料和程序

    獨立按鍵的檢測和矩陣鍵盤操作。完成本文所需硬件:基于C51系列單片機的開發板(本文是基于STC12C5A60S2處理器的一款開發板),帶中文
    發表于 07-16 17:39 ?2次下載
    使用<b class='flag-5'>單片機</b>C語言<b class='flag-5'>實現</b><b class='flag-5'>獨立</b><b class='flag-5'>按鍵</b>檢測與<b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>操作的資料和程序

    單片機鍵盤檢測與應用

    非編碼鍵盤通常又分為獨立鍵盤矩陣鍵盤兩大類。所謂獨立鍵盤
    的頭像 發表于 09-18 16:34 ?5359次閱讀

    51單片機按鍵檢測--獨立按鍵矩陣鍵盤

    按鍵,每個按鍵對應一個IO口,通過循環或者中斷去檢測,這種方法常用于按鍵個數較少得時候。如果按鍵的個數較多,每個按鍵都分配一個IO口,會占用
    發表于 11-12 11:06 ?15次下載
    51<b class='flag-5'>單片機</b><b class='flag-5'>按鍵</b>檢測--<b class='flag-5'>獨立</b><b class='flag-5'>按鍵</b>與<b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>

    51單片機鍵盤接口-獨立按鍵矩陣按鍵

    51單片機鍵盤接口-獨立按鍵矩陣按鍵按鍵的分類鍵輸
    發表于 11-12 12:36 ?13次下載
    51<b class='flag-5'>單片機</b><b class='flag-5'>鍵盤</b>接口-<b class='flag-5'>獨立</b><b class='flag-5'>按鍵</b>和<b class='flag-5'>矩陣</b><b class='flag-5'>按鍵</b>

    51單片機按鍵控制數碼管0~9_基于proteus的51單片機開發實例24-矩陣鍵盤(行列式鍵盤)...

    1. 基于proteus的51單片機開發實例24-矩陣鍵盤1.1. 實驗目的圖1 矩陣鍵盤電路本實例我們來學習
    發表于 11-23 16:36 ?12次下載
    51<b class='flag-5'>單片機</b><b class='flag-5'>按鍵</b>控制數碼管0~9_基于proteus的51<b class='flag-5'>單片機</b>開發實例24-<b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>(行列式<b class='flag-5'>鍵盤</b>)...

    單片機AT89C51--7.按鍵(獨立按鍵矩陣按鍵)

    單片機AT89C51--7.按鍵1.鍵盤類型1.1 編碼鍵盤1.2 非編碼鍵盤2.獨立
    發表于 11-25 14:51 ?14次下載
    <b class='flag-5'>單片機</b>AT89C51--7.<b class='flag-5'>按鍵</b>(<b class='flag-5'>獨立</b><b class='flag-5'>按鍵</b>,<b class='flag-5'>矩陣</b><b class='flag-5'>按鍵</b>)

    單片機編輯庫四之矩陣按鍵

    單片機編輯庫一之延時與led燈單片機編輯庫二之按鍵單片機編輯庫三之蜂鳴器單片機編輯庫四之矩陣
    發表于 12-31 19:37 ?12次下載
    <b class='flag-5'>單片機</b>編輯庫四之<b class='flag-5'>矩陣</b><b class='flag-5'>按鍵</b>

    單片機學習-矩陣按鍵

    目錄矩陣按鍵介紹檢測方法C51例程歡迎加QQ及郵件交流矩陣按鍵介紹 獨立鍵盤
    發表于 12-31 19:37 ?15次下載
    <b class='flag-5'>單片機</b>學習-<b class='flag-5'>矩陣</b><b class='flag-5'>按鍵</b>
    主站蜘蛛池模板: a毛片基地免费全部香蕉| 天天视频在线观看免费| 欧美黑粗特黄午夜大片| 在线观看视频一区二区| 特黄一级黄色片| 高h肉肉视频在线播放观看| 美女被免费视频的网站| 流不尽奶水的大乳h| 欧美sese| 美女视频黄a视频免费全过程| 特黄aaaaaa久久片| 你懂的在线观看网站| 欧美一级特黄aaaaaa在线看片| 欧美一区亚洲| 六月丁香婷婷综合| 日韩精品毛片| 午夜激情福利网| 三级aa久久| 婷婷了五月色香综合缴情| 成人在线精品| 国产成人啪午夜精品网站| 日韩免费视频一区| 天堂中文资源在线地址| 久久久久久免费播放一级毛片| 久久九九国产精品怡红院| 国产伦精一区二区三区| 天天色天天射天天干| 免费观看的黄色网址| 免费aa视频| 五月婷花| 天天精品在线| 永久看日本大片免费| 插吧插吧综合网| 同性男男肉交短文| 激情五月深爱五月| 香蕉成人999视频| 日本wwwwwwwww| 激情综合激情| 色多多视频在线观看免费大全| 天天爽夜夜爽夜夜爽| 久精品视频村上里沙|