HW_Lib/sim/oled/oled.cpp

55 lines
1.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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
}
}
}
}