Last active
August 23, 2017 04:10
-
-
Save wwin3286tw/9fa262ff3f688bce79bf043c1cc14c64 to your computer and use it in GitHub Desktop.
74HC595N 範例,只使用GPIO,74HC595N example, gpio only
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| //Author 撰寫者: https://www.facebook.com/ejtwn | |
| //使用者須自負風險,若造成損壞恕不負責 | |
| //At your own risk. | |
| //已經測試過(Tested board): Arduino Uno、ESP8266(NodeMCU)、ESP32、STM32F103 | |
| //Work on 5V or 3.3V | |
| //根據Datasheet 供應電壓可支援到7V,According datasheet, supply power 7V max. | |
| //OE connect to ground,OE請接低電位,負極 | |
| //MR PIN HIGH, MR需要接在高電位 | |
| //TI 74hc595n datasheet: http://www.ti.com/lit/ds/symlink/sn74hc595.pdf | |
| //NXP 74hc595n datasheet: https://assets.nexperia.com/documents/data-sheet/74HC_HCT595.pdf | |
| //針腳定義,PIN DEFINE: http://i.imgur.com/b7xkSFo.png (Image from internet) | |
| //pin 名稱相等表 | |
| //SRCLK==SH_CP==chip pin11 | |
| //RCLK==ST_CP==chip pin12 | |
| //SER==DS==chip pin 14 | |
| //SRCLR==MR==chip pin 10 | |
| int DS_pin =5; | |
| int STCP_pin = 18; | |
| int SHCP_pin = 19; | |
| boolean registers[7]; //陣列由零開始,0也算,所以只宣告到7,宣告成int也可以 | |
| //By change registers[] array value, then call void writereg(), You can change 74hc595 pin state | |
| //詳見 https://www.arduino.cc/en/Reference/Constants | |
| void setup(){ //初始化 | |
| pinMode(DS_pin,OUTPUT); | |
| pinMode(STCP_pin,OUTPUT); | |
| pinMode(SHCP_pin,OUTPUT); | |
| writereg(); //關掉所有的燈 | |
| } | |
| void writereg(){ | |
| digitalWrite(STCP_pin, LOW); //開始訊號,將STCP拉低,準備開始向暫存器寫資料 | |
| for (int i = 7; i>=0; i--){ | |
| digitalWrite(SHCP_pin, LOW); //準備對單一一個站存器寫資料 | |
| digitalWrite(DS_pin, registers[i]); //寫入,高電為相當於 HIGH,低電為相當於LOW | |
| digitalWrite(SHCP_pin, HIGH); //結束對單一暫存器寫入 | |
| } | |
| digitalWrite(STCP_pin, HIGH);//將所有暫存器寫完後的結束訊號 | |
| } | |
| void loop() | |
| { | |
| //以下程式會讓LED 一個一個亮起,每亮一個後,間隔10毫秒,又亮起另一個 | |
| for (int i=0;i<=7;i++){ | |
| registers[i] = HIGH; | |
| writereg(); | |
| delay(10); | |
| } | |
| //以下程式會讓LED 一個一個暗掉,每暗一個後,間隔10毫秒,又暗掉另一個 | |
| for (int i=0;i<=7;i++){ | |
| registers[i] = LOW; | |
| writereg(); | |
| delay(10); | |
| } | |
| //TODO: | |
| //您可以藉由變換registers[] 陣列的值,來改變LED(舉例)的點亮結果。 | |
| } | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment