wenbo2005.online

学习记录 / STM32

OLED 绘制直线代码

STM322025-03-09
/**
 * @brief 在 OLED 上绘制两点之间的直线
 * @param x0: 起点 x 坐标
 * @param y0: 起点 y 坐标
 * @param x1: 终点 x 坐标
 * @param y1: 终点 y 坐标
 * @注意范围(0~127)(0~64)
 */
void OLED_DrawLine(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1)
{
    int dx = abs(x1 - x0);
    int dy = abs(y1 - y0);
    int sx = (x0 < x1) ? 1 : -1;
    int sy = (y0 < y1) ? 1 : -1;
    int err = dx - dy;
    int e2;

    while (1) {
        // 绘制当前点
        OLED_DrawPoint(x0, y0);

        // 如果到达终点,退出循环
        if (x0 == x1 && y0 == y1) break;

        e2 = 2 * err;
        if (e2 > -dy) {
            err -= dy;
            x0 += sx;
        }
        if (e2 < dx) {
            err += dx;
            y0 += sy;
        }
    }
}