LCD屏的应用

一、LCD屏应用

Linux下一切皆文件,我们的LCD屏再系统中也是一个文件,设备文件:/dev/fb0。

如果要在LCD屏显示数据,那我们就可以把数据写入LCD屏的设备文件。

1.显示颜色块

LCD屏分辨:800*480 像素 32位:说明一个像素点占4个字节,ARGB A:透明度 R:红 G:绿 B:蓝

在LCD屏上显示一种颜色,代码实现步骤:

1、打开LCD屏设备文件

2、准备颜色数据

3、写入数据

4、关闭文件

练习1:再LCD屏显示一种颜色

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>#include <stdio.h>int main() {//打开LCD屏int lcd_fd = open("/dev/fb0", O_RDWR);if (lcd_fd == -1) {perror("open lcd failed!\n");return -1;}//写颜色数据到fb0int red = 0x00ff0000;int green = 0x0000ff00;int n;for(n=0; n<800*480; n++){write(lcd_fd, &red, 4);}//关闭文件close(lcd_fd);return 0;}

练习2:显示俄国的国旗(横屏显示)

练习3:显示法国的国旗(竖屏显示)

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>int main(void)
{int fd_lcd;int lcd_buf[800*480]; //显存。int -- 4Bint j,i;fd_lcd = open("/dev/fb0", O_WRONLY);if(fd_lcd == -1){perror("open lcd");return -1;}printf("fd_lcd = %d\n", fd_lcd);for(j=0;j<480;j++)//蓝296,白240,红264{for(i=0;i<296;i++)	lcd_buf[j*800+i]=0x000000FF;for(i=296;i<536;i++)  lcd_buf[j*800+i]=0x00FFFFFF;for(i=536;i<800;i++) lcd_buf[j*800+i]=0x00FF0000;}write(fd_lcd,lcd_buf,sizeof(lcd_buf));close(fd_lcd);return 0;
}

思考:如何显示圆球

3、显示圆球

圆的方程式:(x-x0)*(x-x0) + (y-y0)*(y-y0) = r*r

其中(x0,y0)是圆心坐标,r是半径

