寫個簡介吧。做了一個會隨機停的八卦燈,程序很簡單,可以拿去學習。
面板在嘉立創打印的非常棒!!!
效果:https://www.bilibili.com/video/BV1YW4y1R7Gu/?spm_id_from=333.337.search-card.all.click
?
?
程序如下:
// 定義74HC595芯片引腳與Arduino引腳的對應關系
#define DS 8
#define OE 7
#define STCP 6
#define SHCP 5
// 定義要輸出的數據
byte data[] = {
? 0b11111110,
? 0b01111111,
? 0b10111111,
? 0b11011111,
? 0b11101111,
? 0b11111101,
? 0b11111011,
? 0b11110111,
};
void setup() {
randomSeed(analogRead(0));
? // 初始化74HC595芯片引腳
? pinMode(DS, OUTPUT);
? pinMode(OE, OUTPUT);
? pinMode(STCP, OUTPUT);
? pinMode(SHCP, OUTPUT);
? pinMode(2, INPUT_PULLUP);
? // 關閉輸出使能
? digitalWrite(OE, LOW);
? ? ? ? for (int i = 0; i < 8; i++) {
? ? ? ? digitalWrite(STCP, LOW);
? ? ? ? shiftOut(DS, SHCP, MSBFIRST, 0xff);
? ? ? ? digitalWrite(STCP, HIGH);
? ? ? }
}
void loop() {
? // 高速循環3秒
? if (digitalRead(2) == 0) {
? ? int stop = random(8); ?//定義在第幾個燈停下
? ? for (int a = 0; a < 11; a++) {
? ? ? for (int i = 0; i < 8; i++) {
? ? ? ? digitalWrite(STCP, LOW);
? ? ? ? shiftOut(DS, SHCP, MSBFIRST, data[i]);
? ? ? ? digitalWrite(STCP, HIGH);
? ? ? ? delay(a * 10);
? ? ? }
? ? ? if (a == 10) {
? ? ? ? for (int a = 1; a < 6; a++) {
? ? ? ? ? for (int i = 0; i < 8; i++) {
? ? ? ? ? ? digitalWrite(STCP, LOW);
? ? ? ? ? ? shiftOut(DS, SHCP, MSBFIRST, data[i]);
? ? ? ? ? ? digitalWrite(STCP, HIGH);
? ? ? ? ? ? delay(a * 100);
? ? ? ? ? }
? ? ? ? }
? ? ? ? for (int loop_end = 1; loop_end < 9; loop_end++) {
? ? ? ? ? if (loop_end == stop) {
? ? ? ? ? ? digitalWrite(STCP, LOW);
? ? ? ? ? ? shiftOut(DS, SHCP, MSBFIRST, data[stop - 1]);
? ? ? ? ? ? digitalWrite(STCP, HIGH);
? ? ? ? ? ? break;
? ? ? ? ? } else {
? ? ? ? ? ? digitalWrite(STCP, LOW);
? ? ? ? ? ? shiftOut(DS, SHCP, MSBFIRST, data[loop_end - 1]);
? ? ? ? ? ? digitalWrite(STCP, HIGH);
? ? ? ? ? ? delay(600);
? ? ? ? ? }
? ? ? ? }
? ? ? }
? ? }
? }
}
?
!注意:請使用瀏覽器自帶下載,迅雷等下載軟件可能無法下載到有效資源。
歡迎加入EEWorld參考設計群,也許能碰到搞同一個設計的小伙伴,群聊設計經驗和難點。 入群方式:微信搜索“helloeeworld”或者掃描二維碼,備注:參考設計,即可被拉入群。 另外,如您在下載此設計遇到問題,也可以微信添加“helloeeworld”及時溝通。
EEWorld Datasheet 技術支持