一、前言
在開發指南(二)中,我們簡單介紹了按鍵中斷的使用方法,由于示例程序的各個測試內容都有使用到LCD顯示,所以本章先給大家講解一下LCD顯示的基本使用方法,參考應用手冊第25章節。
二、LCD結構:
在講解LCD顯示功能之前先了解一下LCD整體結構圖,如下圖1:
圖1. LCD整體結構圖
從圖中我們看到LCD整體結構分為Charge pump電路和LCD Driver電路,前者負責提供VLCD電壓給LCD驅動電路,后者負責根據設置驅動LCD進行顯示,其中控制VLCD電壓即可控制LCD顯示的灰度,寫入LCDDATA即可控制顯示內容,注意VLCD需外接1uF電容到VDD/GND,否則會影響顯示效果。
三、LCD顯示:
接下來我們按照main函數的執行順序簡單介紹一下如何控制LCD驅動液晶屏進行正常顯示。上電后先對LCD模塊進行初始化(見圖2),第一步還是要先開啟外設時鐘源,然后根據使用的液晶屏規格選擇COM數量和SEG數量,示例程序使用的液晶屏為4COM,顯示內容‘123456’只需要12個SEG即可滿足,因此可以選擇任意的12個SEG引腳作為液晶腳,示例程序以SEG0-SEG11作為液晶腳,其他SEG引腳仍做數字功能使用,選擇VLCD電壓為3.3V,其余設置保持默認值,最后打開Charge pump模塊和LCD驅動電路。
圖2. LCD初始化函數
LCD初始化完成后,接下來要在液晶屏上顯示‘123456’。首先液晶屏的每個引腳都有對應控制的段碼(參考圖3),其中PIN1-PIN12引腳可以對應連接到芯片的任意12個SEG引腳,為了便于代碼編寫,我們選擇將PIN1-PIN12連接至芯片的SEG0-SEG11引腳,PIN13-PIN16連接至芯片的COM0-COM3引腳。
圖3. 液晶屏段碼
圖4. 液晶屏段碼對應
參考圖4的示例和圖3的段碼可以發現每個‘8’形狀的全部段碼都被分配在兩個相鄰的PIN腳,也就是說控制SEG0-1、SEG2-3、SEG4-5、SEG6-7、SEG8-9、SEG10-11就可以完全獨立的控制6個‘8’的顯示。
我們再看一下LCD_DR2寄存器(見圖5,與其他LCD_DRx寄存器僅控制的SEG不同),可以分為4個部分S11C7-0,S10C7-0,S09C7-0,S08C7-0,其中S是SEG的縮寫,C是COM的縮寫,即S11C3代表可以控制SEG11&COM3對應的液晶段,也就意味著一個LCD_DRx寄存器就能控制4個SEG口進行顯示,在8COM設置下可驅動最多32段液晶段顯示4個‘8’,由于我們使用的液晶僅需要4COM,因此僅能驅動16段液晶段顯示2個‘8’。
圖5. LCD_DR2寄存器
由此可以根據需求控制液晶段組合顯示成阿拉伯數字、大小寫英文字母或其他人為定義的顯示內容,例如從圖3中可以看到SEG11控制6F、6G、6E、P6,SEG10控制6A、6B、6C、6D,SEG9控制5F、5G、5E、P5,SEG8控制5A、5B、5C、5D,共16段,按順序在LCD_DR2寄存器寫入0x0E0B0C0B,就可以控制LCD顯示數字‘5’和‘6’(如圖6),最后我們將常用的顯示內容進行組合定義,便于隨時取用(如圖7,不同液晶屏的組合順序不同,使用時需要注意)。
圖6. LCD顯示‘56’
圖7. LCD顯示字符組合
當這些準備工作完成之后,驅動LCD顯示我們想要的內容就變得非常簡單了,首先確定我們要顯示在哪一位上,要顯示的是什么字符,再調用函數LCD_DisplayData,其中Num表示顯示在哪一位,Data表示顯示的是什么字符,例如在第1位顯示數字‘0’,則Num=1,Data=0x00,通過比較即可將宏定義結果‘Disp_Num0’取出(如圖8的過程),再進入顯示程序LCD_MyDisplay即可將數字‘0’顯示在第1位上。
圖8. 自編LCD函數
最后我們按順序顯示‘123456’,實際運行后的結果如圖9。
圖9.LCD顯示驗證結果
四、開發問題簡析:
開發階段使用LCD模塊遇到最多的問題是顯示亂碼、亮度不夠、屏幕閃爍,要重點關注SEG口選擇是否正確、寫入LCD_DR寄存器的順序是否正確、宏定義是否正確以及VLCD電容是否外接,根據需要選擇合適的負載驅動能力。
五、總結:
LCD模塊的使用最重要的還是要理解如何準確點亮液晶屏對應的液晶段,其他的如顯示字符、閃爍等等內容都只是在基礎上進行應用。
審核編輯:湯梓紅
-
mcu
+關注
關注
146文章
16992瀏覽量
350311 -
lcd
+關注
關注
34文章
4411瀏覽量
167093 -
adc
+關注
關注
98文章
6438瀏覽量
544097 -
soc
+關注
關注
38文章
4122瀏覽量
217940
發布評論請先 登錄
相關推薦
評論