我就是想要幾個積分,

2021-08-20 06:45:07 字數 3906 閱讀 4577

使用4017數字整合塊擴充套件arduino開關陣列

--用3個微控制器引腳讀取10個開關狀態

作者注:此方法並非擴充套件輸入腳最佳方法,如果需要大量擴充套件輸入腳的話(幾十甚至上百路),可以使用74hc165或者cd4021做shiftin。而不是本文的4017。

使用arduino做製作,需要有一組開關控制arduino狀態。但是arduino引腳不多,傳統接法開關多了要占用很多引腳。減少引腳的方法有很多,可以選矩陣方式,編碼器方式,還有本文要介紹的分時復用開關法等。

特點:十個開關占用三個資料引腳,之後每增加十個開關就增加乙個引腳。

4017是一塊十進位制計數器,每輸入乙個clk脈衝,q0~q9輪流產生高電平。每時刻有且只有乙個引腳高電平。

二極體防止多個開關閉合時,有的輸出端輸出高電平,有的輸出低電平,互相接上的話,會低電平引腳會干擾高電平腳的工作。

開關用10路撥動式小型開關,或者自己選擇其他開關形式。

電路工作原理:

電路原理圖如圖:

洞洞板圖(由於引腳多,不建議麵包板製作。)

關於在一塊arduino上使用多塊模組:每增加一塊模組,可以增加十路開關(當然你也可以使用兩塊4017做成行列矩陣控制100個開關。不過那個就屬於另外話題了)。增加的方式是將兩塊模組的rst,clk,vcc,gnd接在一起,接到微控制器的相應引腳,然後兩個模組的data腳分別接微控制器兩個io口。

arduino程式例子:

const

int rst = 

2; //板子的rst腳接arduino的d4口(自定義) 

const

int clk = 

3; //板子的clk腳接arduino的d3口(自定義) 

const

int data1 = 

4; //板子的data腳接arduino的d2口(自定義) 

//const int data2 = 5; //如果有第二塊板子的話,兩塊板子共用rst和clk引腳。data接arduino的d5口,第三塊板子可以類推接d6口(自定義) 

void setup()   

void loop()  ; 

//按照總開關數定義。可能要改為20,30等 

digitalwrite(rst, high); 

delaymicroseconds(

10); 

//所有delaymicroseconds(10);均是給4017乙個反應時間。 

digitalwrite(rst, low); 

delaymicroseconds(

10); 

for(

int i = 

0; i

10; i++)   

for(

int i = 

0; i

10; i++) 

//迴圈列印keystatus陣列,i<10可能要改為i<20,30等 

serial.println(); 

delay(100); 

洞洞板實物圖:

使用4017數字整合塊擴充套件arduino開關陣列

--用3個微控制器引腳讀取10個開關狀態

作者注:此方法並非擴充套件輸入腳最佳方法,如果需要大量擴充套件輸入腳的話(幾十甚至上百路),可以使用74hc165或者cd4021做shiftin。而不是本文的4017。

使用arduino做製作,需要有一組開關控制arduino狀態。但是arduino引腳不多,傳統接法開關多了要占用很多引腳。減少引腳的方法有很多,可以選矩陣方式,編碼器方式,還有本文要介紹的分時復用開關法等。

特點:十個開關占用三個資料引腳,之後每增加十個開關就增加乙個引腳。

4017是一塊十進位制計數器,每輸入乙個clk脈衝,q0~q9輪流產生高電平。每時刻有且只有乙個引腳高電平。

二極體防止多個開關閉合時,有的輸出端輸出高電平,有的輸出低電平,互相接上的話,會低電平引腳會干擾高電平腳的工作。

開關用10路撥動式小型開關,或者自己選擇其他開關形式。

電路工作原理:

電路原理圖如圖:

洞洞板圖(由於引腳多,不建議麵包板製作。)

關於在一塊arduino上使用多塊模組:每增加一塊模組,可以增加十路開關(當然你也可以使用兩塊4017做成行列矩陣控制100個開關。不過那個就屬於另外話題了)。增加的方式是將兩塊模組的rst,clk,vcc,gnd接在一起,接到微控制器的相應引腳,然後兩個模組的data腳分別接微控制器兩個io口。

arduino程式例子:

const

int rst = 

2; //板子的rst腳接arduino的d4口(自定義) 

const

int clk = 

3; //板子的clk腳接arduino的d3口(自定義) 

const

int data1 = 

4; //板子的data腳接arduino的d2口(自定義) 

//const int data2 = 5; //如果有第二塊板子的話,兩塊板子共用rst和clk引腳。data接arduino的d5口,第三塊板子可以類推接d6口(自定義) 

void setup()   

void loop() 

; //按照總開關數定義。可能要改為20,30等 

digitalwrite(rst, high); 

delaymicroseconds(

10); 

//所有delaymicroseconds(10);均是給4017乙個反應時間。 

digitalwrite(rst, low); 

delaymicroseconds(

10); 

for(

int i = 

0; i

10; i++)   

for(

int i = 

0; i

10; i++) 

//迴圈列印keystatus陣列,i<10可能要改為i<20,30等 

serial.println(); 

delay(100); 

洞洞板實物圖:

我想要積分

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...

想要積分積分

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...

我就是要積分而已

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 據說寫部落格就可以獲得10積分,我來看看是不是這麼簡單就可以了。這裡寫自定義目錄標題 你好!這是你第一次使用markdown編輯器所展示的歡...