1. 程式人生 > >Arduino基礎入門篇21—點陣流動顯示

Arduino基礎入門篇21—點陣流動顯示

在各種公共場合看到的點陣屏大多都有流動顯示效果,顯示內容可以上下左右的滾動,本篇我們來實現點陣屏的流動顯示。

1. 實驗材料

  • Uno R3開發板
  • 配套USB資料線
  • 麵包板及配套連線線
  • 8*8點陣屏

2. 實驗步驟

1. 根據原理圖搭建電路。

依然是前篇點陣屏電路連線方式。根據點陣屏管腳定義,點陣屏的[9, 14, 8, 12, 1, 7, 2, 5]分別連線開發板的[6,11, 5, 9, 14, 4, 15, 2],點陣屏的[13, 3, 4, 10, 6, 11, 15, 16]分別連線開發板的[10,16, 17, 7, 3, 8, 12, 13]。

這裡需要注意,Uno R3開發板的A0A5也可以做普通GPIO使用,編號分別為14

19。

實驗原理圖如下圖所示:

實驗原理圖

實物連線圖如下圖所示:

實驗原理圖

2. 新建sketch,拷貝如下程式碼替換自動生成的程式碼並進行儲存。

/*
   Roll
   點陣屏流動顯示
*/
int leds[8] = {6, 11, 5, 9, 14, 4, 15, 2}; //點陣屏正極引腳
int gnds[8] = {10, 16, 17, 7, 3, 8, 12, 13}; //點陣屏負極引腳

