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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2866|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

求個(gè)大神給個(gè)單片機(jī)4x3矩陣按鍵掃描程序的思路,本人有點(diǎn)束手無策.

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

實(shí)現(xiàn)按下一次出一個(gè)值,消抖方面最好不用延遲消抖。
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 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

7#
ID:138119 發(fā)表于 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;
        }
}


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕第十五页 | 亚洲国产精品一区二区三区 | 在线看av的网址 | 久久久久久九九九九九九 | 99精品欧美一区二区三区 | 日韩精品一区二区三区在线观看 | 久久人体| 精品日韩一区 | 亚洲精品一区二区在线观看 | 亚洲国产高清高潮精品美女 | 久草成人 | 亚洲精品一区二区在线观看 | 亚洲精品自拍视频 | 成人精品一区二区三区中文字幕 | www.国产精品 | 日韩不卡一区二区 | 久久久久久99 | 成人av网站在线观看 | 91精品国产91久久综合桃花 | 情侣黄网站免费看 | 国产精品成人一区 | 精品久久香蕉国产线看观看亚洲 | 在线观看亚洲精品视频 | 特黄特色大片免费视频观看 | 91久久精品一区二区三区 | 国产精品久久久久久久久久软件 | 中文字幕一级毛片视频 | 欧美一区二区成人 | 黄色大片免费看 | 欧美性大战xxxxx久久久 | 欧美日韩精品久久久免费观看 | 日韩中文字幕av | 欧美理论 | 少妇精品久久久久久久久久 | 国产一级视频在线观看 | 一区二区三区视频免费看 | 色伊人久久 | 中文字幕一区二区在线观看 | 国产四区 | 久久久久久久国产 | 99精品久久|