STM8驅動LCD段碼屏

    在工作中遇到用stm8驅動LCD段碼屏,發現很有意思,特在此記錄下來。整個說明過程由液晶屏顯示原理,驅動斷碼LCD液晶屏的方式,stm8驅動斷碼屏三塊進行說明。

一、液晶屏顯示原理

    液晶是一種介於固態和液態中間的物質。通電時,液晶分子的排列變得有序,使光線容易通過;不通電時排列混亂,阻止光線通過。通過此原理製作成液晶顯示器。

    液晶顯示器(LCD/Liquid Crystal Display)的顯像原理,是將液晶置於兩片導電玻璃之間,靠兩個電極間電場的驅動,引起液晶分子扭曲向列的電場效應,以控制光源透射或遮蔽功能,在電源關開之間產生明暗變化,從而將影像顯示出來。若加上彩色濾光片,則可顯示彩色影像。在兩片玻璃基板上裝有配向膜,所以液晶會沿着溝槽配向,由於玻璃基板配向膜溝槽偏離90度,所以液晶分子成爲扭轉型,當玻璃基板沒有加入電場時,光線透過偏光板跟着液晶做90度扭轉,通過下方偏光板,液晶面板顯示白色(如圖1左);當玻璃基板加入電場時,液晶分子產生配列變化,光線通過液晶分子空隙維持原方向,被下方偏光板遮蔽,光線被吸收無法透出,液晶面板顯示黑色(如圖1右))。液晶顯示器便是根據此電壓有無,使面板達到顯示效果。(網上盜用,感謝,原文地址http://www.520101.com/html/base/1202066690.html

圖1

液晶屏一般有這幾個參數:可視角度、亮度和對比度、響應時間、顯示色素。

二、驅動斷碼LCD屏的方式

1、靜態驅動

基本原理:在對應的電極間加交變電場或者不加電場。

實現過程:有電場時,當電壓比液晶的閾值高很多時,LCD處於選通狀態。無電場時,LCD爲非選通狀態。

2、多路驅動(動態驅動法)

基本原理:電極沿着X、Y方向排列,按照順序給X電極施加選通波形(交流電壓),給Y電極施加與X電極同步的選通或者非選通波形。週而復始的操作,控制XY交叉點的像素爲選通態或者非選通態。

圖2 電極陣列

驅動X電極從第一行到最後一行所需的時間爲幀週期Tf,驅動每一行所用的時間Tr與幀週期的比值爲佔空比:Duty=Tr/Tf=1/N。N爲X的行數。

偏壓比:Bias=1/a,爲非選通波形電壓和選通波形電壓之比。最佳值:

偏壓比取最佳值得目的是克服交叉效應

在動態驅動方式下,要使某一位置如(i,j)點顯示,就需在第i列和第j行上同時施加選擇電壓,使該點的變電場強最大,但此時除(i,j)點外,第i列和第j行的其餘各點也承受了一定電壓,這些點稱爲半選通點。若半選通點上的有效電壓大於閾值電壓時,在屏幕上將出現不應有的顯示,使對比度下降,這就是交叉效應。解決交叉效應的辦法是平均電壓法,即把半選通點與非選通點的電壓平均,適度提高非選通點的電壓來抵消半選通點上的一部分電壓,使半選通點上的電壓下降,從而提高顯示對比度。

圖3 平均電壓法圖例

如圖3所示,讓(COM2,SEG1)爲選通點,按照圖示施加電壓,則各點的電位差爲:

選通點:(2,1):V1+V2

半選通點(COM2或SEG1上的點):(1,1)(3,1)(4,1):V2    (2,2)(2,3)(2,4):V1-1/a'V1

非選通點:-1/a'V1

選通點的電壓需要達到液晶的閾值,則V1+V2=VLCD。同時半選通點和非選通點的電壓應該相等|V2|=|-1/a'V1|,解得V1=(a'/a'+1)VLCD,V2=(1/a'+1)VLCD。

令a=a'+1,可得到各個點的電壓爲

選通點:VLCD    半選通點:(1/a)VLCD以及(a-2/a)VLCD     非選通點-(1/a)VLCD

三、STM8驅動LCD段碼屏

STM8自帶有LCD屏驅動,驅動的方式使用動態驅動法。使用時需要配置相應的參數,然後向LCD顯示內存(LCD_RAM)相應位置寫入數據來驅動相應的像素點。以下爲詳細配置方式:

