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

📄 1305_oled.c

📁 我写的使用LPC2148模拟8080并口驱动OLED屏的程序
💻 C
字号:
/********************************************************/
/*1305_OLED.c*/
/********************************************************/
/*	模块:		1305_OLED.c																*/
/*	描述:																							*/
/*																											*/
/*  处理器:																						*/
/*  调用函数:																					*/
/*  版本历史:																						*/
/*	==================================================	*/
/*	V1.0																								*/
/*  作者:			AncentLee																	*/
/*	日期:																								*/
/*	修改原因:																						*/
/*	==================================================	*/

#include "config.H"

/*F_OLED_read_status()***********************************/  
/*  函数名:OLED_read_status()													*/  
/*  参数:	无																					*/  
/*  返回值:无																					*/  
/*  作用域:																						*/  
/*  功能:																							*/  
/********************************************************/
void OLED_read_status()
{
	uint8 status;
	do
	{
		status=parallel_read_command();
	//	printf("%bd",status);
		status=status&0x80;
	//	printf("%bd",status);
		//_getkey();
	}while(status!=0);
}
/* End of F_OOLED_read_status()**************************/


/*F_OLED_init********************************************/
/*  函数名:OLED_init()																	*/
/*  参数:	无																					*/
/*  返回值:无																					*/
/*  作用域:																						*/
/*  功能:																							*/
/********************************************************/


void	OLED_init(void)
{
	parallel_init();
	
	OLED_read_status();
	parallel_write_command(0xae);
	OLED_read_status();
	parallel_write_command(0xad); 
	OLED_read_status();
	parallel_write_command(0x8a); 
	OLED_read_status();
	parallel_write_command(0xa8);
	OLED_read_status();
	parallel_write_command(0x3f); 
	OLED_read_status();
	parallel_write_command(0xd3); 
	OLED_read_status();
	parallel_write_command(0x00); 
	OLED_read_status();
	parallel_write_command(0x40); 
	OLED_read_status();
	parallel_write_command(0xa1); 
	OLED_read_status();
	parallel_write_command(0xc8);
	OLED_read_status();
	parallel_write_command(0xa6); 
	OLED_read_status();
	parallel_write_command(0xa4); 
	OLED_read_status();
	parallel_write_command(0x81); 
	OLED_read_status();
	parallel_write_command(0x5c); 
	OLED_read_status();
	parallel_write_command(0xd5); 
	OLED_read_status();
	parallel_write_command(0x60); 
	OLED_read_status();
	parallel_write_command(0xd8); 
	OLED_read_status();
	parallel_write_command(0x00); 
	OLED_read_status();
	parallel_write_command(0xd9); 
	OLED_read_status();
	parallel_write_command(0x84); 
	OLED_read_status();
	parallel_write_command(0xaf); 
}                                                        
/* End of F_OLED_init***********************************/


/*F_OLED_clear_screen************************************/   
/*  函数名:OLED_clear_screen()													*/  
/*  参数:	无																					*/  
/*  返回值:无																					*/  
/*  作用域:																						*/  
/*  功能:																							*/  
/********************************************************/
void OLED_clear_screen()
{
	uint8 j,page;
	for(page=0;page<8;page++)
	{
		OLED_read_status();
		parallel_write_command(176+page); //set page address
		OLED_read_status();
		parallel_write_command(0x00);    //set low address
		OLED_read_status();
		parallel_write_command(0x10);    //set higher address
		OLED_read_status();
		for(j=0;j<128;j++)
		{
		    OLED_read_status();
			parallel_write_data(0x00);
		}	       
	}
}
/* End of F_OLED_clear_screen****************************/


/*F_OLED_display*****************************************/   
/*  函数名:OLED_display()													*/  
/*  参数:	无																					*/  
/*  返回值:无																					*/  
/*  作用域:																						*/  
/*  功能:																							*/  
/********************************************************/
void OLED_display_picture(uint8 picture[])
{
	uint8 j;
	uint8 page;
	for(page=0;page<8;page++)
	{
		OLED_read_status();
		parallel_write_command(176+page);//set page address
		OLED_read_status();
		parallel_write_command(0x00);//set low address
		OLED_read_status();
		parallel_write_command(0x10);//set higher address
		OLED_read_status();
		for(j=0;j<128;j++)
		{
			OLED_read_status();
			parallel_write_data(picture[j+page*128]);
		}	   
	}
}
/* End of F_OLED_display********************************/


