📄 so12864._c
字号:
#include "so12864.h"
/*************************************************/
//Init LCD
/*************************************************/
void Init_LCD(void)
{
LCD_RST_TRIS = 0;
LCD_CS_TRIS = 0; // Make the Chip Select pin an output
LCD_AO_TRIS = 0;
LCD_SCK_TRIS = 0;
LCD_SDO_TRIS = 0;
LCD_SDI_TRIS = 1;
/* 一定要先重启LCD,再设置SPI,否则通讯不成功 */
LCD_CS_IO = 0; //select 12864
LCD_RST_IO = 0; //reset
nop();
nop();
nop();
LCD_RST_IO = 1;
//set spi2 control bits
LCD_SPISTATbits.SPIEN = 0;
LCD_SPISTAT = 0x0000;
LCD_SPICON = 0x003F; //必须把通讯速率设置的快一点,不然写列的时候列的低位字节会被当作数据
LCD_SPISTATbits.SPIEN = 1;
//write command
Write_LCDCOM(DISPLAY_ON); //ON DISPLAY
Write_LCDCOM(START_LINE_0); //STAR DISPLAY
Write_LCDCOM(ADC_NORMAL); //ADC NORMAL
Write_LCDCOM(DISPLAY_NORMAL); //Display normal
Write_LCDCOM(ALL_POINT_NORMAL); //CLEAR
Write_LCDCOM(BIAS_1_9); //1/9BIAS
Write_LCDCOM(OUTPUT_MPDE_REVERSE); //COMMON OUTPUT DIRECTION
Write_LCDCOM(POWER); //POWER CONTROL
Write_LCDCOM(RESISTOR_RATION); //RESISTER RATIO
Write_LCDCOM(HIBYTE(ELECTRONIC_VOLUME));//VOLUM MODE SET
Write_LCDCOM(LOBYTE(ELECTRONIC_VOLUME));
Clear_LCD();
}
/*************************************************/
//Write command
/*************************************************/
void Write_LCDCOM(BYTE command)
{
LCD_AO_IO = 0;
LCD_CS_IO = 0;
LCD_SPIBUF = 0xFF & command;
while(LCD_SPISTATbits.SPITBF);
}
/*************************************************/
//Write data
/*************************************************/
void Write_LCDDATA(BYTE data)
{
LCD_AO_IO = 1;
LCD_CS_IO = 0;
LCD_SPIBUF = 0xFF & data;
while(LCD_SPISTATbits.SPITBF);
}
/*************************************************/
//Clear LCD
/*************************************************/
void Clear_LCD()
{
unsigned char seg;
unsigned char page;
for(page = PAGE_0; page < PAGE_8; page++) //写页地址共8 页0xb0----0xb8
{
Write_LCDCOM(page);
Write_LCDCOM(0x10); //列地址,高低字节两次写入,从第0列开始
Write_LCDCOM(0x00);
for(seg = 0; seg < 128; seg++) //写128列
{
Write_LCDDATA(0x00);
}
}
}
/*************************************************/
//Display English words
/*************************************************/
void DispEN_LCD(BYTE page, WORD column, BYTE *ptr)
{
unsigned char seg;
Write_LCDCOM(page);
Write_LCDCOM(HIBYTE(column)); //列地址,高低字节两次写入
Write_LCDCOM(LOBYTE(column));
for(seg = 0; seg < 8; seg++) //写8列
{
Write_LCDDATA((BYTE)(*ptr++));
}
}
/*************************************************/
//Display Chinese words
/*************************************************/
void DispCN_LCD(BYTE page, WORD column, BYTE *ptr)
{
unsigned char seg;
unsigned char offset;
for(offset = 0; offset < 2; offset++)
{
Write_LCDCOM((BYTE)(page + offset));
Write_LCDCOM(HIBYTE(column)); //列地址,高低字节两次写入
Write_LCDCOM(LOBYTE(column));
for(seg = 0; seg < 16; seg++) //写16列
{
Write_LCDDATA((BYTE)(*ptr++));
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -