55 lines
1.5 KiB
C++
55 lines
1.5 KiB
C++
#include "sim_oled.h"
|
||
#include "graphics.h"
|
||
#include <conio.h>
|
||
|
||
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
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|