【導讀】該項目系列的總體目標是設計一個智能環境光監視器,它可以分析室內光線水平并執行相應的響應操作,例如控制燈調光器。在開發這個項目的過程中,我們需要一種方便的方法來表示電流和電壓幅度的模數轉換值。
該項目系列的總體目標是設計一個智能環境光監視器,它可以分析室內光線水平并執行相應的響應操作,例如控制燈調光器。在開發這個項目的過程中,我們需要一種方便的方法來表示電流和電壓幅度的模數轉換值。因此,我們將從編寫固件開始,該固件可以將存儲在變量中的普通數字轉換為一系列單獨的數字,然后這些數字將決定我們將哪些像素數據陣列傳輸到 LCD 模塊。
該固件旨在顯示三位數測量值,單位為毫伏、伏特、微安或毫安。如果顯示的單位是伏特或毫安,位數字后的小數點將自動啟用。這意味著顯示接口可以處理從 0 μA 到 9.99 mA 的電流幅度和從 0 mV 到 9.99 V 的電壓幅度。但是,這個范圍的大部分將永遠不會被使用——光傳感器的輸出電流為 5 mA, ADC 無法測量高于其參考電壓的電壓,在本設計中為 2.4 V。
端口輸入輸出
您可以參閱本文 以獲取有關使用交叉開關和將引腳配置為輸入或輸出的更深入信息。如上圖所示,SPI 信號被啟用并路由到連接到相應 LCD 信號的引腳。SPI片選信號由固件控制,輸出到P0.1,因為內置的SPI從機選擇信號與LCD接口不兼容。
外設和中斷
在項目的這個階段,我們只需要兩個外設:SPI 和 Timer4。SPI 配置為 3 線主機模式,時鐘分頻器設置為產生 875 kHz 的 SPI 時鐘頻率。
SPI 中斷被啟用是因為 SPI 傳輸由 SPI 中斷服務例程中的狀態機控制。傳輸每個字節后都會觸發中斷。Timer4 用于短延遲,例如 LCD 模塊數據表中指定的設置和保持延遲。一個 Timer4 計數約為 490 ns,因此如果我們需要 6 μs 的延遲,我們將 Timer4 寄存器設置為零并等待計數達到 12。
固件
該項目的固件可分為三個主要部分:LCD 通信接口、將存儲在變量中的數字轉換為一系列單獨數字的函數以及更新 LCD 像素數據陣列的例程。
液晶界面
我們使用多行更新模式與 LCD 通信,如前一篇文章所述。當微控制器啟動時,它將 LCD 清除為所有白色像素。隨后通過將 128 位像素數據寫入一個或多個行地址來更新 LCD。所有 LCD 更新均由“LCDControl.c”源文件中的 UpdateLCD() 函數啟動,數據傳輸過程在 SPI 中斷服務程序中繼續進行。該項目中的 LCD 通信接口包括對我們在之前文章中使用的內容的一項改進:每次調用 UpdateLCD() 都可以通過將適當的行和一行地址放入 LCDLineStart 和 LCDLineStop 變量來指定要更新顯示的 哪一部分 。
將數字轉換為數字
重要的是要理解存儲在變量中的數值與我們用來可視化數值的一系列數字根本不同。一個變量只是一個由 1 和 0 組成的序列;這個序列可以用多種方式解釋——例如,解釋為無符號整數、有符號整數或浮點值。然后需要進一步轉換,以視覺形式表達這個解釋值。將變量值轉換為一系列數字或字符的標準 C 語言方法是庫中包含的 printf() 函數。但盡可能避免庫例程是明智的,主要是因為設計自己的代碼更有趣、更有價值、更有啟發性。不過,也有實際的好處。
免責聲明:本文為轉載文章,轉載此文目的在于傳遞更多信息,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請聯系小編進行處理。
推薦閱讀: