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