/*F_OLED_display_char_8_8*****************************************/   
/*  函数名:OLED_display_char_8_8()													*/  
/*  参数:	无																					*/  
/*  返回值:无																					*/  
/*  作用域:																						*/  
/*  功能:在第line行第row个字符位置显示字符数组CharAry[]中第ordinal个字符*/  
/********************************************************/
void OLED_display_char_8_8(uint8 line,uint8 row,uint8 CharAry[],uint8 ordinal)
{
	uint8 i;
	
		if(row>16)//判断是否是有效值
	{
		return;
	}

	OLED_read_status();
	parallel_write_command(175+line);//set page address
	OLED_read_status();

//设置列地址指针
//算法:判断row是否是奇数位置。
//如果是奇数位置,则其列地址低位偏移量为0x00,
//如果是偶数位置,则其列地址低位偏移量为0x08,
//高位偏移量为(row-1)/2+16
	row=row-1;
	if(row%2)
	{
		parallel_write_command(0x08);//set lower address
		OLED_read_status();
	}
	else
	{
		parallel_write_command(0x00);//set lower address
		OLED_read_status();
	}
	parallel_write_command(row/2+16);//set higher address
	OLED_read_status();

//将字符数组CharAry[]中第ordinal个字符显示到刚才设定的位置
	ordinal=(ordinal-1)*8;
	for(i=0;i<8;i++)
	{
	  //parallel_write_data(0xff);
	  parallel_write_data(CharAry[i+ordinal]);
	}
	
}
/* End of F_OLED_display_char_8_8********************************/

/*F_OLED_display_char_8_16*****************************************/   
/*  函数名:OLED_display_char_8_16()													*/  
/*  参数:	无																					*/  
/*  返回值:无																					*/  
/*  作用域:																						*/  
/*  功能:在第line行第row个字符位置显示字符数组CharAry[]中第ordinal个字符*/  
/********************************************************/
void OLED_display_char_8_16(uint8 line,uint8 row,uint8 CharAry[],uint16 ordinal)
{
	uint16 i;
	line=line*2-1;

	if(row>16)//判断是否是有效值
	{
		return;
	}
	
//显示字符的上半部分
//算法:同OLED_display_char_8_16()	
	OLED_read_status();
	parallel_write_command(175+line);//set page address
	OLED_read_status();

	row=row-1;
	if(row%2)
	{
		parallel_write_command(0x08);//set lower address
		OLED_read_status();
	}
	else
	{
		parallel_write_command(0x00);//set lower address
		OLED_read_status();
	}
	parallel_write_command(row/2+16);//set higher address
	OLED_read_status();

//将字符数组CharAry[]中第ordinal个字符显示到刚才设定的位置
	ordinal=(ordinal-1)*16;
	for(i=0;i<8;i++)
	{
	  //parallel_write_data(0xff);
	  parallel_write_data(CharAry[i+ordinal]);
	}
	
//显示字符的下半部分
//算法:同OLED_display_char_8_16()	
	OLED_read_status();
	parallel_write_command(176+line);//set page address
	OLED_read_status();

	if(row%2)
	{
		parallel_write_command(0x08);//set lower address
		OLED_read_status();
	}
	else
	{
		parallel_write_command(0x00);//set lower address
		OLED_read_status();
	}
	parallel_write_command(row/2+16);//set higher address
	OLED_read_status();

//将字符数组CharAry[]中第ordinal个字符显示到刚才设定的位置
	ordinal=ordinal+8;
	for(i=0;i<8;i++)
	{
	  //parallel_write_data(0xff);
	  parallel_write_data(CharAry[i+ordinal]);
	}	
}
/* End of F_OLED_display_char_8_8********************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -