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

📄 so12864.c

📁 采用Mega128控制LCD12864液晶显示器
💻 C
字号:
#include "so12864.h"

/*************************************************/
//Init LCD
/*************************************************/
void Init_LCD(void)
{
	//Make the CS AO RST pin as output
	DDR_SPI_CTL = (1 << LCD_AO_TRIS) | (1 << LCD_RST_TRIS) | (1 << LCD_CS_TRIS);

	DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK);				//设置MOSI,SCK,SS 为OUTPUT,其它为INPUT 
	SPCR = (1<<SPE)|(1<<MSTR);						//SPI使能,主机方式,设置SCK为fosc/4,上升沿,MSB First 

	/* 一定要先重启LCD,再设置SPI,否则通讯不成功 */

	LCD_RST_IO |= BIT(LCD_RST_PIN);
	LCD_CS_IO |= BIT(LCD_CS_PIN);
	LCD_AO_IO |= BIT(LCD_AO_PIN);

	LCD_CS_IO &= ~BIT(LCD_CS_PIN);			//select 12864
	
	LCD_RST_IO &= ~BIT(LCD_RST_PIN);			//reset
	nop();
	nop();
	nop();
	LCD_RST_IO |= BIT(LCD_RST_PIN);
	
	//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 &= ~BIT(LCD_AO_PIN);
	LCD_CS_IO &= ~BIT(LCD_CS_PIN);
	SPDR = (unsigned char)command; 
	while(!(SPSR&(1<<SPIF)));		//Wait for transmission finish 
}
/*************************************************/
//Write data
/*************************************************/
void Write_LCDDATA(BYTE data)
{
	LCD_AO_IO |= BIT(LCD_AO_PIN);
	LCD_CS_IO &= ~BIT(LCD_CS_PIN);
	SPDR = (unsigned char)data; 
	while(!(SPSR&(1<<SPIF)));		//Wait for transmission finish 
}

/*************************************************/
//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 + -