📄 1305_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 + -