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://www.mzph.cn/news/749666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA---学生管理系统

遍历字符串 ArrayList学习&#xff1a;

【MySQL基础】MySQL基础操作三

文章目录 &#x1f349;1.联合查询&#x1f95d;笛卡尔积 &#x1f349;2.内连接&#x1f95d;查询单个数据&#x1f95d;查询多个数据 &#x1f349;3.外连接&#x1f349;4.自连接&#x1f349;5.合并查询 &#x1f349;1.联合查询 &#x1f95d;笛卡尔积 实际开发中往往数…

【软件测试】软件测试的基本概念和开发模型

1. 前言 在进行软件测试的学习之前,我们要了解软件测试一些基本概念. 这些基本概念将帮助我们更加明确工作的目标以及软件测试到底要做什么. 2. 软件测试的基本概念 软件测试的基本概念有3个,分别是需求,测试用例和BUG. 2.1 需求 这里的需求还可以分为 用户需求和软件需求,用…

图像去噪--(1)

系列文章目录 文章目录 系列文章目录前言一、图像噪声1.1 噪声定义1.2 基本特征 二、按照噪声概率分布分类1.高斯噪声2.泊松噪声 三、去噪算法3.1 线性滤波3.1.1 高斯滤波3.1.2 均值滤波 3.2 非线性滤波3.2.1 中值滤波3.2.2 双边滤波 四、深度学习总结 前言 一、图像噪声 1.1 …

Springboot全局异常处理

Springboot全局异常处理 一、不使用全局异常处理器二、全局异常处理器1.自定义常量&#xff08;返回状态码&#xff09;2.手动抛出异常3.编写全局异常处理器4.测试结果 三、全局异常处理方式二1.定义状态码常量2. 定义基础接口&#xff08;面向接口编程&#xff09;3.定义枚举类…

湖南麒麟SSH服务漏洞

针对湖南麒麟操作系统进行漏洞检测时&#xff0c;会报SSH漏洞风险提醒&#xff0c;具体如下&#xff1a; 针对这些漏洞&#xff0c;可以关闭SSH服务&#xff08;前提是应用已经部署完毕不再需要通过SSH远程访问传输文件的情况下&#xff0c;此时可以通过VNC远程登录方法&#x…

JMeter基础 — JMeter聚合报告详解

提示&#xff1a;聚合报告组件的使用和察看结果树组件的使用方式相同。本篇文章主要是详细的介绍一下聚合报告组件内容&#xff0c;不做示例演示。 1、聚合报告介绍 在使用JMeter进行性能测试时&#xff0c;聚合报告(Aggregate Report)可以说是必用的监听器。 &#xff08;1&…

Internet协议的安全性

Internet协议的安全性 文章目录 Internet协议的安全性1. 网络层1. IP*62. ARP*33. ICMP * 3 2. 传输层协议1. TCP1. * SYN-Flood攻击攻击检测* 防御 2. TCP序号攻击攻击 3. 拥塞机制攻击 2. UDP 3. 应用层协议1. DNS攻击*3防范*3: 2. FTP3. TELNET: 改用ssh4. 电子邮件1. 攻击2…

【Javascript编程实操06】1、反转数组和字符串 2、将二维数组转一维数组

前言 1、反转数组和字符串 代码&#xff1a; 实现效果&#xff1a; 2、将二维数组转一维数组 代码&#xff1a; 实现效果&#xff1a; 总结 前言 本次主要是针对Javascript阶段的字符串与数组的实操练习&#xff0c;共有2个实操&#xff0c;大家可以在实操的过程中更加深…

什么时候去检测大数据信用风险比较合适?

什么时候去检测大数据信用风险比较合适?在当今这个数据驱动的时代&#xff0c;大数据信用风险检测已经成为个人的一项重要需求。本文将从贷前检测、信息泄露检测和定期检测三个方面&#xff0c;阐述何时进行大数据信用风险检测较为合适。 一、贷前检测 大数据信用风险检测在贷…

Docker使用(二)Docker安装和常见典型操作

Docker使用(二)Docker安装和常见典型操作 二、软件安装 1、Docker安装 &#xff08;1&#xff09;环境准备 [rootlocalhost ~]# uname -r 3.10.0-327.el7.x86_64 # cat /etc/os-release &#xff08;2&#xff09;卸载旧版本 $ sudo yum remove docker \ ​ docker-cli…

145 Linux 网络编程1 ,协议,C/S B/S ,OSI 7层模型,TCP/IP 4层模型,

一 协议的概念 从应用的角度出发&#xff0c;协议可理解为“规则”&#xff0c;是数据传输和数据的解释的规则。 典型协议 传输层 常见协议有TCP/UDP协议。 应用层 常见的协议有HTTP协议&#xff0c;FTP协议。 网络层 常见协议有IP协议、ICMP协议、IGMP协议。 网络接口层 常…

springboot“涛宝”大学生二手物品交易商城

摘 要 二十一世纪我们的社会进入了信息时代&#xff0c;信息管理系统的建立&#xff0c;大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多&#xff0c;而在线管理系统刚好能满足这些需求&#xff0c;在线管理系统突破了传统管理方式的局限性。于是本文针对这一…

Kubernetes operator系列:webhook 知识学习

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 Kubernetes operator学习 系列文章&#xff0c;本节会对 kubernetes webhook 知识进行学习 本文的所有代码&#xff0c;都存储于github代码库&#xff1a;https://github.com/graham924/share-code-operator-st…

免费接口调用 招标信息自动抽取|招标信息|招标数据解析接口

一、开源项目介绍 一款多模态AI能力引擎&#xff0c;专注于提供自然语言处理&#xff08;NLP&#xff09;、情感分析、实体识别、图像识别与分类、OCR识别和语音识别等接口服务。该平台功能强大&#xff0c;支持本地化部署&#xff0c;并鼓励用户体验和开发者共同完善&#xf…

浅谈性能测试中的基准测试

在性能测试中有一种测试类型叫做基准测试。这篇文章&#xff0c;就聊聊关于基准测试的一些事儿。 1、定义 通过设计合理的测试方法&#xff0c;选用合适的测试工具和被测系统&#xff0c;实现对某个特定目标场景的某项性能指标进行定量的和可对比的测试。 2、特质 ①、可重…

软件实例,餐厅酒水寄存管理系统软件,酒水寄存登记表软件操作教程

软件实例&#xff0c;餐厅酒水寄存管理系统软件&#xff0c;酒水寄存登记表软件操作教程 一、前言 以下软件操作以 佳易王酒水寄存管理系统软件V16.0为例说明 件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、酒水寄存管理系统软件可以管理多个品类的物…

AI健身教练-引体向上-俯卧撑计数-仰卧起坐姿态估计-康复训练姿态识别-姿态矫正

在AI健身应用中&#xff0c;通过关键点检测技术可以实现对用户动作的精准捕捉和分析&#xff0c;从而进行统计计数和规范性姿态识别。 统计计数&#xff1a;比如在做瑜伽、健身操等运动时&#xff0c;系统可以通过对人体关键点&#xff08;如手部、脚部、关节等&#xff09;的…

复习 --- windows 上安装 git,使用相关命令

文章目录 很少使用windows的git工具&#xff0c;这次借助这个任务&#xff0c;记录下使用过程&#xff0c;其他的等有空在整理。 其中&#xff0c;还使用了浏览器的AI小助手&#xff0c;复习了git相关的命令&#xff1a;图片放最后

ROS——集成开发环境搭建

1.4 ROS集成开发环境搭建 和大多数开发环境一样&#xff0c;理论上&#xff0c;在 ROS 中&#xff0c;只需要记事本就可以编写基本的 ROS 程序&#xff0c;但是工欲善其事必先利其器&#xff0c;为了提高开发效率&#xff0c;可以先安装集成开发工具和使用方便的工具:终端、ID…