UP 准备加入彩屏支持
This commit is contained in:
66
sim/display/sim_display.cpp
Normal file
66
sim/display/sim_display.cpp
Normal file
@@ -0,0 +1,66 @@
|
||||
#include "sim_display.h"
|
||||
#include "graphics.h"
|
||||
#include <conio.h>
|
||||
|
||||
|
||||
static uint32_t pixelColor, backgroundColor;
|
||||
static int scaleFactor, w, h;
|
||||
uint8_t border;
|
||||
|
||||
#define GET_BIT(x, bit) ((x & (1 << bit)) >> bit)
|
||||
|
||||
void SIM_Display_INIT(int width, int height, uint32_t pixcolor, uint32_t backcolor, int scale, uint8_t b) {
|
||||
w = width * scale;
|
||||
h = height * scale;
|
||||
pixelColor = pixcolor;
|
||||
backgroundColor = backcolor;
|
||||
scaleFactor = scale;
|
||||
border = b;
|
||||
}
|
||||
|
||||
void SIM_Display_START() {
|
||||
initgraph(w, h);
|
||||
setbkcolor(backgroundColor);
|
||||
setfillcolor(pixelColor);
|
||||
cleardevice();
|
||||
}
|
||||
|
||||
void SIM_Display_STOP() {
|
||||
closegraph();
|
||||
}
|
||||
|
||||
void drawPixel(int oledX, int oledY) {
|
||||
int startX = oledX * scaleFactor;
|
||||
int startY = oledY * scaleFactor;
|
||||
if (border) fillrectangle(startX + 1, startY + 1, startX + scaleFactor - 1, startY + scaleFactor - 1);
|
||||
else solidrectangle(startX, startY, startX + scaleFactor, startY + scaleFactor);
|
||||
}
|
||||
|
||||
|
||||
void SIM_OneColor_DrawFromBuffer(uint8_t *buf, uint16_t width, uint16_t height) {
|
||||
BeginBatchDraw();
|
||||
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)drawPixel(x, y * 8 + i);
|
||||
}
|
||||
}
|
||||
}
|
||||
EndBatchDraw();
|
||||
}
|
||||
|
||||
void SIM_Color_DrawFromBuffer(uint32_t *buf, uint16_t width, uint16_t height){
|
||||
BeginBatchDraw();
|
||||
cleardevice();
|
||||
for (int y = 0; y < height; y++) {
|
||||
for (int x = 0; x < width; x++) {
|
||||
setfillcolor(*buf);
|
||||
drawPixel(x, y);
|
||||
buf++;
|
||||
}
|
||||
}
|
||||
EndBatchDraw();
|
||||
}
|
84
sim/display/sim_display.h
Normal file
84
sim/display/sim_display.h
Normal file
@@ -0,0 +1,84 @@
|
||||
//
|
||||
// Created by lydxh on 24-7-5.
|
||||
//
|
||||
|
||||
#ifndef HW_LIB_SIM_DISPLAY_H
|
||||
#define HW_LIB_SIM_DISPLAY_H
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "stdint.h"
|
||||
|
||||
/**
|
||||
* @brief 定义颜色常量值,用于模拟显示
|
||||
*/
|
||||
#define BLACK 0 // 黑色
|
||||
#define BLUE 0xAA0000 // 蓝色
|
||||
#define GREEN 0x00AA00 // 绿色
|
||||
#define CYAN 0xAAAA00 // 青色
|
||||
#define RED 0x0000AA // 红色
|
||||
#define MAGENTA 0xAA00AA // 品红
|
||||
#define BROWN 0x0055AA // 棕色
|
||||
#define LIGHTGRAY 0xAAAAAA // 亮灰色
|
||||
#define DARKGRAY 0x555555 // 暗灰色
|
||||
#define LIGHTBLUE 0xFF5555 // 亮蓝色
|
||||
#define LIGHTGREEN 0x55FF55 // 亮绿色
|
||||
#define LIGHTCYAN 0xFFFF55 // 亮青色
|
||||
#define LIGHTRED 0x5555FF // 亮红色
|
||||
#define LIGHTMAGENTA 0xFF55FF // 亮品红
|
||||
#define YELLOW 0x55FFFF // 黄色
|
||||
#define WHITE 0xFFFFFF // 白色
|
||||
|
||||
|
||||
/**
|
||||
* @brief 初始化模拟 显示
|
||||
* @param width: [输入] 显示宽度
|
||||
* @param height: [输入] 显示高度
|
||||
* @param pixcolor: [输入] 像素颜色
|
||||
* @param backcolor: [输入] 背景颜色
|
||||
* @param scale: [输入] 显示缩放比例
|
||||
* @param border: [输入] 是否显示边框
|
||||
* @return void
|
||||
* @example SIM_Display_INIT(128, 64, 0xFFFF00, 0x000000, 10, 1);
|
||||
**/
|
||||
void SIM_Display_INIT(int width, int height, uint32_t pixcolor, uint32_t backcolor, int scale, uint8_t border);
|
||||
|
||||
/**
|
||||
* @brief 开始模拟 显示
|
||||
* @return void
|
||||
* @example SIM_Display_START();
|
||||
**/
|
||||
void SIM_Display_START();
|
||||
|
||||
/**
|
||||
* @brief 停止模拟 显示
|
||||
* @return void
|
||||
* @example SIM_OLED_STOP();
|
||||
**/
|
||||
void SIM_Display_STOP();
|
||||
|
||||
/**
|
||||
* @brief 从缓冲区绘制到单色显示
|
||||
* @param buf: [输入] 缓冲区指针
|
||||
* @param width: [输入] 图像宽度
|
||||
* @param height: [输入] 图像高度
|
||||
* @return void
|
||||
* @example SIM_OneColor_DrawFromBuffer(buffer, 128, 64);
|
||||
**/
|
||||
void SIM_OneColor_DrawFromBuffer(uint8_t *buf, uint16_t width, uint16_t height);
|
||||
|
||||
/**
|
||||
* @brief 从缓冲区绘制到显示
|
||||
* @param buf: [输入] 缓冲区指针
|
||||
* @param width: [输入] 图像宽度
|
||||
* @param height: [输入] 图像高度
|
||||
* @return void
|
||||
* @example SIM_Color_DrawFromBuffer(buffer, 480, 320);
|
||||
**/
|
||||
void SIM_Color_DrawFromBuffer(uint32_t *buf, uint16_t width, uint16_t height);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif //HW_LIB_SIM_DISPLAY_H
|
Reference in New Issue
Block a user