有哪位大大熟悉這塊電路板的特性的咪??

因為這塊板子上的腳位孔只有12個,那如果要擴充的話

可以用74HC595來擴充

但是如果用8591的"掃描式鍵盤"的方法,是否也可以用來作為擴充用途呢??

跪求各大學校的各種神回覆T^T

小弟感激不盡

共 21 則回應

1
看不太懂你要表達甚麼, 8051可以用74HC595來做掃描擴充, Arduino當然也可以
74HC595是八位元移位暫存器, 所以你的問題是?
0
我的意思是說....8051有個實習題目是掃描式鍵盤,她掃描式鍵盤是...接腳6隻可以控制(3x3 = 9)個鍵盤按鍵,我想說能不能用相同原理,來讓arduino uno的12隻接腳也弄成可以控制(6x6 = 36)個接腳。

我不知道我這樣說能不能看得懂....
1
我之前做過用4094 (shift register IC) 配合 UNO 控制 48 顆 LED 動態閃爍
所以答案是可以的

這邊有用arduino操控74HC595的教學
0
所謂的控制是只有輸出?
還是只有輸入?
or 2個都有= =?
0
輸出

鍵盤輸入的話
不知道這個有沒有用
0
B5我知道可以用74595作擴充,可是我再想能不能單純用掃描式鍵盤的方式來做擴充呢?
0
可以吧
我的想法是

pin 2 ~ 7 接到Colum ,設成OUTPUT
pin 8 ~13 接到ROW,設成INPUT

先 digitalWrite output pins 為 H,L,L,L,L,L (就是讓pin2 為HIGH,其他為LOW)
然後依序 digitalRead input pins , 有被按到的鍵應該會讀到高電位吧

最後用delay控至掃描頻率
0
當然可以, 8051與Arduino控制很類似
方法一模一樣
0
可是掃描式鍵盤的程式碼是類似這種

P0 = 0x7f
if(P0_3==0) key=3;
if(P0_2==0) key=2;
if(P0_1==0) key=1;
if(P0_0==0) key=0;

那這個要怎麼改呢?
1
digitalWrite(P0, HIGH);
if(digitalRead(P0_3, LOW)) key=3;
if(digitalRead(P0_2, LOW)) key=2;
if(digitalRead(P0_1, LOW)) key=1;
if(digitalRead(P0_0, LOW)) key=0;
0
B10,那如果我不想要掃描式鍵盤的鍵盤按鈕,只是想要用掃描式鍵盤的這種擴充方式多出來的擴充腳位,那在程式碼"key"這方面是不是就不需要呢??

如果把按鈕拿掉,那這種擴充方式還能夠正常運作嗎?

因為擴充的腳位,要接上LED,那個按鍵我們不會用到所以想拿掉。
0
呵呵UNO欸~~~~(亂入)
0
可以拿掉key

●●●●pin0
●○●●pin1
●●●●pin2
●●●●pin3
4 5 6 7

Pin0~7再setup()裡都設成OUTOUT

pin4,5,6,7接LED行的正極,並設其電位為LOW
pin1,2,3,4接LED列的負極,並設其電位為HIGH

如圖,要讓那顆LED亮的話
code可以寫成 :

digitalWrite(5,HIGH);
digitalWrite(1,LOW);

其他以此類推
然後看需要加其他控制的code
1
原PO當初應該買Arduino Mega 256的
腳位很多很夠用
缺點是有點大塊
0
B14,賤賣arduino好了剛剛去看有夠多隻接腳= =
0
B13!!!!

可以加個FB好友咪??
因為我還是卡在一些地方不太懂= =
0
想說先練習2X2的控制.但找不出錯在哪,再麻煩你指教指教

const int led[] = {4,5,6,7};
int i;
void setup()
{
for(i=0;i<2;i++)
{
pinmode(led[i],OUTPUT);
digitalwrite(led[i],HIGH);
}
for(i=2;i<4;i++)
{
pinmode(led[i],OUTPUT);
digitalwrite(led[i],LOW);
}
}
void loop()
{
digitalWrite(3,HIGH);
digitalWrite(0,LOW);
}
0
你loop()裡面腳位寫錯了吧?
如果你的led腳位是4,5,6,7....
那要改的應該是[4,5] & [6,7]

pin4 O O
pin5 X O
6 7

設定5 LOW, 6 HIGH就好
0
B18 這樣咪??

const int led[] = {4,5,6,7};
int i;
void setup()
{
for(i=0;i<2;i++)
{
pinMode(led[i],OUTPUT);
digitalWrite(led[i],HIGH);
}
for(i=2;i<4;i++)
{
pinMode(led[i],OUTPUT);
digitalWrite(led[i],LOW);
}
}
void loop()
{
digitalWrite(6,HIGH);
digitalWrite(5,LOW);
}


"如果你的led腳位是4,5,6,7....
那要改的應該是[4,5] & [6,7] "

我不太懂這個意思QQ
0
B7說的這個原理同LED矩陣....

const int led[] = {4,5,6,7}; <<這邊定義你2x2使用的pin沒錯吧?

那假設你是這樣排的:
O O pin4
O O pin5
pin6 pin7

setup()跑完:
pin4,pin5 = HIGH
pin6,pin7 = LOW
此時4顆LED正負及剛好都顛倒...所以全部不亮
+ + pin4
- -

+ + pin5
- -
pi6 pin7


再來就是跑loop()
把pin5設成LOW (等同接到GND)
pin6設成HIGH (類似接到Vcc)
左下角的那顆剛好處於正接....所以他就亮了...
+ + pin4
+ -

- - pin5
+ -
pi6 pin7
0
哦哦哦大概懂了~~

所以我要讓左下腳那顆亮的話....應該是

digitalWrite(6,HIGH);
digitalWrite(5,LOW);

對吧??
馬上回應搶第 22 樓...
回應...