欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
求個大神給個單片機(jī)4x3矩陣按鍵掃描程序的思路,本人有點(diǎn)束手無策.
[打印本頁]
作者:
yzcook
時間:
2018-6-13 17:05
標(biāo)題:
求個大神給個單片機(jī)4x3矩陣按鍵掃描程序的思路,本人有點(diǎn)束手無策.
是4x3矩陣按鍵掃描的剛學(xué)單片機(jī)不就。以前接觸的按鍵掃描都是連續(xù)的io口,一整組的P1 或者P2這樣數(shù)據(jù)口 。
但是換到這種不連續(xù)的不規(guī)則的 本人有點(diǎn)束手無策 希望有個大神幫我解答下。萬分感謝。
實(shí)現(xiàn)按下一次出一個值,消抖方面最好不用延遲消抖。
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
時間:
2018-6-14 09:24
先把所有的行置高電平,所有的列置低電平,等待高電平的引腳變低也就是鍵按下的時候(這時候就能判斷是哪一行的鍵被按下了),然后立即把所有的行置低電平,所有的列置高電平(這時候按鍵還未松開),看哪一列的引腳變低了,就能判斷是哪一列的鍵被按下了,然后兩者結(jié)合就能判斷是哪個鍵按下了。
作者:
zhb2004xp
時間:
2018-6-14 10:40
使用20ms中斷計數(shù),狀態(tài)字=0進(jìn)行掃描,狀態(tài)字=1進(jìn)行消抖,輸出鍵值,狀態(tài)字=2判斷按鍵松開;
作者:
a89588038
時間:
2019-9-25 09:54
樓主解決這個問題沒,小弟也不是很清楚,可以講解一下嗎?
作者:
csmyldl
時間:
2019-9-25 12:04
這種不連續(xù)的IO口線編程是困難些,但原理是一樣的,用定時計數(shù)器依次使P16 P17 P32為低電平進(jìn)行列掃描,在主程序中依次檢查P34 P35 P27 P33的電平狀態(tài),如果某一根線的電平為低電平就可以判斷出來,樓主碰到這種不連續(xù)的IO口接線,一定是硬件設(shè)計與軟件設(shè)計沒有規(guī)劃好,一個大硬件系統(tǒng)各端口的分配要依照軟件編程方便的原則,不要給編程者造成較大的麻煩
作者:
xianfajushi
時間:
2019-9-26 08:45
樓主這樣的端口定義,與傳統(tǒng)的思路有區(qū)別,傳統(tǒng)用的是直接讀取整個IO值,而樓主這種則要分別送信號和讀取判斷即可,比如3線的口其中1口送信號,4線的端口分別判斷,即可求出哪個按鈕按下了.
作者:
yfpc2006
時間:
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://www.raoushi.com/bbs/)
Powered by Discuz! X3.1