//字型檔
char test[] = {
  0x00, 0x7C, 0x8A, 0x92, 0xA2, 0x7C, 0x00, 0x00, // -0-
  0x00, 0x00, 0x42, 0xFE, 0x02, 0x00, 0x00, 0x00, // -1-
  0x00, 0x46, 0x8A
, 0x92, 0x92, 0x62, 0x00, 0x00, // -2- 0x00, 0x84, 0x82, 0x92, 0xB2, 0xCC, 0x00, 0x00, // -3- 0x00, 0x18, 0x28, 0x48, 0xFE, 0x08, 0x00, 0x00, // -4- 0x00, 0xE4, 0xA2, 0xA2, 0xA2, 0x9C, 0x00, 0x00, // -5- 0x00, 0x3C, 0x52, 0x92, 0x92, 0x8C, 0x00, 0x00, // -6- 0x00, 0x80, 0x8E, 0x90, 0xA0, 0xC0, 0x00, 0x00, // -7- 0x00, 0x6C, 0x92, 0x92, 0x92, 0x6C, 0x00, 0x00, // -8- 0x00, 0x62, 0x92, 0x92, 0x94, 0x78, 0x00
, 0x00, // -9- 0x00, 0x3E, 0x48, 0x88, 0x48, 0x3E, 0x00, 0x00, // -A- 0x00, 0xFE, 0x92, 0x92, 0x92, 0x6C, 0x00, 0x00, // -B- 0x00, 0x7C, 0x82, 0x82, 0x82, 0x44, 0x00, 0x00, // -C- 0x00, 0xFE, 0x82, 0x82, 0x82, 0x7C, 0x00, 0x00, // -D- 0x00, 0xFE, 0x92, 0x92, 0x92, 0x82, 0x00, 0x00, // -E- 0x00, 0xFE, 0x90, 0x90, 0x90, 0x80, 0x00, 0x00, // -F- }; void setup() { for (int i = 0; i < 8; i++) { pinMode(leds[i], OUTPUT); pinMode(gnds[i], OUTPUT); digitalWrite(gnds[i], HIGH); //負極引腳拉高,熄滅所有LED } } void ledclean() { for (int i = 0; i < 8; i++)//將點陣屏正極ladies,負極拉高,關斷顯示 { digitalWrite(leds[i], LOW); digitalWrite(gnds[i], HIGH); } } //字元顯示 void ledShow(char num, char dat) { digitalWrite(gnds[num], LOW); for (int i = 0; i < 8; i++) { digitalWrite(leds[i], dat & 0x80); // 1 0 0 0 0 0 0 0 dat <<= 1; } delayMicroseconds(100); digitalWrite(gnds[num], HIGH); ledclean(); } void loop() { for (int a = 0; a < 120; a++) //控制流動顯示內容 { for (int i = 0 ; i < 200 ; i++)//迴圈顯示達到延時效果 { for (int c = 0; c < 8; c++) //8列迴圈掃描,達到點陣屏驅動效果 { ledShow(c, test[c + a]); } } } }

3. 連線開發板,設定好對應埠號和開發板型別,進行程式下載。

程式下載

4. 程式下載後,點陣屏從右往左流動顯示。

流動顯示

5. 我們對loop()部分的程式進行修改,來改變每次流動的列數。

void loop() {

  for (int a = 0; a < 16; a++) //控制流動顯示內容
  {
    for (int i = 0 ; i < 200 ; i++)//迴圈顯示達到延時效果
    {
      for (int c = 0; c < 8; c++) //8列迴圈掃描,達到點陣屏驅動效果
      {
        ledShow(c, test[c + a*8]);
      }
    }
  }

}

6. 當每次移動8列時,就會整屏覆蓋翻頁顯示,效果如下:

翻頁顯示

3. 實驗分析

  1. 程式中定義了一個數組用於儲存需要顯示的字型檔,每8個表示一個字元,然後通過ledShow()函式來進行解析顯示。使用for迴圈控制指定的列然後將傳入的字元資料進行按位與,取出每一位進行操作。
  2. 在loop()中三重for迴圈,最裡面控制8列掃描顯示,中間for迴圈用於控制顯示時間,最外層for迴圈用於控制流動位置。
  3. 依次移動需要顯示的字元資料,就達到了流動顯示效果。可以控制每次移動的間距,當每次移動8列就會實現整屏覆蓋的效果。

掃碼加入微信公眾號:TonyCode

相關推薦

Arduino基礎入門21點陣流動顯示

在各種公共場合看到的點陣屏大多都有流動顯示效果,顯示內容可以上下左右的滾動,本篇我們來實現點陣屏的流動顯示。 1. 實驗材料 Uno R3開發板 配套USB資料線 麵包板及配套連線線 8*8點陣屏 2. 實驗步驟 1. 根據原理圖搭建電路。 依然是前篇點陣屏

Arduino基礎入門24—繼電器控制

繼電器是一種電子控制器件,是用較小的電流去控制較大電流的一種“自動開關”,通常應用於自動控制電路中起著自動調節、安全保護、轉換電路等作用。 本篇介紹繼電器的使用,通過串列埠傳送命令來控制繼電器動作。 1

Arduino基礎入門11—光控燈

本篇介紹光敏電阻,通過模擬輸入採集環境光強來控制LED燈亮度,做一個無需人為干預的自動控制裝置。 感測器是一種檢測裝置,能感受並採集到被測量的資訊,在當下物聯網、智慧家居中佔據重要地位。一切智慧化、自動化裝置、各種雲端計算大資料分析中最基礎的就是資料,資料從何而

Arduino基礎入門13—外部中斷

本篇介紹Arduino外部中斷的使用,通過外部中斷檢測震動開關的觸發來控制LED燈亮滅。 1. 中斷介紹 我們已經知道,Arduino程式是在loop()中不斷的迴圈的。在程式的執行中,我們時常需要監控一些事件的發生,比如對某一感測器的返回資料進行解析。使用輪詢

智能家居——IoT零基礎入門

bridge ash 構圖 從零開始 diy 芯片 基礎入門 溫濕度 hub 概要 本文主要根據筆者從零開始接觸硬件,以小白視角開啟IoT探索,根據相關資料DIY一個溫濕度傳感器。後經過探索發現新大陸——Home Assistant&Home

javaScript基礎入門

lose this cti 獲取 scrip 技術分享 consola 基礎 不執行 1、同步和異步   同步:程序從上到下的執行,通俗的說for循環很耗費時間,但是程序就是傻等,傻傻的等待10個haha輸出,然後輸出3,比如媽媽去接兒子的飛機,需要等很長時間,等待的時候就

Java程式設計師的職業生涯學習建議——基礎入門

這部分主要適用於尚未做過Java工作的同學,包括一些在校生以及剛準備轉行Java的同學。 一、Java基礎 首先去找一個Java的基礎教程學一下(教材或者網路視訊)。 學習Java基礎的時候,應該儘量多動手,很多時候,你想當然的事情,等你寫出來執行一下,你就會發現不是這麼回事兒,不

Shell基礎 -- 入門

  shell 英文含義是“殼”,這是相對於核心來說的,shell 也確實就像是核心的殼,通常來說,所有對核心的訪問都要經由 shell 。同時,shell 還是一門功能強大的程式語言。shell 是 Linux 學習中必然要經過的一環。實際上,Linux 系統在啟動完成,登入成功後執行的第一個程式就是一個

Python學習筆記 (基礎入門)

基本資料型別 整形 :Integer ,int 浮點型:Float ,float 布林值:Boolean,bool 字串:String, str 使用方法:{” ;”” ;”“” “”“} 均能表示字串 陣列: [ , ,

SQL Server基礎(七) VS2015 連線資料庫——基礎入門:主要分為配置並載入App.config檔案、建立資料工廠物件、建立連線物件、建立命令物件、建立讀取器物件幾個步驟。

一、簡介          1、關於學習C#如何連線資料庫或斷開連線資料(斷開連線資料庫往後我將討論),我是按照這本書一點一點學習的。        現在,終於用到了資料庫,於是,學習如何去連線資

帶你玩轉Linux命令列(基礎入門

一、學習前準備 幫助文件 Tab 補全 Tab 補全是非常有用的一個功能,可以用來自動補全命令或檔名,省時準確。 未輸入狀態下連按兩次 Tab 列出所有可用命令 已輸入部分命令名或檔名,按 Tab 進行自動補全,多用你就肯定會喜歡的了。

【Linux開發】Linux及Arm-Linux程式開發筆記(零基礎入門

Linux及Arm-Linux程式開發筆記(零基礎入門篇)  目錄 一、Arm-Linux程式開發平臺簡要介紹... 3 1.1程式開發所需系統及開發語言... 3 1.2系統平臺搭建方式... 4 二、Linux開發平臺搭建... 5 2.1安裝虛擬工作站...

學習Arduino——基礎入門

學習Arduino—基礎入門 [email protected] 1、使用電位器 //程式初始化 void setup() { Serial.begi

Arduino基礎入門四:數字IO口作為輸入

一、器件介紹    按鍵常用在電子控制線路中作為輸入,有自鎖式(按下按鈕,開關狀態發生改變,並保持改變後的狀態,直到下次按鈕按下才再次開關改變)和非自鎖按鈕(按下按鈕時,改變開關狀態,鬆開回到原狀態)兩類。   本課程採取四腳輕觸開關,屬於非自鎖按鈕。四腳輕觸開關由常開觸

Arduino基礎入門套件教程PDF

輸入 tps 現實 調用 免費 col 命令 什麽 imp Arduino基礎入門套件教程PDF:上期分享了《Arduino+Android互動智作:初入物聯網》高清書簽中文版,這期分享《Arduino基礎入門套件教程PDF》都是在闖客網技術論壇可以免費下載的,更多的物聯網

Elasticsearch 7.x 之文件、索引和 REST API 【基礎入門

前幾天寫過一篇《Elasticsearch 7.x 最詳細安裝及配置》,今天繼續最新版基礎入門內容。這一篇簡單總結了 Elasticsearch 7.x 之文件、索引和 REST API。 什麼是文件 文件Unique ID 文件元資料 什麼是索引 REST API 一、索引文件(Document) 1.

Java應用基礎微專業-入門-第1章用程序來做計算

version mac ear 浮點 spa class pin system font p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 20.0px "PingFang SC" } p.p2 { margin: 0.0px 0.

Docker 基礎知識-入門

docker1. Docker簡介和KVM區別 1.1 docker的三大理念 構建 運輸 運行 ps:有點類似於java代碼,一次構建到處運行 1.2 docker結構 相關說明:image: 和虛擬機的鏡像類似container: 用鏡像創建的實例repository: 類似於yum倉庫dock

java程式設計師菜鳥進階(十三)linux基礎入門(一)vmvare下安裝linux RedHat圖解(超詳細

對於linux,我從大二就想學習一下,但一直苦於無從下手,所以一直拖到現在,鑑於筆者瞭解很多人在linux入門的困難在何處,所以我認為本套入門基礎文章還是挺適合想學習linux的朋友,本系列文章大約十篇文章左右,近期會不斷更新下來,沒有linux基礎但又想學習linux的朋友可以關注一下本系列

關於Java基礎的複習總結(一)入門

千里之堤,毀於雙十一。 主題內容源於當初學Java的幾個筆記本。週末整理換季衣物的時候找到的。重新整理一遍,上傳儲存下來,也是對基礎的複習總結。同時紀念當年初學Java的日子。 1、java發展史 1995誕生於sun公司,被oracle公司收購 開源,免費的 1996年,推出jdk1