⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 so12864._c

📁 采用Mega128控制LCD12864液晶显示器
💻 _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 + -