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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2912|回復: 6
打印 上一主題 下一主題
收起左側

求個大神給個單片機4x3矩陣按鍵掃描程序的思路,本人有點束手無策.

[復制鏈接]
跳轉到指定樓層
樓主
ID:305998 發表于 2018-6-13 17:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
是4x3矩陣按鍵掃描的剛學單片機不就。以前接觸的按鍵掃描都是連續的io口,一整組的P1 或者P2這樣數據口 。
但是換到這種不連續的不規則的 本人有點束手無策 希望有個大神幫我解答下。萬分感謝。

實現按下一次出一個值,消抖方面最好不用延遲消抖。
sbit X1 = P3^4;// 行
sbit X2 = P3^5;
sbit X3 = P2^7;
sbit X4 = P3^3;

sbit Y1 = P1^6;// 列
sbit Y2 = P1^7;
sbit Y3 = P3^2;



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:330198 發表于 2018-6-14 09:24 | 只看該作者
先把所有的行置高電平,所有的列置低電平,等待高電平的引腳變低也就是鍵按下的時候(這時候就能判斷是哪一行的鍵被按下了),然后立即把所有的行置低電平,所有的列置高電平(這時候按鍵還未松開),看哪一列的引腳變低了,就能判斷是哪一列的鍵被按下了,然后兩者結合就能判斷是哪個鍵按下了。
回復

使用道具 舉報

板凳
ID:234075 發表于 2018-6-14 10:40 | 只看該作者
使用20ms中斷計數,狀態字=0進行掃描,狀態字=1進行消抖,輸出鍵值,狀態字=2判斷按鍵松開;
回復

使用道具 舉報

地板
ID:370231 發表于 2019-9-25 09:54 | 只看該作者
樓主解決這個問題沒,小弟也不是很清楚,可以講解一下嗎?
回復

使用道具 舉報

5#
ID:235200 發表于 2019-9-25 12:04 | 只看該作者
這種不連續的IO口線編程是困難些,但原理是一樣的,用定時計數器依次使P16 P17 P32為低電平進行列掃描,在主程序中依次檢查P34 P35 P27 P33的電平狀態,如果某一根線的電平為低電平就可以判斷出來,樓主碰到這種不連續的IO口接線,一定是硬件設計與軟件設計沒有規劃好,一個大硬件系統各端口的分配要依照軟件編程方便的原則,不要給編程者造成較大的麻煩
回復

使用道具 舉報

6#
ID:332444 發表于 2019-9-26 08:45 | 只看該作者
樓主這樣的端口定義,與傳統的思路有區別,傳統用的是直接讀取整個IO值,而樓主這種則要分別送信號和讀取判斷即可,比如3線的口其中1口送信號,4線的端口分別判斷,即可求出哪個按鈕按下了.
回復

使用道具 舉報

7#
ID:138119 發表于 2019-10-2 01:32 | 只看該作者
#define S8      RB5
#define S7      RB4
#define S6      RC2
#define S5      RC1
#define S4      RC0
#define S3      RA2
#define S2      RA1
#define S1      RA0

#define KEY_delay_OK                30


void Scan_KEY(void)
{
        if(S1==0 && S2==1 && S3==1 && S4==1)
        {
                ++KEY_tmp;
                if(KEY_tmp >= KEY_delay_OK)       
                {
                        KEY_tmp = 0;
                        if(S5==0 && S6==1 && S7==1 && S8==1)
                        {
                                if(KEY_num_bit == 0)
                                {
                                        KEY_num_bit = 1;
                                        KEY_num = 4;
                                        KEY_one_bit = 0;                               
                                }
                        }
                        else if(S5==1 && S6==0 && S7==1 && S8==1)
                        {
                                if(KEY_num_bit == 0)
                                {
                                        KEY_num_bit = 1;
                                        KEY_num = 3;
                                        KEY_one_bit = 0;                               
                                }
                        }
                        else if(S5==1 && S6==1 && S7==0 && S8==1)
                        {
                                if(KEY_num_bit == 0)
                                {
                                        KEY_num_bit = 1;
                                        KEY_num = 2;
                                        KEY_one_bit = 0;                               
                                }
                        }
                        else if(S5==1 && S6==1 && S7==1 && S8==0)
                        {
                                if(KEY_num_bit == 0)
                                {
                                        KEY_num_bit = 1;
                                        KEY_num = 1;
                                        KEY_one_bit = 0;                               
                                }
                        }
                }
        }
        else if(S1==1 && S2==0 && S3==1 && S4==1)
        {
                ++KEY_tmp;
                if(KEY_tmp >= KEY_delay_OK)
                {
                        KEY_tmp = 0;
                        if(S5==0 && S6==1 && S7==1 && S8==1)
                        {
                                if(KEY_num_bit == 0)
                                {
                                        KEY_num_bit = 1;
                                        KEY_num = 8;
                                        KEY_one_bit = 0;                       
                                }
                        }
                        else if(S5==1 && S6==0 && S7==1 && S8==1)
                        {
                                if(KEY_num_bit == 0)
                                {
                                        KEY_num_bit = 1;
                                        KEY_num = 7;
                                        KEY_one_bit = 0;                       
                                }
                        }
                        else if(S5==1 && S6==1 && S7==0 && S8==1)
                        {
                                if(KEY_num_bit == 0)
                                {
                                        KEY_num_bit = 1;
                                        KEY_num = 6;
                                        KEY_one_bit = 0;                       
                                }
                        }
                        else if(S5==1 && S6==1 && S7==1 && S8==0)
                        {
                                if(KEY_num_bit == 0)
                                {
                                        KEY_num_bit = 1;
                                        KEY_num = 5;
                                        KEY_one_bit = 0;                       
                                }
                        }
                }       
        }       
        else if(S1==1 && S2==1 && S3==0 && S4==1)
        {
                ++KEY_tmp;
                if(KEY_tmp >= KEY_delay_OK)       
                {
                        KEY_tmp = 0;
                        if(S5==0 && S6==1 && S7==1 && S8==1)       
                        {
                                if(KEY_num_bit == 0)
                                {
                                        KEY_num_bit = 1;
                                        KEY_num = 12;
                                        KEY_one_bit = 0;               
                                }
                        }
                        else if(S5==1 && S6==0 && S7==1 && S8==1)
                        {
                                if(KEY_num_bit == 0)
                                {
                                        KEY_num_bit = 1;
                                        KEY_num = 10;
                                        KEY_one_bit = 0;               
                                }
                        }
                        else if(S5==1 && S6==1 && S7==0 && S8==1)
                        {
                                if(KEY_num_bit == 0)
                                {
                                        KEY_num_bit = 1;
                                        KEY_num = 11;
                                        KEY_one_bit = 0;               
                                }
                        }
                        else if(S5==1 && S6==1 && S7==1 && S8==0)
                        {
                                if(KEY_num_bit == 0)
                                {
                                        KEY_num_bit = 1;
                                        KEY_num = 9;
                                        KEY_one_bit = 0;               
                                }
                        }
                }
        }
        else  if(S1==1 && S2==1 && S3==1 && S4==0)
        {
                ++KEY_tmp;
                if(KEY_tmp >= KEY_delay_OK)       
                {
                        KEY_tmp = 0;
                        if(S5==0 && S6==1 && S7==1 && S8==1)       
                        {
                                if(KEY_num_bit == 0)
                                {
                                        KEY_num_bit = 1;
                                        KEY_num = 16;
                                        KEY_one_bit = 0;       
                                }
                        }
                        else if(S5==1 && S6==0 && S7==1 && S8==1)
                        {
                                if(KEY_num_bit == 0)
                                {
                                        KEY_num_bit = 1;
                                        KEY_num = 15;
                                        KEY_one_bit = 0;       
                                }
                        }
                        else if(S5==1 && S6==1 && S7==0 && S8==1)
                        {
                                if(KEY_num_bit == 0)
                                {
                                        KEY_num_bit = 1;
                                        KEY_num = 14;
                                        KEY_one_bit = 0;       
                                }
                        }
                        else if(S5==1 && S6==1 && S7==1 && S8==0)
                        {
                                if(KEY_num_bit == 0)
                                {
                                        KEY_num_bit = 1;
                                        KEY_num = 13;
                                        KEY_one_bit = 0;       
                                }
                        }
                }
        }
        else
        {
                KEY_tmp = 0;
                KEY_num = 0;
                KEY_num_bit=0;
        }
}


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 偷拍亚洲色图 | .国产精品成人自产拍在线观看6 | 中文字幕亚洲精品 | 久久久精品久久 | 午夜精品视频在线观看 | av免费网站在线 | 国产福利资源在线 | 国产免费福利小视频 | 日韩一级免费电影 | 国产日韩一区二区三区 | 久久综合狠狠综合久久综合88 | 做a视频在线观看 | 日本免费黄色一级片 | 成年人免费在线视频 | 日日夜夜av | 中文字幕在线播放第一页 | 亚洲国产成人精品女人久久久 | 欧美网站一区二区 | 日韩欧美国产成人一区二区 | 国产乱码精品一区二区三区五月婷 | 玖玖玖在线 | 一级黄色日本片 | 久久国产精品久久国产精品 | 日本一区二区三区四区 | 一区二区在线 | 91网站在线观看视频 | 国产成人精品一区二区 | 综合在线视频 | 欧美综合一区二区三区 | 午夜精品一区二区三区在线视频 | 日韩欧美三级电影在线观看 | 91精品久久久久久久久 | 成人在线视频网 | 色女人天堂 | 影音av | 日韩成人免费视频 | 三级黄色大片网站 | 北条麻妃av一区二区三区 | 在线观看亚洲一区二区 | 在线观看国产视频 | 日韩一区二区三区在线观看 |