暑假的時候被人安利了HPDL1414這款數碼管,當時還不清楚這個數碼管是啥,就是看外形比較中意吧。最近因為武漢發生了新型肺炎這破事,於是這個買回來吃灰了半年的數碼管被我翻出來了,准備寫一寫他的驅動。找到淘寶賣家要到了一份datasheet才知道他的名字是HPDL-1414。帶着這個名字去百度搜索一下,也能搜索到一些文章,用HPDL-1414作電腦狀態顯示等。
這些文章我也點進去看了,其中電腦狀態顯示的那個是開源的,但是我沒有積分,故沒有下載他的代碼,我只看了文章。文章對底層也沒有一個清晰明確的講解,很多地方都是一筆帶過,可能對於萌新電子愛好者,以及其他非電子類的朋友而言比較難於理解。所以本文會結合1414的datasheet來講解如何驅動1414數碼管。
首先來說說要准備的東西:主控一塊、3.3v電源一個、5v電源一個、1414數碼管一個、杜邦線若干、焊台、焊錫、洞洞板、2.54mm間距的電子積木插座(圓孔排母)若干、2.54mm間距排針若干。
我使用的主控是STM32F429IGT6,這塊芯片要用3.3V供電,然而1414使用的是5V(Typ)供電,因此要准備兩個電源。但是如果你使用的是51或者Arduino這類本身就是5V供電的芯片,可以共用一個電源。

洞洞板、插座、排針這些自然是制作一個固定1414的底座,並且能引出1414的引腳,通過杜邦線與主控相連。
打開1414的datasheet,首先看引腳部分:

1414一共有12個引腳,6、7腳作為供電腳,7個數據腳和一個寫使能腳。寫使能腳為3腳,並且低電平有效。
datasheet中告知了如何辨別1腳:

即有字的一面左邊第一個引腳是一腳,按照逆時針旋轉過去依次為12個引腳的排序。
接着來看時序圖:

這個時序圖是我們寫程序的說明書,根據時序圖我們可以知道操作引腳的順序,並且引腳保持高/低電平的時間也有標注:

主要是
值得我們關注。在操作的時候,先把D0~D6(段選)操作到自己想要的結果,然后操作A0、A1(位選),操作完成后,經過
操作WS對1414進行寫操作,WS要維持
時間,也就是說,每次寫操作的間隔要在
以上(也可以理解為這款數碼管的刷新率吧)。不過從上表可以看到
典型值為100ns,這個時間已經非常短了。
以上大概是這么個思路,為了更加簡潔明了一些,我畫了一個流程圖來表示:

接着開始寫代碼了,由於我使用的是STM32的芯片,ST提供了一個叫做STM32CUBEMX的工具,我直接使用這個工具對代碼環境進行配置。
引腳配置:

時鍾配置:

工程配置:

這個軟件比較方便的就是配置起來很舒服,不用自己再去開時鍾,開外設,並且我配置的GPIO它在生成代碼時會自動幫我我宏定義在main.h中:

這樣做有什么好處呢?如果我更換了一款芯片,或者我跟換了引腳,我的程序可以不需要任何修改,直接修改軟件中的配置然后生成新的代碼就可以使用了。
下面是具體代碼
寫使能與寫失能:非常簡單,拉低WR線就是代表1414可以寫入顯示的數據,拉高WR線就是代表1414顯示當前數據保持不變。

位選:這個要看datasheet

根據datasheet可知,A0和A1為00、01、10、11的時候,位選為0、1、2、3。因此程序如下:

然后是段選,說到這里,就體現這款米字數碼管和普通的數碼管區別了。1414的段選直接和ASCII對應起來的,可以顯示64種ASCII字符,從0x20顯示到0x5F:

寫程序就是把對應的ASCII碼轉換成7位GPIO的狀態。所以我定義了7個變量用於表示ASCII的每一位,也是GPIO的狀態。

通過一個形參輸入ASCII,然后解析每一位是0還是1,來拉高或拉低對應的數據線:

完成了段選位選之后,就可以寫一個功能函數了:寫操作。這個函數自然包含兩個形參:段選(要寫進去的字或符號)、位選(要顯示在哪里)。

要注意這里我在寫操作的時候延時了1ms,因為HAL庫中支持的最快的延時單位就是ms,雖然也有一些花里胡哨的操作可以弄成us,但是為了保證系統的穩定(其實是想偷懶),這里就用了1ms。根據之前的分析,100ns以上都是可以的。即想要效率更高的話可以選擇延時500ns或者1us之類。
然后還可以酌情加一些清屏之類的功能函數(就是讓四個管全部顯示空格):

來一個實例展示:

顯示效果:

其實還是挺簡單的,主要是之前懶,現在是在家里百無聊賴,就隨手寫了寫。
PS:我在某寶買的4個,60塊錢(含郵費),壞了3個,還差點把我的F4燒壞了,要不是我警覺,怕要大大損失一筆。
22:18:09 更新:
加了一個滾動顯示功能上去,代碼也挺簡單的:

視頻地址:https://www.bilibili.com/video/av85324219?from=search&seid=14388677469779731988
