BL55072
1、特點
液晶驅動輸出:Common 輸出 4 線,Segment 輸出 36 線
內置顯示寄存器 36*4=144bit
2 線串行接口(SCL,SDA)
內置震盪電路
內置液晶驅動電源電路
1/3 Bias, 1/2 Bias 1/4 Duty
內置 Buffer AMP
不需要外部元件
低功耗設計
內置上電復位電路
搭載閃爍功能
VDD 電壓范圍 2.5V~5.5V
高抗 EMC 性能
TSSOP48 封裝
2、管腳編號
3、功能描述
1、功能電路
BL55072內部集成了LCD驅動器所必需的所有功能電路。這些電路包括:LCD
偏置電壓發生器、LCD電壓選擇器、內部時鍾(OSC =25.6KHz)、顯示寄存器、段
/背極輸出電路、I2C串行接口、上電復位電路和顯示控制電路。
2、顯示驅動原理
BL55072有36個段輸出SEG0--SEG35和4個背極輸出COM0—COM3,它們和
LCD直接相連,當少於36個段輸出應用時,不用的段可以空出。BL55072采用1/4背
極輸出1/3偏置電壓或者1/2偏置電壓顯示方式。
3、顯示內容和寄存器地址之間的關系可見下表
4、I2C 寫入數據方式:
5、I2C通訊方式
如圖所示:發送第一個起始條件后,緊接着發送BL55072地址
(01111100),然后發送指令和顯示數據,指令字節中的最高位“C”用以標明是否
是最后一個指令字節,當C=“1”時表示后面的字節仍是指令字節;當C=“0”時則
表明該字節為最后一個指令字節。最后一個指令字節之后為一系列顯示數據字節
(DISPLAY DATA),這些顯示數據存放在顯示寄存器中,由數據指針和子地址
計數器指示的地址上。數據指針和子地址計數器可自動變更,數據直接裝載到
BL55072上,A是每個字節之后的應答位,在主控器發送完最后一個字節后產生
一個終止條件P。
參考代碼如下所示:
void SEG_IIC_Start()
{
SEG_SDI_1;
SEG_CLK_1;
delay_ms(1);
SEG_SDI_0;
delay_ms(1);
SEG_CLK_0;
}
void SEG_IIC_Stop()
{
SEG_SDI_0;
SEG_CLK_0;
__nop();
SEG_SDI_1;
delay_ms(1) ;
SEG_CLK_1;
}
void SEG_IIC_WriteByte(int8_t input)
{
int8_t temp;
for(temp=8;temp!=0;temp--)
{
if((input&0x80)!=0)
{
SEG_SDI_1;
}
else
{
SEG_SDI_0;
}
__nop();;
SEG_CLK_1;
delay_ms(1);
SEG_CLK_0;
input=input<<1;
__nop();
}
SEG_SDI_1;
SEG_SDI_IN;
SEG_CLK_1;
delay_ms(1);
SEG_CLK_0;
SEG_SDI_OUT;
}
4、控制命令
BL55072 共有 6 個控制命令字。命令和數據都是以字節的形式發送到
BL55072,它們的區別在於傳送字節的最高位 C,當 C=1 時表示其后傳送的字節仍
是命令;C=0 表示其后傳送的字節是最后一個命令,接下來傳送的是一系列數據。
下面列出了 BL55072 的 6 個命令字:
MODE SET
Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | |
---|---|---|---|---|---|---|---|---|
Value | C | 1 | 0 | # | display | bias | # | # |
default | C | 1 | 0 | # | 0 | 0 | # | # |
[3] Display on and off
0 – Display off (default)
1 – Display on
[2] Bias control
0 –1/3 bias (default)
1 – 1/2 bias
ADSET
Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | |
---|---|---|---|---|---|---|---|---|
Value | C | 0 | 0 | Addr[4:0] | ||||
default | C | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
地址寄存器設置,
該寄存器用於寫數據前設置數據的起始地址,或者讀數據/command 前設置讀取
數據/command 的地址。
讀寫數據地址范圍為 000H~011H,寫數據時如果初始地址大於 11H,則寫入數
據對應到地址 00H 中。若在寫入初始地址后,不斷寫入數據,當寫入數據超過
36*4 時,數據被重新寫入到初始地址中。
DISCTL
Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | |
---|---|---|---|---|---|---|---|---|
Value | C | 0 | 1 | FR[1:0] | FR[1:0] | P2 | SR[1:0] | SR[1:0] |
default | C | 1 | 1 | 0 | 0 | 0 | 1 | 0 |
顯示控制
[4:3]: frame frequency control (FR)
00 - 80Hz (default)
01 - 71Hz
10 - 64Hz
11 - 50Hz
[2]: LCD Drive Mode control
0 – Line inversion mode (default)
1 – Frame inversion mode
[1:0]: power save mode control (SR)
00 – power save mode 1
01 – power save mode 2
10 – normal mode (default)
11 – high power mode
ICSET
Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | |
---|---|---|---|---|---|---|---|---|
Value | C | 1 | 1 | 0 | 1 | # | softrst | oscmode |
Default | C | 1 | 1 | 0 | 1 | # | 0 | 0 |
芯片設置
[1]:software reset
0 – no operation (default)
1 – software reset
[0]:oscillator mode control
0 – inner oscillator (default) : OSCIN pin connected to VSS pin.
1 – outside oscillator : OSCIN pin connected to outside clock signal(32.768KHz).
BLKCTL
Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | |
---|---|---|---|---|---|---|---|---|
Value | C | 1 | 1 | 0 | 1 | # | softrst | oscmode |
Default | C | 1 | 1 | 0 | 1 | # | 0 | 0 |
閃爍控制
[1:0] blinking control
00 – blinking off
01 – 0.25 Hz
10 – 0.5Hz
11 – 1 Hz
APCTL
Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | |
---|---|---|---|---|---|---|---|---|
Value | C | 1 | 1 | 1 | 1 | 1 | Apon | Apoff |
Default | C | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
全亮全暗控制,該寄存器只有在 display on 時才起作用;
[1]:all pixel ON control
0 – normal (default)
1 – all pixel on
[0]:all pixel OFF control
0 – normal (default)
1 – all pixel off
當 apon 和 apoff 都為 1 時,則顯示全暗,即 apoff 的優先級高於 apon
5.BL55072的典型應用電路
6、實現代碼
void SEG_Init(void)
{
bsp_gpio_config(SEG_CLK_PORT,SEG_CLK_PIN,GpioWrite);
bsp_gpio_config(SEG_SDI_PORT,SEG_SDI_PIN,GpioWrite);
SEG_IIC_Start();
SEG_IIC_WriteByte(0x7C);
SEG_IIC_WriteByte(0xE8); // 退出休眠
SEG_IIC_WriteByte(0xC8); // 方式設定C8
SEG_IIC_WriteByte(0xF0); // 閃爍控制
//SEG_IIC_WriteByte(0xE0); // 器件選擇
SEG_IIC_WriteByte(0x00); // 數據指針
for(int i=0;i<18;i++)
{
SEG_IIC_WriteByte(0x00);//
}
SEG_IIC_Stop();
}
void SEG_Clear(void)
{
bsp_gpio_config(SEG_CLK_PORT,SEG_CLK_PIN,GpioWrite);
bsp_gpio_config(SEG_SDI_PORT,SEG_SDI_PIN,GpioWrite);
SEG_IIC_Start();
SEG_IIC_WriteByte(0x7C);
SEG_IIC_WriteByte(0xE8); // 退出休眠
SEG_IIC_WriteByte(0xC8); // 方式設定C8
SEG_IIC_WriteByte(0xF0); // 閃爍控制
//SEG_IIC_WriteByte(0xE0); // 器件選擇
SEG_IIC_WriteByte(0x00); // 數據指針
for(int i=0;i<18;i++)
{
SEG_IIC_WriteByte(0x00);//
}
SEG_IIC_Stop();
}
// 7C FF C8 EA B6 E8
void SEG_WriteBuffer(char * buffer)
{
SEG_IIC_Start();
SEG_IIC_WriteByte(0x7C);
SEG_IIC_WriteByte(0xE8); // 退出休眠
SEG_IIC_WriteByte(0xC8); // 方式設定C8
SEG_IIC_WriteByte(0xF0); // 閃爍控制
//SEG_IIC_WriteByte(0xE0); // 器件選擇
SEG_IIC_WriteByte(0x00); // 數據指針
for(int i=0;i<18;i++)
{
SEG_IIC_WriteByte(buffer[i]);//
}
SEG_IIC_Stop();
}