void MyOled_ShowWord(uint8_t Line, uint8_t Column, uint8_t* buff )//16*16
{
uint8_t i;
u8* tempbuf=buff;
MyOled_SetCursor((Line - 1) * 2, (Column - 1) * 16); //设置光标位置在上半部分
for (i = 0; i < 16; i++)
{
MyOledWriteDat(*tempbuf); //显示上半部分内容
tempbuf++;
}
//printf("Line:%d,Column:%d",(Line - 1) * 2 + 1,(Column - 1) * 16);
MyOled_SetCursor((Line - 1) * 2 + 1, (Column - 1) * 16); //设置光标位置在下半部分
delay_ms(5);//经调试发现这里写入下半部分的时候不加延时,OLED会自动息屏。
for (i = 0; i < 16; i++)
{
MyOledWriteDat(*tempbuf); //显示下半部分内容
tempbuf++;
}
}
例如使用以下字库
#ifndef __OLED_FONT16_16_H
#define __OLED_FONT16_16_H
/*OLED字模库,宽16像素,高16像素*/
const uint8_t OLED_F16x16[][32]=
{
// 温(0) 度(1) : °(6)
0x10, 0x60, 0x02, 0x8C, 0x00, 0x00, 0xFE, 0x92,
0x92, 0x92, 0x92, 0x92, 0xFE, 0x00, 0x00, 0x00,
0x04, 0x04, 0x7E, 0x01, 0x40, 0x7E, 0x42, 0x42,
0x7E, 0x42, 0x7E, 0x42, 0x42, 0x7E, 0x40, 0x00,//"温",0
0x00, 0x00, 0xFC, 0x24, 0x24, 0x24, 0xFC, 0x25,
0x26, 0x24, 0xFC, 0x24, 0x24, 0x24, 0x04, 0x00,
0x40, 0x30, 0x8F, 0x80, 0x84, 0x4C, 0x55, 0x25,
0x25, 0x25, 0x55, 0x4C, 0x80, 0x80, 0x80, 0x00,//"度",1
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,//":",2
//湿(0) 度(1) :%(5)
0x10, 0x60, 0x02, 0x8C, 0x00, 0xFE, 0x92, 0x92,
0x92, 0x92, 0x92, 0x92, 0xFE, 0x00, 0x00, 0x00,
0x04, 0x04, 0x7E, 0x01, 0x44, 0x48, 0x50, 0x7F,
0x40, 0x40, 0x7F, 0x50, 0x48, 0x44, 0x40, 0x00,//"湿",0
0x00, 0x00, 0xFC, 0x24, 0x24, 0x24, 0xFC, 0x25,
0x26, 0x24, 0xFC, 0x24, 0x24, 0x24, 0x04, 0x00,
0x40, 0x30, 0x8F, 0x80, 0x84, 0x4C, 0x55, 0x25,
0x25, 0x25, 0x55, 0x4C, 0x80, 0x80, 0x80, 0x00,//"度",1
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00//":",2
};
#endif
改版
void MyOled_ShowWord(uint8_t Line, uint8_t Column, uint8_t(*buff)[32],uint8_t len)//16*16 最多一行8个字符
{
uint8_t i;
u8 (*pt)[32]=buff;
for(u8 l=0;l<len;l++)
{
u8 *pr=*pt;
MyOled_SetCursor((Line - 1) * 2, (Column - 1) * 16+ l * 16); //设置光标位置在上半部分
for (i = 0; i < 16; i++)
{
MyOledWriteDat(*pr); //显示上半部分内容
pr++;
}
//printf("Line:%d,Column:%d",(Line - 1) * 2 + 1,(Column - 1) * 16);
MyOled_SetCursor((Line - 1) * 2 + 1, (Column - 1) * 16 + l * 16 ); //设置光标位置在下半部分
delay_ms(5);//经调试发现这里写入下半部分的时候不加延时,OLED会自动息屏。
for (i = 0; i < 16; i++)
{
MyOledWriteDat(*pr); //显示下半部分内容
pr++;
}
pt++;
}
}