在ssd1306.c中添加以下代码:
//
uint32_t OLED_Pow(uint32_t X, uint32_t Y)
{
uint32_t Result = 1;
while (Y--)
{
Result *= X;
}
return Result;
}
/*显示数字*/
void OLED_ShowNum(uint8_t x, uint8_t y,uint8_t Number, FontDef Font, SSD1306_COLOR color, uint8_t Length)
{
OLED_Fill( x, y, Font, Length);
ssd1306_SetCursor( x, y);
uint8_t i;
for (i = 0; i < Length; i++)
{
ssd1306_WriteChar(Number / OLED_Pow(10, Length - i - 1) % 10 + '0', Font, color);
}
ssd1306_UpdateScreen();
}
/*区域刷新*/
void OLED_Fill(uint8_t x, uint8_t y,FontDef Font, uint8_t Length)
{
/* Set memory */
uint32_t i,j;
for(i = x; i < x + Font.FontWidth*Length; i++)
{
for(j = y;j < y + Font.FontHeight*Length;j++)
SSD1306_Buffer[(x-1)*64 + y] = 0;
}
}
OLED_Pow是位数取数用的,OLED_Fill是刷新显示数字所在的区域,这样数字变更就不用刷新整个屏幕了,OLED_ShowNum则显示数字;
ssd1306.h中添加声明:
void OLED_ShowNum(uint8_t x, uint8_t y,uint8_t Number, FontDef Font, SSD1306_COLOR color, uint8_t Length);
void OLED_Fill(uint8_t x, uint8_t y,FontDef Font , uint8_t Length);
完成!
OLED_ShowNum(44, 0, temp1, Font_11x18, White,3);
在坐标(44,0)处显示字号为11*18大小,颜色为白色的3位数字temp1;