0.简介
本文利用嵌入式开发板完成LCD屏上,c语言控制绘制爱心图,附代码。
编程思路可以看代码注释。
初学framebuffer。
1.代码
#include <stdio.h>
#include <math.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#define SCREEN_WIDTH 1280
#define SCREEN_HEIGHT 800
void draw_heart(int buf[SCREEN_HEIGHT][SCREEN_WIDTH]) {
int i, j;
double t;
double x, y;
int centerX = SCREEN_HEIGHT / 2;
int centerY = SCREEN_WIDTH / 2;
int scale = 20; // 缩放因子,控制爱心的大小
for (t = 0; t < 2 * M_PI; t += 0.001) {
x = 16 * pow(sin(t), 3);
y = 13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t);
i = (int)(centerX - y * scale);
j = (int)(centerY - x * scale); // 屏幕坐标系Y轴方向向下,所以用减号
if (i >= 0 && i < SCREEN_HEIGHT && j >= 0 && j < SCREEN_WIDTH) {
buf[i][j] = 0xff0000; // 红色
}
}
}
int main() {
int buf[SCREEN_HEIGHT][SCREEN_WIDTH];
int file;
// 打开 framebuffer 设备文件
file = open("/dev/fb0", O_RDWR);
if (-1 == file) {
perror("open error");
return -1;
}
// 将屏幕清空
for (int i = 0; i < SCREEN_HEIGHT; i++) {
for (int j = 0; j < SCREEN_WIDTH; j++) {
buf[i][j] = 0xffffff; // 白色
}
}
// 绘制爱心
draw_heart(buf);
// 将颜色输入到屏幕
for (int i = 0; i < SCREEN_HEIGHT; i++) {
for (int j = 0; j < SCREEN_WIDTH; j++) {
write(file, &buf[i][j], 4);
}
}
// 关闭文件
close(file);
return 0;
}
2.在linux中编译原.c文件
export CC=“arm-poky-linux-gnueabi-gcc -march=armv7-a -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a9 --sysroot=$SDKTARGETSYSROOT”
- 在编译时使用 -lm 选项来链接数学库。
3.传入开发板