使用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編輯器所展示的歡...