keil5 STM32 编程 在LCD点阵屏上画线

老小孩
原创
发布时间: 2025-07-11 18:21:27 | 阅读数 0收藏数 0评论数 0
封面
如果你用LCD点阵屏搞DIY,会经常碰到要编写菜单的情况,编写菜单就避免不了在屏幕上画线,今天我们就搞一下在点阵屏上画线:横线,竖线,斜线。

准备工作:

材料:

我用到的硬件:

单片机:STMF103C8T6

点阵屏:SGD GY2416C9 显示线片是UC1611S

1

画横线

先说一下UC1611S,买来后跟买家要的屏幕初始化代码,直接用的。也懒的去看数据手册了,它默认设置的是竖向写8位数据,低位在上,高位在下。

画横线的原理就是用一个for循环连续写数据,页面坐标不变,列坐标自动加1,一次写一个像素点。

代码如下:

for(i=0;i<length;i++)

{

send_dat(dat);

}

2

画竖线

画竖线的原理--因为页坐标是一页代表8行,所以先把页坐标转换成具体的坐标,然后从第一个像素点所在的页开始先写一次数据,然后用for循环是写,8位数据后更新一次页坐标:

if(x%8)

Lcd_Address(x/8,y), send_dat(0xFF << x%8), x=x+8;


length = (length - x%8);


if(length/8)

{

for(i=0;i<length/8;i++)

{

Lcd_Address(x/8+i,y);

send_dat(0xFF);


}

}

if(length%8)

Lcd_Address(x/8+i,y), send_dat(0x01 << length%8);

3

画斜线

画斜线用的是Bresenham算法,其实这个也可以画水平横线和垂直直线。它是根据x的变化值和y的变化值做比较,大者为主线(就是每次它都递增,另一坐标或递增或不递增来填补斜度,两者的变化值一样是就是45度角,这种情况下,两个坐标都递增。其中一个坐标一样是就是水平或垂直线)。用循环递增描点。每次画一个点,最后形成线条。代码:

void Draw_line(u8 x0, u8 y0, u8 x1, u8 y1)

{

int dx = abs(x1-x0), sx = x0<x1 ? 1 : -1;

int dy = abs(y1-y0), sy = y0<y1 ? 1 : -1;

int err = dx-dy, e2;

do{

disp_point(x0,y0);

//if (x0==x1 && y0==y1) break;

e2 = 2*err; //e2 = 2dx - 2dy

if (e2 >= -dy) { err -= dy; x0 += sx; }

if (e2 <= dx) { err += dx; y0 += sy; }

}while(!(x0==x1 && y0==y1));


}

4

示例

画了一个立方体和一个三角形。附件是工程文件。

RAR
画线32程序.rar
4.66MB
阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载