博主本人之前一直使用的是f10系列的stm32晶元,這次專案需要用到lcd顯示,故選用了stm32的l053晶元其io口自帶lcd驅動功能。使用新的一款晶元,首先當然是下官方手冊(官網英文版過於簡潔,中文版的比較適合初學者),然後找相似例程進行分析。
當然關於lcd顯示的原理,這裡就不過多贅述了,我之前一篇部落格已經詳細介紹過了。下面我就結合例程來分析下,如何用庫函式寫lcd的程式。首先硬體原理圖上lcd顯示屏的引腳連線到晶元具有lcd復用功能的io口上,分別有公共端com口以及段碼seg口,例程中相應的lcd圖如下:
或許大家和我一樣剛開始看到這副都是不太明白的,其實簡單分析下就發現個數碼管其實由4個com口和8個seg口共同點亮的。在l0系列的晶元中,每個com口都有對應的快取區,裡面寫入的值即對應各個seg口,下面是com口快取區的部分截圖:
由上圖分析也可得這款晶元支援com最多對應52個seg口,方便數值操作,一般把乙個com口的暫存器寫入分為兩部分後面具體**會有分析。之後,我們便開始編碼了,將要顯示的不同數字圖案的段碼編輯好。注意一點,這裡與傳統微控制器(如51之類不自帶lcd硬體口的)編碼不同。之前的普通微控制器寫數碼管,都是一位即乙個com口對應乙個要顯示的數碼管位,然後我們則會把要顯示的數字段碼置位,然而你仔細看lcd圖會發現這裡要點亮乙個數字需要用到4個com口。所以編碼一次com口操作,對應seg口只需要操作2位即可。具體段碼表如下:
一、編碼完後,我們開始程式實現顯示lcd的過程。第一步:當然是老步驟,初始化io口,開啟時鐘,這裡例程用到數碼管顯示計時所以也開啟下定時器。其io口配置與f10系列略有不同,具體**如下:
二、第二步便是顯示段碼的寫入,這裡也是最為重點部分。因為是4位顯示,所以共用到8段碼即可所以定義的是8位存放段碼變數,寫入的方法也是按2位操作,分4次每次移位2位最後完成8位段碼變數的編寫。注意seg1變數實際指seg0到seg7共8個段碼口的存放資料,具體**如下:
三、第三步便是呼叫寫入com口快取區的庫函式,引數主要有com口暫存器序號,值得注意的是l0系列最多支援52個seg口,所以這個com0便分為ram0與ram1,每個ram有32位資料存放。還有引數為掩碼,具體數值為0即可,具體**圖如下:
三步之後,lcd即可點亮。具體要配合按鍵控制和計時顯示,我下篇部落格再詳細分析。
fgetc庫函式使用
fgetc函式從檔案流裡取出下乙個位元組並把它作為乙個字元返回。當它到達檔案尾部或者出現錯誤時,它返回eof。怎麼區分這兩種情況呢?用ferror或feof來判斷。這段話來自經典書籍linux程式設計 int c while c fgetc fp eof fputc c,out if feof fp...
庫函式的使用
itoa atoi strrev函式的使用 atio 把字串轉換成整型數 stdlib.h itoa 將任意型別的數字轉換為字串,itoa int a,char s,c a被轉換的整數,s轉換後儲存的字元陣列,c轉換進製數 strrev 把字串s的所有字元的順序顛倒過來 不包括空字元null str...
ctype庫函式的使用
也許字母會有大小寫之分,記得用tolower 或toupper 換成統一的格式就可以了。tolower 語法 include int tolower int ch 功能 函式字元ch的小寫形式。toupper 語法 include int toupper int ch 功能 函式字元ch的大寫形式。...