久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 18347|回復: 12
收起左側

比較實用的51矩陣鍵盤程序解析

  [復制鏈接]
ID:70941 發表于 2015-1-23 04:32 | 顯示全部樓層 |閱讀模式


由于單片機I/o口的有限,當需要多個按鍵的時候,常用矩陣鍵盤作為輸入設備.
由于按鍵按下后,松開得到的波形實際中不是理想化的方波,會出現機械抖動,對后續單片機檢測按鍵帶來麻煩,




一般教材上基本都是利用延時去抖動:基本套路都:
void key()
{
if(k1==0) //如果按鍵按下
{
delay_10ms();延時去抖動   
if(k1==0)  再次判斷
{
你要的功能
}
}
}

由于10ms是理論上人們按鍵按下后到松手所要的大概時間,由于個體差異,和按鍵的機械靈活度有差異,導致可能出現按鍵按太快,沒反應,按時間太長導致單片機效率降低等不確定因素.

可以采用判斷是否是第一次按下來進行檢測,可以大大提高效率,當你按鍵按了再快也能檢測到。
程序如下:

//---------------------------------------------------------------------

#include <reg52.h>

#define key P2
int val;

char code sign[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98,0x88,0x83,0xc6,0xa1,0x86,0x8e};

void delay_10ms();

void key_scan();   //矩陣按鍵函數聲明


void main()
{
        while(1)

        {
        P0=sign[val];
        key_scan();
        }  
}

void key_scan()
{
         static char a,b;  //a用于判斷是不是第一次按下,b用于稍微延時
         char state;   //記錄鍵值
         key=0x0f;
         if(key!=0x0f)                 //如果有按鍵按下
         {
          state=key;   //記錄第一次按鍵狀態
                  if(a==0)                //如果第一次按下
                  {
                   b++;                         //略微延時  不需要延時10ms以提高單片機效率
                           if(b>3)
                        {
                                         if(key==state)                //判斷鍵值是否和第一次一致
                                         {
                                            a=1,b=0;    //復位狀態值 a==1說明已經按下,等待后續松開
                                           key=0x0f;                 //測試列
                                                           switch(key)
                                                           {
                                                                case (0x07):          val=0;break;
                                                                case (0x0b):          val=1;break;
                                                                case (0x0d):          val=2;break;
                                                                case (0x0e):          val=3;break;
                                                           }
                                   key=0xf0;        // 測試行
                                                           switch(key)
                                                           {
                                                                 case (0x70):         val=val;break;
                                                                 case (0xb0):         val=val+4;break;
                                                                 case (0xd0):    val=val+8;break;
                                                                 case (0xe0):         val=val+12;break;
                                                           }
                                           }
                                }
                   }
          }
       else
           {
                a=b=0;                         //松開后復位狀態機
           }                  
}


回復

使用道具 舉報

ID:72399 發表于 2015-1-23 16:11 | 顯示全部樓層
矩陣鍵盤的程序,用到再復制
回復

使用道具 舉報

ID:72399 發表于 2015-1-23 16:11 | 顯示全部樓層
矩陣鍵盤的程序,用到再復制
回復

使用道具 舉報

ID:72399 發表于 2015-1-23 16:11 | 顯示全部樓層
矩陣鍵盤的程序,用到再復制
回復

使用道具 舉報

ID:29438 發表于 2015-2-5 13:33 | 顯示全部樓層
學習了,謝謝!
回復

使用道具 舉報

ID:73030 發表于 2015-2-9 07:59 來自觸屏版 | 顯示全部樓層
留著,用的時候再拿,謝謝樓主。
回復

使用道具 舉報

ID:20841 發表于 2015-2-22 07:24 | 顯示全部樓層
謝謝樓主的分享
回復

使用道具 舉報

ID:73002 發表于 2015-3-11 13:19 | 顯示全部樓層
可以學習下。
回復

使用道具 舉報

ID:263745 發表于 2017-12-21 17:57 | 顯示全部樓層
多鍵摁下 怎么處理呢?
回復

使用道具 舉報

ID:402000 發表于 2018-9-25 11:26 | 顯示全部樓層
非常感謝,減少了打代碼的時間
回復

使用道具 舉報

ID:402219 發表于 2018-9-25 16:01 | 顯示全部樓層
感謝  好具體
回復

使用道具 舉報

ID:985169 發表于 2021-12-5 20:25 | 顯示全部樓層
如果顯示平方數的要怎么修改?
回復

使用道具 舉報

ID:66287 發表于 2021-12-6 09:04 | 顯示全部樓層
思路真正對路,修改待驗證。
回復

使用道具 舉報

14#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品一区视频 | а天堂中文最新一区二区三区 | 99re视频在线 | 亚洲va欧美va天堂v国产综合 | 国产1区2区3区| 夜夜av| 亚洲免费精品一区 | 天天射天天干 | 日韩av免费看 | 免费精品 | 国产高清一二三区 | 久久视频精品 | 成人av在线播放 | 国产电影一区二区在线观看 | 亚洲国产成人av好男人在线观看 | av影片在线| 一区二区三区四区视频 | 日韩一区二区在线看 | 中文字幕高清 | 国产一区欧美 | 99精品免费 | 国产9999精品 | 精品无码久久久久久国产 | 一级毛片网| 日日干日日操 | 免费天天干 | 天天成人综合网 | 人人叉 | 亚洲国产精品久久久 | 午夜精品福利视频 | 四虎成人在线播放 | 久草在线| 国产农村妇女精品一区 | 亚洲欧美日韩精品久久亚洲区 | 亚洲一区视频在线 | 成人精品久久 | 亚洲导航深夜福利涩涩屋 | 91免费在线播放 | 亚洲成人精品国产 | 日本人和亚洲人zjzjhd | 久久日韩粉嫩一区二区三区 |