首頁(yè) > 評(píng)測(cè) > 使用MM32L0130 SLCD驅(qū)動(dòng)LCD顯示
使用MM32L0130 SLCD驅(qū)動(dòng)LCD顯示
- [導(dǎo)讀]
- 本帖最后由 MM靈靈靈 于 2022-10-26 09:20 編輯 使用MM32L0130 SLCD驅(qū)動(dòng)LCD顯示 靈動(dòng)股份推出的MM32L0130系列MCU具有片上SLCD液晶顯示控制器,SLCD 驅(qū)動(dòng)器是用于單色無(wú)源液晶顯示器(SLCD)的數(shù)字驅(qū)動(dòng)器,具
本帖最后由 MM靈靈靈 于 2022-10-26 09:20 編輯
靈動(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è)備引腳的數(shù)目決定。
一. SLCD介紹
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ā)生器

- 示幀率靈活控制
- 兼容 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)單,不需要模擬器件支持
- 兩種調(diào)整顯示對(duì)比度的方法
- 支持以下低功耗模式:低功耗運(yùn)行模式,睡眠模式,低功耗睡眠模式,停止模式,深度停止模式,待機(jī)模式;在不需要顯示的時(shí)候,可以完全關(guān)閉 SLCD 驅(qū)動(dòng)以達(dá)到降低功耗的目的
- 支持相位反轉(zhuǎn)模式,降低功耗和 EMI
- 每一幀顯示開(kāi)始的時(shí)候,通過(guò)中斷信號(hào)與軟件同步,更新顯示數(shù)據(jù)
- 閃爍功能
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 傳輸
- 支持中斷


時(shí)鐘產(chǎn)生模塊為波形發(fā)生模塊和電荷泵模塊提供各自所需的時(shí)鐘,其結(jié)構(gòu)如下:

三. 實(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模塊原理圖如下:


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ù)
void slcd_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
else if(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]));
//must call after SLCD_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ù)主要代碼:
if(Number1 < 10) {
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);
}
......(省略余下代碼)
- 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ù)主要代碼:
{
u8 i;
char TAB[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", " "},
};
u8 COMn = 0xFF, SEGn = 0xFF;
u8 Code = LCD_SearchCode(ch); // (2)
if(Code != 0xFF) {
for(i = 0; i < 7; i++) {
LCD_SearchName(TAB[Index], &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)
}
}
}
- 定義三維字符數(shù)組TAB[6][8][4],其中[6]對(duì)應(yīng)6位“8”字,[8]對(duì)應(yīng)“8”字的8段(含DP段),[4]表示元素的長(zhǎng)度,對(duì)應(yīng)各段的名稱。
- 形參ch表示要顯示的數(shù)字,為char類型,LCD_SearchCode(char ch)函數(shù)用來(lái)遍歷LCD_CODE_Table[38],如果傳入的參數(shù)ch和LCD_CODE_Table.ch相等,則返回LCD_CODE_Table.Data,即該數(shù)字對(duì)應(yīng)的段選信號(hào)。
- LCD_SearchName(TAB[Index], &COMn, &SEGn)函數(shù)遍歷所有COM口(4)和SEG口(22),如果TAB[Index]和LCD_NAME_Table[j]相等,則獲取COMn和SEGn的值,然后返回。
- 獲取COMn對(duì)應(yīng)的顯示數(shù)據(jù)寄存器索引,根據(jù)段選信號(hào),給顯示數(shù)據(jù)寄存器賦值。
- 獲取Dp段對(duì)應(yīng)的COMn和SEGn的值,然后返回。
- 獲取COMn對(duì)應(yīng)的顯示數(shù)據(jù)寄存器索引,根據(jù)Dp段選信號(hào),給顯示數(shù)據(jù)寄存器賦值。
-
- 本文系21ic原創(chuàng),未經(jīng)許可禁止轉(zhuǎn)載!
網(wǎng)友評(píng)論
- 聯(lián)系人:巧克力娃娃
- 郵箱:board@21ic.com
- 我要投稿
-
歡迎入駐,開(kāi)放投稿
- NRF52810藍(lán)牙數(shù)字耳機(jī)找人定制
預(yù)算:¥30005天前
- 125KW模塊式PCS軟硬件外包開(kāi)發(fā)
預(yù)算:¥1100000015小時(shí)前
- 12V汽車啟動(dòng)電源項(xiàng)目BMS設(shè)計(jì)
預(yù)算:¥50000023小時(shí)前
- 數(shù)據(jù)可視化軟件 開(kāi)發(fā)
預(yù)算:¥5000023小時(shí)前
- PLC項(xiàng)目調(diào)試修改
預(yù)算:¥100001天前
- 起動(dòng)電機(jī)控制器開(kāi)發(fā)
預(yù)算:¥1100001天前