嵌入式培训-在开发板上显示圆碰边回弹的动态效果

需要用到的软件:

                                                 ②

过程:

  1. 连接开发板(用①)

打开CRT软件-》快速连接-》协议选择serial,波特率115200,把右边的勾勾去掉,点击连接即可

开发板启动之后输入ctrl+c进入命令终端

    2.设置共享文件夹(用②)

点击player-》管理-》虚拟机设置-》选项-》共享文件夹-》总是启用-》添加-》下一步-》浏览-》新建一个share文件夹在桌面上,选中后-》下一步-》完成。即可

如何让命令终端进入共享文件的路径中:

cd  /mnt/hgfs/share

此时你命令终端所在的路径就是windows的桌面上的share这个文件夹里面

如何编译一个专门给板子运行的程序:

要把gcc命令换成arm-linux-gcc命令来编译才行

arm-linux-gcc  编译的.c文件  -o   生成的应用程序名字

开发板如何传输文件:

  1. 先将ubuntu的文件拖动到windows的桌面中(有共享文件夹忽略这个步骤)

2,在开发板端输入

rx 要传输的文件名字

3,点击传输-》发送X-modem,选中文件,发送过来即可

4,这个时候运行程序是没有的权限的:Permission denied,所以我们要更改文件权限

chmod 777 文件名

  1. 运行    ./程序名

打开命令终端:ctrl+alt+t

sice@T:~$

用户名@主机名:当前所在路径$

下面为部分重点过程所示:

 

 

最后是一些Linux快速命令复习:

pwd:查看路径

ls:罗列目录内容

Ls  -a  查看所有的文件(包括.开头的隐藏文件)

Ls  目录名字   查看目录内容

Cd:改变路径

Cd  文件夹的名字

Cd  ..   回到上层文件夹

Cp:复制文件

Cp  复制的文件名 复制到哪里去

Cp 复制的文件夹名 复制到哪里去  -r

Mv:移动文件

Mv  移动的文件名/文件夹名 移动到哪里去

Mv   旧名字   新名字

Rm:移除

Rm   文件名字

Rm   文件夹  -rf

Mkdir:创建目录

Mkdir  目录名字

Touch:新建文件

Touch  文件名

Clear:  ctrl+l

清屏

vi:纯键盘编辑器

Gedit:ubuntu自带的编辑器

gedit hello.c &

打开hello.c文件,存在则打开,不存在则打开后保存就会创建出来, &代表扔到后台运行

编译:

Gcc  编译的.c文件  -o   生成的应用程序名字

运行:

./应用程序名字

最后的效果演示:在我的视频中 

小球碰边回弹效果演示

谢谢大家🌹

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
嵌入式Linux下进行LCD编程,需要使用Linux内核提供的framebuffer(FB)驱动程序来操作显示屏。FB驱动程序提供了一个虚拟显存,开发人员可以通过将数据写入虚拟显存来控制显示屏。对于800*480bmp图片的显示,可以将其存储在内存中,然后将数据写入虚拟显存,在显示屏上显示。 要让图片在开发板上动态移动,可以使用双缓冲技术。使用双缓冲技术,可以在一个缓冲区中绘制图形,同时在另一个缓冲区中显示图形。当需要更新显示时,可以交换缓冲区,将绘制好的图形显示显示屏上。 下面是一个简单的示例代码,可以在800*480分辨率的LCD上显示一张图片,并让它在屏幕上水平移动: ``` #include <fcntl.h> #include <linux/fb.h> #include <sys/mman.h> #include <sys/ioctl.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char **argv) { int fbfd = 0; struct fb_var_screeninfo vinfo; struct fb_fix_screeninfo finfo; long int screensize = 0; char *fbp = 0; int x = 0, y = 0; long int location = 0; // 打开framebuffer设备 fbfd = open("/dev/fb0", O_RDWR); if (fbfd == -1) { printf("Error: cannot open framebuffer device.\n"); exit(1); } // 获取可变屏幕信息和固定屏幕信息 if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo) == -1) { printf("Error: cannot get framebuffer variable information.\n"); exit(1); } if (ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo) == -1) { printf("Error: cannot get framebuffer fixed information.\n"); exit(1); } // 计算屏幕大小(字节) screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8; // 映射framebuffer到内存 fbp = (char *) mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fbfd, 0); if ((int) fbp == -1) { printf("Error: failed to map framebuffer device to memory.\n"); exit(1); } // 读取图片数据 FILE *fp = fopen(argv[1], "rb"); if (fp == NULL) { printf("Error: cannot open BMP file.\n"); exit(1); } fseek(fp, 54, SEEK_SET); char *bmp_data = (char *) malloc(screensize); fread(bmp_data, screensize, 1, fp); fclose(fp); // 双缓冲技术 char *buffer = (char *) malloc(screensize); memcpy(buffer, fbp, screensize); // 移动图片 int dx = 1; while (1) { for (y = 0; y < vinfo.yres; y++) { for (x = 0; x < vinfo.xres; x++) { location = (x + vinfo.xoffset) * (vinfo.bits_per_pixel / 8) + (y + vinfo.yoffset) * finfo.line_length; if (location >= 0 && location < screensize) { *(buffer + location) = *(fbp + location + dx * (vinfo.bits_per_pixel / 8)); } } } memcpy(fbp, buffer, screensize); dx = dx + 1; if (dx >= vinfo.xres) { dx = 0; } } // 解除内存映射 munmap(fbp, screensize); // 关闭framebuffer设备 close(fbfd); return 0; } ``` 这段代码使用了mmap函数将framebuffer设备映射到内存中,然后读取了一张BMP图片,将图片数据写入虚拟显存。使用双缓冲技术,将虚拟显存中的数据复制到另一个缓冲区中,然后在屏幕上显示。在每个时刻,将缓冲区中的数据向右移动一个像素,然后再复制到虚拟显存中,实现了动态移动的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李居庸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值