x0=400,y0=240,r=100

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>int main() {//打开LCD屏int lcd_fd = open("/dev/fb0", O_RDWR);if (lcd_fd == -1) {perror("open lcd failed!\n");return -1;}//写颜色数据到fb0int red = 0x00ff0000;int green = 0x0000ff00;int blue = 0x000000ff;int x,y;int x0 = 400,y0 = 240,r = 100;for(y=0; y<480; y++){for(x=0; x<800; x++){if((x-x0)*(x-x0) + (y-y0)*(y-y0) <= r*r){write(lcd_fd, &blue, 4);}else{write(lcd_fd, &red, 4);}}}//关闭文件close(lcd_fd);return 0;}

练习4:再LCD屏显示一个圆球

练习5:在LCD屏显示一个彩虹

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <error.h>
#include <unistd.h>
#include <sys/mman.h>int lcd_fd = -1;     //帧缓冲文件描述符
int * plcd = NULL;//帧缓冲设备//屏幕初始化
void CH_init()
{
int fd = open("/dev/fb0",O_RDWR);
if(fd==-1)
{
perror("open pingmv shibai");
}
lcd_fd = fd;
plcd = mmap(NULL,800*480*4,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);//映射到屏幕
}//画点函数
void huadian(int x0, int y0, int color)
{
if (x0 >= 0 && x0 < 480&&y0 >= 0 && y0 < 800  ){*(plcd + x0 * 800 + y0) = color;}
}//白屏
void chushihua()
{int color = 0xffffffff;for(int i = 0;i<480;i++){for(int j = 0;j<800;j++){huadian(i,j,color);}}
}//画圆函数
void huayuan()
{
int color[800*480]={0};
for(int i=0;i<480;i++)
{
for(int j=0;j<800;j++){if((i-480)*(i-480)+(j-400)*(j-400)>122500 && (i-480)*(i-480)+(j-400)*(j-400)<160000) {huadian(i,j,0x0F0FFaa0);}if((i-480)*(i-480)+(j-400)*(j-400)>90000 && (i-480)*(i-480)+(j-400)*(j-400)<122500) {huadian(i,j,0x0F0F0F00);}if((i-480)*(i-480)+(j-400)*(j-400)>62500 && (i-480)*(i-480)+(j-400)*(j-400)<90000) {huadian(i,j,0x0F0FFFF0);}}
}
}//关闭屏幕
void guanbi_init()
{
munmap(plcd,800*480*4);
plcd = NULL;
close(lcd_fd);
}int main()
{
CH_init();
chushihua();
huayuan();
guanbi_init();
}

练习6:在LCD屏显示一个太极图

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include <sys/mman.h>
#include<unistd.h>
#include<math.h> 
int *plcd = NULL;
#define WHITE 0x00FFFFFF 
#define BLAK 0x00000000 
void draw_point(int x, int y, int color)
{if (x >= 0 && x<800 && y >= 0 && y<480){*(plcd + y * 800 + x) = color;}
}void draw_circle(int x, int y,double r ,int color)
{if (x >= 0 && x<480 && y >= 0 && y<800){for (double i = 0; i < 480; i++){for (double j = 0; j < 800; j++){double all=(i-x)*(i-x)+(j-y)*(j-y);double fc=sqrt(all);if(r>fc){draw_point(j, i, color);//	printf("fc=%lf\n",fc);}}}}
}void draw_circle_b(int x, int y,double r ,int color)
{if (x >= 0 && x<480 && y >= 0 && y<800){for (double i = 0; i < 480; i++){for (double j = 0; j < 800; j++){if(i<x){double all=(i-x)*(i-x)+(j-y)*(j-y);double fc=sqrt(all);if(r>fc){draw_point(j, i, color);//	printf("fc=%lf\n",fc);}					}}}}
}void clear(int color)
{int x,y;for(y=0;y<480;y++){for(x=0;x<800;x++){draw_point(x,y,color);}}
}int main()
{int lcd_fd = open("/dev/fb0",O_RDWR);if (lcd_fd == -1){perror("open lcd fail");}plcd = mmap(NULL, 800 * 480 * 4, PROT_READ | PROT_WRITE, MAP_SHARED,lcd_fd,0);if (plcd==NULL){perror("mmao  fail");}int color = 0x0000FFFF;clear(0x00666666);draw_circle(240, 400,200, BLAK);draw_circle_b(240, 400,200, WHITE);draw_circle(240, 300,100, WHITE); draw_circle(240, 500,100, BLAK); draw_circle(240, 300,25, BLAK); draw_circle(240, 500,25, WHITE); //	draw_circle(240, 400,50, color);  close(lcd_fd);munmap(plcd,800*480*4);return 0;
}

回去准备图片

bmp格式,分辨率800*480,24位,1.09M

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2869108.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

创新指南|制药行业如何拥抱生成式AI在新药发现与开发中突破获益

生成式AI在药物发现中的应用可加速药物研发过程&#xff0c;并可能降低成本。通过利用GenAI&#xff0c;制药公司能在早期药物发现和开发中实现更快的成果&#xff0c;这包括从目标识别、验证&#xff0c;到优化的多个环节。 AI有潜力在药物筛选和优先排序、目标识别及验证、药…

书客护眼落地灯销量火爆,售罄、补货、又断货、再补货!又成断货王!

今日&#xff0c;备受关注的书客Sun护眼大路灯在市场上掀起了一股抢购热潮&#xff0c;作为近年来照明领域中最大的黑马品牌&#xff0c;始终坚持并最求技术创新的书客品牌&#xff0c;在近日发布全新系列落地护眼台灯后&#xff0c;不仅备受消费者青睐&#xff0c;更是成为了新…

spacy进行简单的自然语言处理的学习

自然语言处理基本概念 概念&#xff1a;自然语言处理&#xff0c;是让机器理解人的语言的过程。 作用&#xff1a;通过使用自然语言处理&#xff0c;机器可以理解人的语言&#xff0c;从而进行语义分析&#xff0c;例如&#xff1a;从一句话中判断喜怒哀乐&#xff1b;从一段文…

MongoDB——linux中yum命令安装及配置

一、创建mongodb-org-3.4.repo文件 vi /etc/yum.repos.d/mongodb-org-3.4.repo 将下面内容添加到创建的文件中 [mongodb-org-3.4] nameMongoDB Repository baseurlhttps://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/3.4/x86_64/ gpgcheck1 enabled1 gpgkeyhttps://www…

【Docker篇】自定义Dockerfile的操作

文章目录 &#x1f354;镜像结构&#x1f6f8;什么是Dockerfile⭐基于Ubuntu镜像构建一个新镜像&#xff0c;运行一个java项目&#x1f50e;使用 java:8-alpine &#x1f354;镜像结构 镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。 我们以MySQL为例&am…

【PyTorch】基础学习:在终端中打印当前虚拟环境下的Pytorch版本信息

【PyTorch】基础学习&#xff1a;在终端中打印或查看当前虚拟环境下的Pytorch版本信息 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程…

固定资产管理系统:井然有序,提升利用率,降损增值的解决之道。

固定资产管理系统是一种用于管理和跟踪组织内固定资产的软件系统。固定资产是指组织长期持有并用于生产、运营或提供服务的资产&#xff0c;例如土地、建筑物、机器设备、车辆等。 固定资产管理系统提供了一种集中管理和监控固定资产的方式&#xff0c;帮助组织更好地管理其资产…

Mock.js了解(Mock就是模拟一个后端,Postman模拟前端)

JSON5 Node.js Vue CLI与Mock.js Jquery与Mock.js Mock与分页

【SQLite数据库】的使用

SQLite数据库 文章目录 SQLite数据库0、linux基础知识补充1、SQLite简介1.1 SQLite & MySQL 的优缺点比较1.2 常见的嵌入式数据库 2、数据库的基本命令和用法2.1 创建数据库2.2 创建一张表格2.3 插入一条数据2.4 增加一列2.5 删2.6 改2.7 查看数据库 3、数据库编程3.1 实验…

使用git命令行文件路径全是数字问题

目录 第一章、问题分析1.1&#xff09;报错提示 第二章、解决方式2.1&#xff09;修改设置 友情提醒: 先看文章目录&#xff0c;大致了解文章知识点结构&#xff0c;点击文章目录可直接跳转到文章指定位置。 第一章、问题分析 1.1&#xff09;报错提示 使用git命令行提交的时…

Vue3-03_组件基础_上

单页面应用程序 什么是单页面应用程序 单页面应用程序&#xff08;英文名&#xff1a;Single Page Application&#xff09;简称 SPA&#xff0c;顾 名思义&#xff0c;指的是一个 Web 网站中只有唯一的一个 HTML 页面&#xff0c;所有的 功能与交互都在这唯一的一个页面内完…

[c++] std::future, std::promise, std::packaged_task, std::async

std::promise 进程间通信&#xff0c;std::packaged_task 任务封装&#xff0c;std::async 任务异步执行&#xff1b;std::future 获取结果。 1 std::promise 1.1 线程间同步 std::promise 可以用于线程间通信。 如下代码是 std::promise 中的示例代码。 std::promise - cp…

MySQL语法分类 DQL(3)排序查询

为了更好的学习这里给出基本表数据用于查询操作 create table student (id int, name varchar(20), age int, sex varchar(5),address varchar(100),math int,english int );insert into student (id,name,age,sex,address,math,english) values (1,马云,55,男,杭州,66,78),…

mysql颗粒归仓

B B树&#xff1a;节点排序 一个节点存多个元素 多个元素也排序了 叶子节点间有指针&#xff0c;非叶子节点上的元素在叶子节点冗余&#xff1a;叶子节点存储排好序的all元素 通过数据排序提高查询速度&#xff0c;节点存储多个元素 高度不会太高&#xff0c;一个innodb页B树…

YOLOv9算法原理——使用可编程梯度信息学习想要学习的内容

前言 2023年1月发布YOLOv8正式版后&#xff0c;经过一年多的等待&#xff0c;YOLOv9终于面世了&#xff01;YOLO是一种利用图像全局信息进行目标检测的系统。自从2015年Joseph Redmon、Ali Farhadi等人提出了第一代模型以来&#xff0c;该领域的研究者们已经对YOLO进行了多次更…

#QT(MainWindow初尝---文本编辑器)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a;使用MainWindow做一个文本编辑器 3.记录 &#xff08;1&#xff09;创建几个功能 &#xff08;2&#xff09;为几个功能写实现&#xff0c;这里不能使用转到槽&#xff0c;需要自己用connect函数关联。这里的功能是QAction类&am…

MySQL初阶2——索引的初步理解

目录 一、索引的概念和使用 1. 索引是什么 2. 索引的使用 2.1 查看索引 2.2 创建索引 2.3 删除索引 3. 索引使用的注意事项 二、索引的核心内容——底层的数据结构 1. 前景引入 2. 索引使用的数据结构 2.1 基础版—— B 树 2.2 升级版—— B 树 重点&#xff1a;如…

StarRocks面试题及答案整理,最新面试题

StarRocks 的 MV&#xff08;物化视图&#xff09;机制是如何工作的&#xff1f; StarRocks 的物化视图&#xff08;MV&#xff09;机制通过预先计算和存储数据的聚合结果或者转换结果来提高查询性能。其工作原理如下&#xff1a; 1、数据预处理&#xff1a; 在创建物化视图时…

【计算机视觉】二、图像形成——实验:2D变换编辑(Pygame)

文章目录 一、向量和矩阵的基本运算二、几何基元和变换1、几何基元(Geometric Primitives)2、几何变换(Geometric Transformations)2D变换编辑器0. 程序简介环境说明程序流程 1. 各种变换平移变换旋转变换等比缩放变换缩放变换镜像变换剪切变换 2. 按钮按钮类创建按钮 3. Pygam…

[第二章]二分与前缀和

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…