<攝影 : Greatway>

一、成果展示

(一)、題目需求

  • 可將鍵盤輸入之字串顯示於 LCD 顯示器 
  • 延續,當密碼正確後,於 LCD 顯示器上顯示 The password is correct ,反之顯示 Wrong password

二、實作程式碼與解說

(一)、程式碼Demo



(二)、解題步驟

1.讀取鍵盤被觸發的位置

讀取鍵盤被觸發的位置
黃色所圈選的為這部份的程式碼。參考 4*4 鍵盤運作原理,先以1個 4*4 的矩陣進行初始化。對角線的值為 "False",作為一次用一個ROW來判斷值的依據。電腦掃描的方式,會先看ROW,再去看此ROW中的哪個COLUMN被觸發。

用圖來表示,會更容易理解。程式會先執行ROW(紅色)的掃描,再進行COLUMN(綠色)掃描。
<製圖 : greatway>

2.讀取相應位置的字元值


黃色所圈選的為這部份的程式碼。先看到最左邊,製作一個常數字串陣列,內容對應ROW和COLUMN的順序,依序為 1、2、3、A、4、5、6、B、7、8、9、C、0、F、E、D。

接著在 "Case" 的程式結構,加入 "Index Array"的程式方塊,索引鍵盤所觸發的相對位置,並在常數字串陣列中取出相對應的值。舉例來說,如果我按鍵盤的1,鍵盤的(1, 1)第一列第一行位置訊號被觸發, "Index Array"程式方塊會抓取相對應位置的值 "1"。

3.將密碼顯示欄位清空,以接收鍵盤所輸入的值

黃色所圈選的為這部份的程式碼。我們希望每次輸入的字元都可以被保留,形成字串,因此在最外圍的迴圈中,點選 "Add Shift Register(移位暫存器) "存取每次的輸入位元。同時給定一個空字串為初始值。

進行到這部份時,或許你會遇到一個問題。就是當你在鍵盤按下 "1" 時,密碼顯示視窗卻出現數量不等的1,但其實你只想輸入一次的 "1"。

為了解決這個問題,我們可以利用 "Value Change"這個程式方塊(請見下圖)。它的原理為當輸入狀態,值不一樣才會輸出。也就是當你按下鍵盤1,這時候視窗會顯示1,直到你重新按下第二個鍵之前,視窗不會再增加任何值。
因此將"Value Change"程式方塊接到 "Search 1D Array"後去接值,再把條件判斷的線接到 "Case" 結構中。

備註 : "Value Change" 程式方塊位置 : Functions >> Signal Processing >>  Point by Point >> Other Functions

4.設定LCD螢幕密碼正確與否的反饋

黃色所圈選的為這部份的程式碼。
依據題意,當密碼正確後,於 LCD 顯示器上顯 示 The password is correct ,反之顯示 Wrong password。因此利用 "Select"程式方塊來設定這兩個顯示字串,接著再將內容與LCD螢幕的清除指令(" \1B[j ")串接,讓LDC螢幕只顯示密碼的反饋內容,而不會有其他不相關的內容。程式請參考黃色圈選處。
進行到這邊,基本上我們已經能夠滿足題意所說的,要在LCD螢幕上依據密碼正確與否顯示相應的字串。然而,若此時接著輸入其他內容,LCD螢幕會在原本的顯示字串後添加後續的字串,不符合我們需求。實際上,我們希望繼續輸入其他內容後,LCD螢幕會把先前的字串內容清除。在下一個步驟,來解決上述問題。

5.設定再輸入內容後,密碼正確與否的提示字串會被清除

黃色所圈選的為這部份的程式碼。


利用移位暫存器的功能,將空字串輸入進行視窗清空。如下圖所示。


接著順著資料流的方向,進入到 " case " 結構中,利用 "Select" 程式方塊,如果內容為空字串,則進行LCD初始化,若否,則輸入空字串,即可回到LCD初始化狀況。再利用字串合併的程式方塊,將後續輸入的字串內容與初始化的內容合併,即可在LCD螢幕上呈現。如下圖。


最後別忘了在主迴圈外,增加LCD初始化的設定,請見下圖。



程式撰寫到這個地方,應可滿足題意,順利執行。關於如何將程式燒錄到NI my|RIO硬體中,將於下篇文章做介紹。



0 留言