在需要領(lǐng)域中大家都會(huì)看到段碼液晶屏,這種屏不僅有著普通數(shù)碼屏的特征,還有著點(diǎn)陣液晶屏的特點(diǎn),今天我們就來(lái)聊聊段碼LCD屏幕。
首先,大家都不要以為使用單片機(jī)來(lái)驅(qū)動(dòng),就以為是斷碼屏直流驅(qū)動(dòng)的了,其實(shí)呢,段碼屏它是交流驅(qū)動(dòng)的,什么是交流驅(qū)動(dòng)呢?例如矩形波、正弦波等等。大家可能會(huì)經(jīng)常的使用驅(qū)動(dòng)芯片來(lái)玩,例如HT1621等等,但是有一些段式屏的IO口是比較少的,或者說(shuō)是IO口充足的情況之下,也懶得在再去寫(xiě)控制器的驅(qū)動(dòng)了。但是,IO的模擬驅(qū)動(dòng),段式液晶是有一個(gè)前提條件的,就是IO必須要是三態(tài),
為什么?下面我們就一起細(xì)細(xì)的道來(lái):
第一步:段碼液晶屏最重要的參數(shù):占空比、工作電壓、偏壓比。這三個(gè)參數(shù)都是非常重要的,都必須要滿足。
第二步:驅(qū)動(dòng)的方式:我們根據(jù) LCD 的驅(qū)動(dòng)原理可以知道,LCD的像素點(diǎn)上面只能夠加上 AC的電壓,LCD顯示器的對(duì)比度則是由 COM腳上的電壓值減去
SEG 腳上的電壓值來(lái)決定,當(dāng)這個(gè)電壓差在大于 LCD 飽和電壓時(shí)就能夠打開(kāi)像素點(diǎn),小于 LCD 閾值電壓時(shí)就能關(guān)閉像素點(diǎn)了,LCD 型的MCU 已經(jīng)由內(nèi)建的
LCD 驅(qū)動(dòng)電路自動(dòng)產(chǎn)生出LCD驅(qū)動(dòng)信號(hào)了,因此只需要 I/O 口能仿真輸出該驅(qū)動(dòng)的信號(hào),就能夠完成 LCD 的驅(qū)動(dòng)了。
段碼液晶屏主要是有兩種引腳,COM和SEG,和數(shù)碼管比較像,但是,壓差必須要是交替變化的,例:第一時(shí)刻是正向的3V,那么第二時(shí)刻就必須要是反向的3V,注意一點(diǎn),如果你給段碼液晶屏通直流電,那么不用多久這個(gè)屏幕就會(huì)報(bào)廢,所以千萬(wàn)要注意。下面我們就來(lái)考慮如何模擬COM口的波形,我們以1/4D,1/2B為例子:
段碼LCD屏的驅(qū)動(dòng)方法
只要模擬出以上的波形,你的液晶屏就已經(jīng)成功了一大半。
void display_sub(u8 y) //lcd display subroutine
{
switch(y) //4*com,VDD and -VDD LCD display,so 8 timebase interrupt one sacn
period
{
case 1:
{com1_output_high();break;}
case 2:
{com1_output_low();break;}
case 3:
{com2_output_high();break;}
case 4:
{com2_output_low();break;}
case 5:
{com3_output_high();break;}
case 6:
{com3_output_low();break;}
case 7:
{com4_output_high();break;}
case 8:
{com4_output_low();break;}
default:
{LCDPluseStep=0;
get_display_code(AD_Value,KeyScanRetVal);
break;}
}
}
復(fù)制代碼
如上圖代碼所示,定時(shí)到2ms,讓4個(gè)COM交替的輸出波形就可以了。
同時(shí)我們還要注意,在COM的輸出較高的時(shí)候,如果要屏幕亮,那么SEG就要輸出低,那么在COM輸出低的時(shí)候,SEG就要輸出高了,保證COM和SEG的壓差大于1/2B工作電壓就可以正常顯示了
下面我們看其中一個(gè)com口輸出時(shí)的函數(shù)
static void seg1_output(void) //seg1 output subroutine
{
if(1 == (LCDPluseStep%2)) //com_pulse is odd,com output high (VDD)
{
if(0 == (DisplayCode1&0x10))
{SEG1=1;}
else
{SEG1=0;}
}
else //com_pulse is even,com output low (VSS)
{
if(0 == (DisplayCode1&0x10))
{SEG1=0;}
else
{SEG1=1;}
}
}
復(fù)制代碼
必須時(shí)刻讓SEG電平跟COM的電平成反向,那么驅(qū)動(dòng)段式液晶就不會(huì)有多大的難度了