SPI-12864液晶簡介
控制器項目因為用于低端流水線上根资,市面上的同款產(chǎn)品用到的也是小型液晶顯示屏架专,經(jīng)查后選用的是TX_12864液晶模塊,該模塊的參數(shù)列表如下:
手冊的鏈接如下TX12864-T2手冊:
- 低功耗:5 - 100mW(不帶背光5mW,帶背光不大于100mW);
- 128*64 點陣單色圖片;
- 可選用1616 點陣或其他點陣的圖片來自編漢字嫂冻,按照1616 點陣漢字來計算可顯示8字/行4 行胶征。按照1212 點陣漢字來計算可顯示10 字/行*4 行。
- 指令功能強:可組合成各種輸入桨仿、顯示睛低、移位方式以滿足不同的要求;
- 接口簡單方便:可采用4 線SPI 串行接口。
序號 | 引腳名稱 | 功能 |
---|---|---|
1 | ROM_IN | 字庫芯片用 |
2 | ROM_OUT | 字庫芯片用 |
3 | ROM_SCK | 字庫芯片用 |
4 | ROM_CS | 字庫芯片用 |
5 | LEDA0 | |
6 | VSS | GND |
7 | VDD | 3.3V |
8 | SCK | SPI |
9 | SDA | SPI |
10 | RS | 數(shù)據(jù)/指令 |
11 | RESET | 復(fù)位 |
12 | CS | CS |
TX_12864內(nèi)部集成了一個UC1701X的芯片,此芯片功耗低钱雷,可以通過SPI進行通信骂铁。可顯示8字4行的漢字(16*16)罩抗。
引腳的定義如下:
序號 | 引腳名稱 | 功能 |
---|---|---|
1 | ROM_IN | 字庫芯片用 |
2 | ROM_OUT | 字庫芯片用 |
3 | ROM_SCK | 字庫芯片用 |
4 | ROM_CS | 字庫芯片用 |
5 | LEDA0 | |
6 | VSS | GND |
7 | VDD | 3.3V |
8 | SCK | SPI |
9 | SDA | SPI |
10 | RS | 數(shù)據(jù)/指令 |
11 | RESET | 復(fù)位 |
12 | CS | CS |
字庫芯片價格約在1.2元拉庵,JLC價格在1.77元,產(chǎn)品的型號為16S1Y套蒂,由高通生產(chǎn)钞支,數(shù)據(jù)手冊的鏈接如下:
16S1Y數(shù)據(jù)手冊
UC1701X通信的時序如下:
1X.png
STM32的SPI相關(guān)庫函數(shù)
初始化配置
uint16_t SPI_BaudRatePrescaler //波特率分頻,SPI模塊的最大速度為36M,SPI_BaudRatePrescaler_4操刀,液晶的SPI支持60ns烁挟,也就是16M,我們設(shè)置為9M
uint16_t SPI_CPHA //SPI_CPHA_2Edge
uint16_t SPI_CPOL //待機為高電平SPI_CPOL_High
uint16_t SPI_CRCPolynomial //默認(rèn)為7骨坑,我們不用撼嗓,可以不設(shè)置
uint16_t SPI_DataSize //數(shù)據(jù)大小,我們這里選8位SPI_DataSize_8b
uint16_t SPI_Direction //方向一共有四種模式欢唾,我們這里用到了SPI_Direction_2Lines_FullDuplex且警,也就是全雙工通信的模式
uint16_t SPI_FirstBit //液晶為高位在前SPI_FirstBit_MSB
uint16_t SPI_Mode //兩種模式,主機和從機礁遣,我們這里選SPI_Mode_Master
uint16_t SPI_NSS //不使用SPI_NSS_Soft
這樣斑芜,我們的初始化函數(shù)如下:
void LCD_GPIOInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ,ENABLE);
//SCK
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//SDA
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//普通輸出CS
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void SPI1_Init(void)
{
SPI_InitTypeDef SPI_InitStucture;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);
SPI_InitStucture.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_4;
SPI_InitStucture.SPI_CPHA=SPI_CPHA_2Edge;
SPI_InitStucture.SPI_CPOL=SPI_CPOL_High;
SPI_InitStucture.SPI_CRCPolynomial=7;
SPI_InitStucture.SPI_DataSize=SPI_DataSize_8b;
SPI_InitStucture.SPI_Direction=SPI_Direction_2Lines_FullDuplex;
SPI_InitStucture.SPI_FirstBit=SPI_FirstBit_MSB;
SPI_InitStucture.SPI_Mode=SPI_Mode_Master;
SPI_InitStucture.SPI_NSS=SPI_NSS_Soft;
SPI_Init(SPI1,&SPI_InitStucture);
SPI_Cmd(SPI1,ENABLE);
}
這樣,發(fā)送命令和數(shù)據(jù)的函數(shù)如下祟霍,我們按照手冊的內(nèi)容進行初始化配置后押搪,液晶開始顯示
void TransCommand(uint8_t command)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_3);
SPI_I2S_SendData(SPI1,command);
while(!SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE));
}
void TransData(uint8_t data)
{
GPIO_SetBits(GPIOA,GPIO_Pin_3);
SPI_I2S_SendData(SPI1,data);
while(!SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE));
}
void LCD_Reset(void)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_4);
TransCommand(RESET);
TransCommand(PWR1);
TransCommand(PWR2);
TransCommand(PWR3);
TransCommand(0X23);//調(diào)節(jié)對比度,可選0x20~0x27
TransCommand(0X81);//調(diào)節(jié)對比度
TransCommand(0x28);//可選0x00~0x3f
TransCommand(SETBIAS);//常規(guī)操作模式
TransCommand(LINEMODE);
TransCommand(ROWMODE);
TransCommand(SETBIAS);
TransCommand(FIRSTLINE); //第一行開始顯示
TransCommand(LCDON); //開啟顯示
GPIO_SetBits(GPIOA,GPIO_Pin_4);
}