#include <U8g2lib.h>
#include <Wire.h>
#include <math.h>
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
#define u8 uint8_t
u8 *buffptr;
void writePixel(int x, int y)
{
int step = (int)(y / 8);
int x_offset = x + (step * 128);
int y_offset = y - (step * 8);
buffptr[x_offset] |= 0x01 << y_offset ;
}
void writepic(int x, int y, int w, int h, u8 pic[])
{
u8 i;
u8 j;
u8 d;
for (i = 0 ; i < w ; i++)
{
d = pic[i];
for (j = 0 ; j < h ; j++)
{
if (d >> j & 0x01 == 1)
{
writePixel(x + i, j + y );
}
}
}
}
void setup(void)
{
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
Serial.begin(115200);
buffptr = u8g2.getBufferPtr();
u8g2.begin();
}
const unsigned char EXETTF[][16] = {
{0xFF, 0x06, 0x04, 0x3E, 0x3F, 0x3F, 0x06, 0xFC, 0x07, 0x08, 0x08, 0x07, 0x03, 0x07, 0x08, 0x0F}, /*"H",0*/
{0xFF, 0x07, 0x07, 0x27, 0x27, 0x26, 0x24, 0xD8, 0x07, 0x08, 0x08, 0x09, 0x09, 0x09, 0x09, 0x06}, /*"E",1*/
{0xFF, 0x06, 0x04, 0xF8, 0xC0, 0x80, 0x00, 0x00, 0x07, 0x08, 0x08, 0x09, 0x09, 0x09, 0x09, 0x06}, /*"L",2*/
{0xFF, 0x06, 0x04, 0xF8, 0xC0, 0x80, 0x00, 0x00, 0x07, 0x08, 0x08, 0x09, 0x09, 0x09, 0x09, 0x06}, /*"L",3*/
{0xFE, 0x1F, 0x0F, 0xC7, 0xE7, 0xE6, 0xC4, 0x18, 0x01, 0x02, 0x04, 0x08, 0x09, 0x09, 0x08, 0x06}, /*"O",4*/
};
const unsigned char ExEttf24[][24] = {
{0xFF, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x1F, 0x1E, 0x98, 0x98, 0xF0, 0x00, 0xFF, 0x0F, 0x0F, 0x07, 0x31, 0x3D, 0x3C, 0x3E, 0x31, 0x31, 0xE0, 0x00},
{0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00}, /*"Z",0*/
};
void OLED_ShowChar(u8 x, u8 y, u8 chr, u8 size1, uint8_t offset)
{
u8 i, m, temp, size2, chr1;
u8 x0 = x, y0 = y ;
if (size1 == 8)
size2 = 6;
else
size2 = (size1 / 8 + ((size1 % 8) ? 1 : 0)) * (size1 / 2); // �õ�����һ���ַ���Ӧ������ռ���ֽ���
chr1 = chr - ' '; // ����ƫ�ƺ��ֵ
for (i = 0; i < size2; i++)
{
if (size1 == 8)
{
// temp = asc2_0806[chr1][i];
} // ����0806����
else if (size1 == 12)
{
// temp = asc2_1206[chr1][i];
} // ����1206����
else if (size1 == 16)
{
temp = EXETTF[chr1][i] ;
} // ����1608����
else if (size1 == 24)
{
// temp = asc2_2412[chr1][i];
temp = ExEttf24[chr1][i] ;
} // ����2412����
else
return;
for (m = 0; m < 8 ; m++)
{
if (temp & 0x01)
{
u8g2.drawPixel(x, y);
}
temp >>= 1;
y++;
}
x++;
if ((size1 != 8) && ((x - x0) == size1 / 2))
{
x = x0;
y0 = y0 + 8;
}
y = y0;
}
}
uint8_t image_A_5_7_bits_len = 8 ;
static const unsigned char image_A_5_7_bits[] U8X8_PROGMEM = {0x00, 0x06, 0x09, 0x09, 0x09, 0x0f, 0x09, 0x09};
uint8_t pic[] = {0x7C, 0x12, 0x12, 0x7C, 0x00};
uint8_t pic2[][16] = {
{0xFF, 0x07, 0x0D, 0x19, 0x71, 0xC1, 0x81, 0xC1, 0x61, 0x31, 0x11, 0x19, 0x0D, 0x07, 0x0F, 0xFB},
{0xFF, 0xC0, 0xF0, 0x98, 0x8E, 0x83, 0x81, 0x83, 0x82, 0x86, 0x84, 0x8C, 0x98, 0xB0, 0xE0, 0xFF},
}
void animation(float * a, float * a_trg, uint8_t n)
{
if (fabs(*a - *a_trg) < 0.15)
*a = *a_trg;
if (*a != *a_trg)
*a += (*a_trg - *a) / (n / 10.0);
}
uint8_t n;
void rollpic(int x, int y, unsigned char img[])
{
uint8_t i;
uint8_t j;
// unsigned char *temp U8X8_PROGMEM ;
uint8_t *temp;
for (i = 0; i < 5; i++)
{
temp[i] = img[i] ;
for (j = 0; j < 8; j++)
{
if (temp[i] >> j & 0x01 == 1)
{
writePixel(x + i, y + j);
}
}
}
}
void loop(void)
{
// n++;
u8g2.clearBuffer();
// rollpic(10,10,image_A_5_7_bits);
// writepic(10,10 ,5,8,pic);
//
writepic(10,10,16,16,pic2);
// u8g2.drawXBMP( 0, 0, 5, 8, pic);
u8g2.sendBuffer();
}