1、使用庫函數的方式來配置驅動LCD的基本參數

(1)時鐘配置:由圖4可看出LCD顯示屏的時鐘有RTC時鐘提供,所以配置時也需要配置RTC的時鐘,代碼如下:

 /* Enable LCD/RTC clock */
  CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE); 
  CLK_PeripheralClockConfig(CLK_Peripheral_LCD, ENABLE);
  
  CLK_RTCClockConfig(CLK_RTCCLKSource_LSI, CLK_RTCCLKDiv_1); /*內部時鐘頻率38KHZ*/

這裏的時鐘頻率爲f=38Khz。

圖4 時鐘樹

(2)基礎參數配置,這裏用到了8個COM,則配置代碼爲

LCD_Init(LCD_Prescaler_2,LCD_Divider_17,LCD_Duty_1_8, LCD_Bias_1_3,LCD_VoltageSource_Internal);

①Frequency selection register (LCD_FRQ)(時鐘配置寄存器)

位7:4 PS[3:0]:CLK 16位預分頻器(函數的第一個參數)

3:0 DIV[3:0]:16到31的除數(函數的第二個參數)

則驅動LCD屏的頻率爲:fLCD=(f/LCD_Prescaler_2)/LCD_Divider_17

②函數的第三,第四個參數分別爲佔空比和偏壓比,在這裏用到了8個COM口,所以Duty爲1/8;Bias爲1/3。函數最後一個參數是設置使用外部電源還是內部電源,這裏需要從單片機內部獲取電源,所以設置爲使用內部電源。

(3)設置LCD的SEG引腳

  LCD_PortMaskConfig(LCD_PortMaskRegister_0, 0xF0);  //seg4 - 7  
  LCD_PortMaskConfig(LCD_PortMaskRegister_1, 0xFF);  //seg8 - 15 
  LCD_PortMaskConfig(LCD_PortMaskRegister_2, 0x3F);  //seg16 - 21

這裏硬件上驅動LCD屏的引腳爲PE3,PE4,PE5...PD5,PD6,PD7,通過查詢手冊的到它們爲SEG4~SEG21;

 圖5 SEG腳圖

如圖5所示,配置SEG4~SEG7,需要配置LCD_PM0的高4位,即第一個函數,別的引腳也是如此。

(4)配置對比度,死區時間,脈衝持續時間,使能LCD

LCD_ContrastConfig(LCD_Contrast_Level_6);           //對比度 
LCD_DeadTimeConfig(LCD_DeadTime_1);		    //死區時間
LCD_PulseOnDurationConfig(LCD_PulseOnDuration_7);   //脈衝持續時間
  
LCD_Cmd(ENABLE);

對比度配置越高,屏幕畫面對比越高。控制VLCD,電壓超過液晶閾值越多,顯示越清晰。

死區時間越高,畫面的對比越低。

脈衝持續時間越久,屏幕畫面顯示效果越好,但是會更耗電。

2、基礎參數配置完成,通過往LCD顯示內存(LCD_RAM)相應位置寫入數據來驅動相應的像素點。

圖6 LCD_RAM

如圖6所示不同的COM和SEG口對應着不同的LCD_RAM。例如,COM0和SEG10控制的筆段對應的爲S0[10],此時想要控制顯示,需要向這個位置寫入1,即配置LCD->RAM[1] |= 0x04;

可以發現COM4和SEG10控制的筆段對應的也是S0[10],這裏是因爲,使用超過4個COM口時,需要配置LCD_RAM頁,使用以下函數進行配置,頁1控制COM0,1,2,3;頁2控制COM4,5,6,7

/**
  * @brief  Select the LCD page where the data will be written.
  * @param  LCD_Page: The accessed LCD page.
  *          This parameter can be one of the following values:
  *            @arg LCD_PageSelection_FirstPage: The LCD RAM is selected as the first page
  *            @arg LCD_PageSelection_SecondPage: The LCD RAM is selected as the second page  
  * @retval None
  */
void LCD_PageSelect(LCD_PageSelection_TypeDef LCD_PageSelection)

完成以上的步驟,就可以驅動LCD斷碼屏的一個一個的液晶(筆段)組成不用的形狀了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章