TI公司MSP430系列單片機是一種超低功耗的混合信號控制器,其中包括一系列器件,它們針對不用的應(yīng)用由不同的模塊組成。其中FLASH系列使高效電子系統(tǒng)變得輕巧,F(xiàn)LASH存儲器也具有很強的靈活性。同時為了在低頻率振蕩器的驅(qū)動下得到較高的穩(wěn)定頻率,某些MSP430器件上使用了鎖頻技術(shù)FLL或增強型鎖頻環(huán)技術(shù)FLL+。如MSP430F425的時鐘模塊中使用了FLL+技術(shù),這樣可以得到穩(wěn)定的頻率。 液晶驅(qū)動 MSP430器件上的液晶顯示器的控制/驅(qū)動將簡化液晶顯示器的顯示。不同型號的液晶驅(qū)動能力不同,我們采用 MSP430的F42X系列,有128段驅(qū)動能力。 液晶的驅(qū)動有4種方法:靜態(tài),2MUX或1/2占空比,3MUX或1/3占空比, 4MUX或1/4占空比。對于不同系列、不同型號的液晶驅(qū)動原理,控制方法都是一樣的,不同點在于驅(qū)動液晶段數(shù)不一樣,或可顯示信息的多少不一樣。我們采用4MUX,這種方式也最簡單。 其中需要注意以下兩點: (1)液晶的偏壓。由于液晶驅(qū)動使用交流電壓,所以必須根據(jù)液晶的工作模MSP430進行偏壓設(shè)置,具體的操作是:STATIC模式下,R33開路,R03-R23接地,2MUX模式下,分別在R33、R13以及R13、R03之間接上 10K的電阻;3/4MUX模式下,分別在R33、R23之間,R23、R13以及R13、R03之間接上10K的電阻,這樣就能保證COM0-COM3 出來供給液晶塊的電壓符合要求。 (2)頻率的設(shè)置。MSP430有三種時鐘ACLK(輔助時鐘)、MCLK(主時鐘)、SMCLK(子時鐘),其中液晶的驅(qū)動頻率FCLK來自ACLK。在XTIN和XTOUT之間接上振蕩頻率為32KHz的晶振,F(xiàn)clk可以根據(jù)需要選為1024Hz、512Hz、256Hz、128Hz等。由FRFQ0和FRFQ1的設(shè)置可以滿足不同液晶對頻率的要求,其中Flcd=2*MUX(rate)*F(framing)。 例如:采用3MUX,已知F(framing)=100Hz-30Hz, 由F(LCD)=2*MUX(rate)*F(framing)=6*F(framing), 可知F(LCD)=180Hz-600Hz。可選擇的F(LCD)為1024Hz、512Hz、256Hz、128Hz,所以F(LCD)=32K/128=256Hz,所以FRFQ0=1、FRFQ1=0。 在以上兩點做好的基礎(chǔ)上,我們只要把要輸出的數(shù)字所對應(yīng)的代碼輸出到MSP430的顯存就可以顯示。實驗中如液晶抖動,可適當提高液晶的驅(qū)動頻率。如液晶亮度不夠,應(yīng)適當調(diào)整偏壓電阻的大小。 在驅(qū)動電路中,液晶可以等效為電容。兩個電極分別為公共極與段極。公共極由CMOn信號驅(qū)動,段極由SEGn信號驅(qū)動。由此可以得到4種驅(qū)動方法。 (1)靜態(tài)驅(qū)動:使用一個引腳作為液晶公共端COM0,而每一段段極需要另一個引腳驅(qū)動。 (2)2MUX驅(qū)動:使用兩個引腳作為液晶公共端COM0、COM1每兩段段極需要另一引腳驅(qū)動。 (3)3MUX驅(qū)動:使用三個引腳作為液晶公共端COM0、COM1、COM2,每3段段極需要另一引腳驅(qū)動。 (4)4MUX驅(qū)動:使用4個引腳作為液晶公共端COM0、COM1、COM2,每4段段極需要另一引腳驅(qū)動。 LCD048的資料 顯示“123456”程序 #include const char digit[10] = { 0x7B, // "0" LCD segments a+b+c+d+e+f lcd= lsd048 0x12, // "1" 0x4F, // "2" 0x1F, // "3" 0x36, // "4" 0x3D, // "5" 0x7D, // "6" 0x13, // "7" 0x7F, // "8" 0x3F // "9" }; char *LCD=LCDMEM; void main(void) { int i; WDTCTL = WDTPW + WDTHOLD; // Stop WDT FLL_CTL0 |= XCAP14PF; // Configure load caps for (i = 0; i < 10000; i++); // Delay for 32 kHz crystal to LCDCTL = 0x03d; // 4-Mux LCD, segments S0-S15 BTCTL = BTFRFQ1; // Set freqLCD = ACLK/128 for (i=0;i<6;i++) { LCD[ i]=0; } for(i=1;i<7;i++) LCD[ i]=digit[ i]; } |