欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 求個(gè)大神給個(gè)單片機(jī)4x3矩陣按鍵掃描程序的思路,本人有點(diǎn)束手無策. [打印本頁]

作者: yzcook    時(shí)間: 2018-6-13 17:05
標(biāo)題: 求個(gè)大神給個(gè)單片機(jī)4x3矩陣按鍵掃描程序的思路,本人有點(diǎn)束手無策.
是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;




作者: zhanghyg    時(shí)間: 2018-6-14 09:24
先把所有的行置高電平,所有的列置低電平,等待高電平的引腳變低也就是鍵按下的時(shí)候(這時(shí)候就能判斷是哪一行的鍵被按下了),然后立即把所有的行置低電平,所有的列置高電平(這時(shí)候按鍵還未松開),看哪一列的引腳變低了,就能判斷是哪一列的鍵被按下了,然后兩者結(jié)合就能判斷是哪個(gè)鍵按下了。
作者: zhb2004xp    時(shí)間: 2018-6-14 10:40
使用20ms中斷計(jì)數(shù),狀態(tài)字=0進(jìn)行掃描,狀態(tài)字=1進(jìn)行消抖,輸出鍵值,狀態(tài)字=2判斷按鍵松開;
作者: a89588038    時(shí)間: 2019-9-25 09:54
樓主解決這個(gè)問題沒,小弟也不是很清楚,可以講解一下嗎?

作者: csmyldl    時(shí)間: 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)各端口的分配要依照軟件編程方便的原則,不要給編程者造成較大的麻煩
作者: xianfajushi    時(shí)間: 2019-9-26 08:45
樓主這樣的端口定義,與傳統(tǒng)的思路有區(qū)別,傳統(tǒng)用的是直接讀取整個(gè)IO值,而樓主這種則要分別送信號(hào)和讀取判斷即可,比如3線的口其中1口送信號(hào),4線的端口分別判斷,即可求出哪個(gè)按鈕按下了.
作者: yfpc2006    時(shí)間: 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;
        }
}







歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1