靈動(dòng)股份推出的MM32L0130系列MCU具有片上SLCD液晶顯示控制器,SLCD 驅(qū)動(dòng)器是用于單色無(wú)源液晶顯示器(SLCD)的數(shù)字驅(qū)動(dòng)器,具有多達(dá) 8 個(gè)公共端和多達(dá) 63 個(gè)分段端, SLCD 引腳最多為 64 個(gè),因此最多可驅(qū)動(dòng) 240(60x4)或 448(56x8)個(gè)段碼。驅(qū)動(dòng)段碼的最終數(shù)量由產(chǎn)品規(guī)格書中設(shè)備引腳的數(shù)目決定。
1SLCD介紹
1.1 SLCD功能框圖
SLCD 驅(qū)動(dòng)模塊包括以下幾個(gè)基本的子模塊,如下圖所示。
顯示數(shù)據(jù)寄存器
SLCD 輸出驅(qū)動(dòng)引腳
時(shí)鐘產(chǎn)生單元,包括時(shí)鐘預(yù)分頻器、幀時(shí)鐘分頻器、電荷泵時(shí)鐘分頻器和閃爍時(shí)鐘分頻器
閃爍控制器
內(nèi)置升壓電荷泵和偏置電壓生成單元
時(shí)序控制和波形發(fā)生器
? ?
1.2 SLCD主要特征
顯示幀率靈活控制
兼容 APB 接口
支持靜態(tài)、 1/2、 1/3、 1/4、 1/6 和 1/8 占空比
支持 1/2、 1/3 和 1/4 偏置電壓設(shè)置
為了存儲(chǔ)顯示數(shù)據(jù),內(nèi)置了 16*32bit 顯示數(shù)據(jù)寄存器
通過(guò)軟件來(lái)調(diào)整 SLCD 輸出電壓,來(lái)調(diào)節(jié)對(duì)比度
外圍電路簡(jiǎn)單,不需要模擬器件支持
1)內(nèi)嵌電容升壓器來(lái)得到比電源電壓更高而且不受其影響的 SLCD 驅(qū)動(dòng)電壓。升壓器產(chǎn)生的 SLCD驅(qū)動(dòng)電壓范圍可調(diào),可以匹配支持 3V 或者 5V 的 LCD 屏幕
2)SLCD 驅(qū)動(dòng)電源可以通過(guò)軟件來(lái)選擇內(nèi)部電源或外部電源。
3)可以選擇使用內(nèi)嵌電容分壓器對(duì) SLCD 驅(qū)動(dòng)電壓進(jìn)行分壓,得到驅(qū)動(dòng)電壓的中間值(VLCDrail1,VLCDrail2, VLCDrail3, VLCDrail4)
兩種調(diào)整顯示對(duì)比度的方法
1)當(dāng)采用內(nèi)部升壓器來(lái)提供 VLCD 電源時(shí),可以通過(guò)軟件調(diào)節(jié) VLCD 輸出電壓
2)其它情況下可以在每幀顯示之間插入死區(qū)時(shí)間
支持以下低功耗模式:低功耗運(yùn)行模式,睡眠模式,低功耗睡眠模式,停止模式,深度停止模式,待機(jī)模式;在不需要顯示的時(shí)候,可以完全關(guān)閉 SLCD 驅(qū)動(dòng)以達(dá)到降低功耗的目的
支持相位反轉(zhuǎn)模式,降低功耗和 EMI
每一幀顯示開(kāi)始的時(shí)候,通過(guò)中斷信號(hào)與軟件同步,更新顯示數(shù)據(jù)
閃爍功能
1)可以從所有段碼中任意選擇 1 到 8 個(gè)段碼閃爍顯示,也可以閃爍顯示全部段碼
2)在靜態(tài)、 1/2、 1/3、 1/4 占空比模式下可以閃爍顯示任意段碼
3)軟件選擇閃爍頻率,支持閃爍頻率 0.5Hz, 1Hz, 2Hz 或 4Hz
靈活的引腳復(fù)用功能,可以配置任意 LCD 驅(qū)動(dòng)引腳成為 COM 或者 SEG 功能;SLCD 的驅(qū)動(dòng)引腳在沒(méi)有被配置成 SLCD 功能的時(shí)候,可以作為 GPIO 引腳來(lái)使用
SLCD 驅(qū)動(dòng)電平(VLCDrail1, VLCDrail2, VLCDrail3, VLCDrail4)的去耦合功能
支持低功耗驅(qū)動(dòng)波形
支持 DMA 傳輸
支持中斷
2功能概述
2.1 顯示數(shù)據(jù)寄存器
為了存儲(chǔ)顯示數(shù)據(jù), SLCD 驅(qū)動(dòng)模塊內(nèi)置了 16 個(gè) 32 比特顯示數(shù)據(jù)寄存器。顯示數(shù)據(jù)寄存器中的比特位與 LCD 顯示屏上的段碼一一對(duì)應(yīng), 如果要點(diǎn)亮 LCD 顯示屏上的某個(gè)段碼, 則需要把顯示數(shù)據(jù)寄存器中的相對(duì)應(yīng)的比特寫為‘1’;反之如果要熄滅某個(gè)段碼, 則需要把對(duì)應(yīng)的比特寫為‘0’, 如下圖所示。
在 static, 1/2, 1/3 和1/4 duty模式下,顯示數(shù)據(jù)寄存器被劃分為主顯示數(shù)據(jù)寄存器片區(qū)(SLCD_DR[7:0])和輔助顯示數(shù)據(jù)寄存器片區(qū)( SLCD_DR[15:8]);在 1/6 和 1/8 duty 模式下,顯示數(shù)據(jù)寄存器(SLCD_DR[15:0])全部作為主顯示數(shù)據(jù)寄存器片區(qū)使用,沒(méi)有輔助顯示數(shù)據(jù)寄存器片區(qū)的分劃。顯示數(shù)據(jù)寄存器的具體結(jié)構(gòu)和詳細(xì)的片區(qū)劃分情況見(jiàn)下圖:
? ?
2.2 主/輔助顯示數(shù)據(jù)寄存器
在 static,1/2,1/3和1/4 duty 模式下,可以通過(guò) SLCD 幀控制寄存器(SLCD_FCR)中的DRSEL比特選擇控制將主顯示數(shù)據(jù)寄存器片區(qū)(SLCD_DR[7:0])或者輔助顯示數(shù)據(jù)寄存器片區(qū)(SLCD_DR[15:8])的數(shù)據(jù)顯示到 LCD 屏幕上,如果DRSEL為‘0’, 顯示主顯示數(shù)據(jù)寄存器片區(qū)的數(shù)據(jù);如果 DRSEL 為‘1’,顯示輔助顯示數(shù)據(jù)寄存器片區(qū)的數(shù)據(jù)。SLCD 狀態(tài)寄存器(SLCD_SR)中的 DRSS 比特可以指示出顯示數(shù)據(jù)當(dāng)前使用的顯示數(shù)據(jù)寄存器片區(qū), 如果當(dāng)前使用的是主顯示數(shù)據(jù)寄存器片區(qū)的數(shù)據(jù), 則 DRSS 比特為‘0’;如果當(dāng)前使用的是輔助顯示數(shù)據(jù)寄存器片區(qū)的數(shù)據(jù),則 DRSS 比特為‘1’。將 SLCD 幀控制寄存器(SLCD_FCR)中的 DRLC 比特置‘1’可以清除主顯示數(shù)據(jù)寄存器片區(qū)的數(shù)據(jù);將 DRHC 比特置‘1’可以清除輔助顯示數(shù)據(jù)寄存器片區(qū)的數(shù)據(jù)。
2.3 COM 和 SEG 引腳配置
SLCD 模塊提供公共端(COM)引腳和段(SEG)引腳的驅(qū)動(dòng)。
2.4 SLCD 引腳配置
SLCD 的 SEG 和 COM 引腳是同通用功能 I/O 復(fù)用的。在不作為 SLCD 引腳使用時(shí),這些引腳可以配置成通用功能 I/O 引腳。具體配置請(qǐng)參考通用功能 I/O 章節(jié)。
2.5 COM 和 SEG 引腳重映射
當(dāng)作為 SLCD 引腳使用時(shí),每一個(gè) SLCD 引腳都可以被重映射為 COM 或者 SEG 引腳,以簡(jiǎn)化電路板上的布局布線。SLCD 模塊支持從 L0 到 L63 最多 64 個(gè) SLCD 引腳(SLCD 引腳的最終數(shù)量由產(chǎn)品規(guī)格書中設(shè)備引腳的數(shù)目決定),每一個(gè)引腳可以通過(guò)相應(yīng)的 SLCD_CFGR0 和 SLCD_CFGR1 寄存器來(lái)配置,重映射其作為 COM 或者 SEG 功能。
2.6 時(shí)鐘產(chǎn)生
時(shí)鐘產(chǎn)生模塊為波形發(fā)生模塊和電荷泵模塊提供各自所需的時(shí)鐘,其結(jié)構(gòu)如下:
時(shí)鐘產(chǎn)生模塊結(jié)構(gòu)圖
3實(shí)驗(yàn)
3.1 硬件設(shè)計(jì)
本次實(shí)驗(yàn)使用MM32L0130片上SLCD驅(qū)動(dòng)LCD液晶屏顯示。硬件使用靈動(dòng)股份設(shè)計(jì)的EVB-L0136開(kāi)發(fā)板,板載LCD接口可以適配GDC0689液晶屏,GDC0689具有半透和反射兩種模式,6位8字、6點(diǎn)視角、寬溫,適用于工業(yè)設(shè)備等產(chǎn)品。GDC0689液晶屏全顯效果圖如下:
EVB-L0136開(kāi)發(fā)板LCD模塊原理圖如下:
原理圖1(LCD部分)
原理圖2(MM32F0130部分)
3.2 程序設(shè)計(jì)
例程主要用到GDC0689液晶屏的數(shù)碼管部分進(jìn)行計(jì)數(shù)顯示,以最右邊的數(shù)碼管作為小數(shù)部分,其余數(shù)碼管作為整數(shù)部分,從最低位開(kāi)始累加計(jì)數(shù),滿十就向前一位進(jìn)1。
靈動(dòng)股份設(shè)計(jì)了MM32F0130 SLCD相關(guān)的庫(kù)函數(shù)以及API函數(shù),容易理解和使用,代碼較多,這里不再進(jìn)行贅述,僅對(duì)部分主要程序進(jìn)行分析。
3.21 SLCD測(cè)試函數(shù)
voidslcd_test(void) { slcd_init(); while(1){ LCD_DisplayDataUpdate(); DELAY_Ms(100); } }
3.22 SLCD初始化函數(shù)
void slcd_init()函數(shù)主要代碼:
使能PWR、BKP時(shí)鐘
RCC_APB1PeriphClockCmd(RCC_APB1ENR_PWR,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1ENR_BKP,ENABLE);
使能SLCD時(shí)鐘,軟件復(fù)位SLCD
RCC_SLCD_ClockCmd(SLCD,ENABLE); SLCD_DeInit();
SLCD的時(shí)鐘源選擇LSI,配置LSI時(shí)鐘頻率為40KHZ。
RCC_LSICLKConfig(RCC_LSICLKSource_40KHz); RCC_LSICmd(ENABLE); RCC_SLCDCLKConfig(RCC_SLCDCLKSource_LSI);
LSI作為SLCD時(shí)鐘源,對(duì)應(yīng)時(shí)鐘預(yù)分頻系數(shù)為4,分頻系數(shù)為16
elseif(slcd_clk_source_freq<=?LSI_VALUE)?{ ????????pre_value?=?SLCD_Prescaler_4; ????????div_value?=?SLCD_Divider_16; ????}
初始化SLCD結(jié)構(gòu)體,配置1/4偏置、1/3占空比,VDD作為SLCD電源使能
slcd_struct.SLCD_Divider=div_value; slcd_struct.SLCD_Duty=SLCD_Duty_1_4; slcd_struct.SLCD_Bias=SLCD_Bias_1_3; slcd_struct.SLCD_VoltageSource=SLCD_VoltSrcCapCharggDownVdd; SLCD_Init(&slcd_struct);
SLCD pin對(duì)應(yīng)的GPIO配置為SEG或COM,并使能
SLCD_IO_Config(&(SEGorCOM[0])); //mustcallafterSLCD_init
配合SLCD COM索引寄存器
SLCD_COM_IndexInit(&(SCLD_COM_Index[0]));
配置電荷泵時(shí)鐘分頻為1024
SLCD_ChargePumpClockDivConfig(SLCD_ChargePumpClock_Div1024);
正常驅(qū)動(dòng)波形
SLCD_LowPowerDriveCmd(DISABLE);
配置無(wú)死區(qū)插入,當(dāng)在兩幀之間插入死區(qū)時(shí),SEG和COM信號(hào)電壓為零
SLCD_DeadTimeConfig(SLCD_DeadTime_0);
清除顯示數(shù)據(jù)寄存器
LCD_Clear();
關(guān)閉SLCD閃爍模式,閃爍時(shí)鐘分頻系數(shù)為512
SLCD_BlinkConfig(SLCD_BlinkMode_Off,SLCD_BlinkFrequency_Div512);
配置SLCD閃爍索引
SLCD_BLINK_IndexInit(SCLD_BLINK_Index);
3.23 LCD更新顯示數(shù)據(jù)函數(shù)
LCD_DisplayDataUpdate()函數(shù)主要代碼:
Number1=(Number1+1)%1000000; if(Number110)?{ ????????LCD_DisplayNumber1(0,?'?',?0); ????????LCD_DisplayNumber1(1,?'?',?0); ????????LCD_DisplayNumber1(2,?'?',?0); ????????LCD_DisplayNumber1(3,?'?',?0); ????????LCD_DisplayNumber1(4,?'0',?1); ????????LCD_DisplayNumber1(5,?'0'?+?Number1,?0); ????} ????else?if(Number1?100)?{ ????????LCD_DisplayNumber1(0,?'?',?0); ????????LCD_DisplayNumber1(1,?'?',?0); ????????LCD_DisplayNumber1(2,?'?',?0); ????????LCD_DisplayNumber1(3,?'?',?0); ????????LCD_DisplayNumber1(4,?'0'?+?((Number1?/?10)?%?10),?1); ????????LCD_DisplayNumber1(5,?'0'?+?((Number1?/?1?)?%?10),?0); ????} ????......(省略余下代碼)
其中LCD顯示函數(shù) void LCD_DisplayNumber1(u8 Index, char ch, u8 Point)用于配置數(shù)碼管顯示,函數(shù)的3個(gè)形參含義如下:
Index表示選中的數(shù)碼管索引,對(duì)應(yīng)6個(gè)數(shù)碼管,可選值為0,1,2,3,4,5
ch表示要顯示的數(shù)字,為char類型
Point表示該數(shù)碼管是否顯示Dp字段,顯示則為1,否則為0
舉例:代碼中LCD_DisplayNumber1(5, '0' + Number1, 0)表示選中第5個(gè)數(shù)碼管(最右),顯示內(nèi)容是Number的值,不顯示Dp字段。
3.24 LCD顯示函數(shù)
LCD_DisplayNumber1()函數(shù)主要代碼:
voidLCD_DisplayNumber1(u8Index,charch,u8Point) { u8i; charTAB[6][8][4]={//(1) {"5A","5B","5C","5D","5E","5F","5G","DP5"}, {"6A","6B","6C","6D","6E","6F","6G","DP6"}, {"7A","7B","7C","7D","7E","7F","7G","DP7"}, {"8A","8B","8C","8D","8E","8F","8G","DP8"}, {"9A","9B","9C","9D","9E","9F","9G","DP9"}, {"10A","10B","10C","10D","10E","10F","10G",""}, }; u8COMn=0xFF,SEGn=0xFF; u8Code=LCD_SearchCode(ch);//(2) if(Code!=0xFF){ for(i=0;i7;?i++)?{ ????????????LCD_SearchName(TAB[Index][i],?&COMn,?&SEGn);???//?(3) ????????????if((COMn?!=?0xFF)?&&?(SEGn?!=?0xFF))?{ ????????????????LCD_WriteBit(COMn,?LCD_SEG_Table[SEGn][0],?LCD_SEG_Table[SEGn][1],?(Code?>>i)&0x01);//(4) } } LCD_SearchName(TAB[Index][7],&COMn,&SEGn);//(5) if((COMn!=0xFF)&&(SEGn!=0xFF)){ LCD_WriteBit(COMn,LCD_SEG_Table[SEGn][0],LCD_SEG_Table[SEGn][1],Point);//(6) } } }
1定義三維字符數(shù)組TAB[6][8][4],其中[6]對(duì)應(yīng)6位“8”字,[8]對(duì)應(yīng)“8”字的8段(含DP段),[4]表示元素的長(zhǎng)度,對(duì)應(yīng)各段的名稱。
2形參ch表示要顯示的數(shù)字,為char類型,LCD_SearchCode(char ch)函數(shù)用來(lái)遍歷LCD_CODE_Table[38],如果傳入的參數(shù)ch和LCD_CODE_Table[i].ch相等,則返回LCD_CODE_Table[i].Data,即該數(shù)字對(duì)應(yīng)的段選信號(hào)。
3LCD_SearchName(TAB[Index][i], &COMn, &SEGn)函數(shù)遍歷所有COM口(4)和SEG口(22),如果TAB[Index][i]和LCD_NAME_Table[i][j]相等,則獲取COMn和SEGn的值,然后返回。
4獲取COMn對(duì)應(yīng)的顯示數(shù)據(jù)寄存器索引,根據(jù)段選信號(hào),給顯示數(shù)據(jù)寄存器賦值。
5獲取Dp段對(duì)應(yīng)的COMn和SEGn的值,然后返回。
6獲取COMn對(duì)應(yīng)的顯示數(shù)據(jù)寄存器索引,根據(jù)Dp段選信號(hào),給顯示數(shù)據(jù)寄存器賦值。
3.3 實(shí)驗(yàn)演示
下載程序運(yùn)行,觀察GDC0689液晶屏顯示。
審核編輯:湯梓紅
-
控制器
+關(guān)注
關(guān)注
114文章
16838瀏覽量
182253 -
寄存器
+關(guān)注
關(guān)注
31文章
5401瀏覽量
122781 -
lcd
+關(guān)注
關(guān)注
34文章
4480瀏覽量
170133 -
SLCD
+關(guān)注
關(guān)注
0文章
5瀏覽量
9419 -
MM32
+關(guān)注
關(guān)注
1文章
107瀏覽量
968
原文標(biāo)題:靈動(dòng)微課堂 (第232講) | 使用MM32L0130 SLCD驅(qū)動(dòng)LCD顯示
文章出處:【微信號(hào):MindMotion-MMCU,微信公眾號(hào):靈動(dòng)MM32MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
使用MM32L0130 IRM實(shí)現(xiàn)紅外發(fā)碼
基于MM32L0130的低功耗電子時(shí)鐘設(shè)計(jì)方案相關(guān)資料分享
請(qǐng)問(wèn)有人使用IAR進(jìn)行過(guò)MM32L0130的開(kāi)發(fā)嗎?
靈動(dòng)微MM32L0130系列32位微控制器的詳細(xì)介紹
使用MM32L0130片上IRM模塊實(shí)現(xiàn)紅外發(fā)碼
MM32L0130 RTC日歷和鬧鐘
基于MM32L0130的低功耗電子時(shí)鐘設(shè)計(jì)
帶SLCD屏驅(qū)動(dòng)的低功耗單片機(jī)MM32L0130
靈動(dòng)微電子低功耗單片機(jī)MM32L0130開(kāi)發(fā)板申請(qǐng)

集成段碼LCD驅(qū)動(dòng)低功耗系列MM32L0130
使用MM32L0130和HYS1254的電子秤方案驗(yàn)證

評(píng)論