#include "sim_oled.h" #include "graphics.h" #include static uint32_t pixelColor, backgroundColor; static int scaleFactor; static bool border; void SIM_OLED_INIT(uint32_t pixcolor, uint32_t backcolor, int scale, bool b) { pixelColor = pixcolor; backgroundColor = backcolor; scaleFactor = scale; border = b; } void SIM_OLED_START() { initgraph(WIDTH, HEIGHT); setbkcolor(backgroundColor); // 设置背景色为黑色 setfillcolor(pixelColor); cleardevice(); // 清空屏幕 } void SIM_OLED_STOP() { getch(); closegraph(); } void drawOledPixel(int oledX, int oledY, int blockSize) { int startX = oledX * blockSize; int startY = oledY * blockSize; if (border) fillrectangle(startX, startY, startX + blockSize, startY + blockSize); if (!border) solidrectangle(startX, startY, startX + blockSize, startY + blockSize); } #define GET_BIT(x, bit) ((x & (1 << bit)) >> bit) void SIM_OLED_DrawFromBuffer(uint8_t *buf, uint8_t width, uint8_t height) { cleardevice(); for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { uint8_t byteData = buf[y * width + x]; for (int i = 0; i < 8; i++) { uint8_t bit = GET_BIT(byteData, i); if (bit) drawOledPixel(x, y * 8 + (i), scaleFactor); // 这里假设 OLED 像素点大小为一个bit,对应的 EasyX 像素块大小为 10x10 } } } }