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;

CCF 202009-3 点亮数字人生(拓扑排序)

题目背景 土豪大学的计算机系开了一门数字逻辑电路课&#xff0c;第一个实验叫做“点亮数字人生”&#xff0c;要用最基础的逻辑元件组装出实际可用的电路。时间已经是深夜了&#xff0c;尽管实验箱上密密麻麻的连线已经拆装了好几遍&#xff0c;小君同学却依旧没能让她的电路正…

【MySQL基础】MySQL基础操作三

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

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

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

python 第三方库(PyPinyin\shortuuid\json)

PyPinyin库 简介 PyPinyin库是一个支持中文转拼音输出的Python第三方库&#xff0c;它可以根据词组智能匹配最正确的拼音&#xff0c;并且支持多音字&#xff0c;简单的繁体, 注音&#xff0c;多种不同拼音/注音风格的转换。 安装 (framework-learn) C:\Users\zzg>pip …

python类对象

类提供了把数据和功能绑定在一起的方法。创建新类时创建了新的对象 类型&#xff0c;从而能够创建该类型的新 实例。实例具有能维持自身状态的属性&#xff0c;还具有能修改自身状态的方法&#xff08;由其所属的类来定义&#xff09;。 和其他编程语言相比&#xff0c;Python…

QT for Mcu的学习建议

QT for MCU&#xff08;微控制器单元&#xff09;是一个相对较新的领域&#xff0c;它允许在资源受限的微控制器上运行Qt框架&#xff0c;从而为嵌入式设备带来丰富的用户界面和跨平台的开发体验。以下是一些建议&#xff0c;可以帮助你开始学习Qt for MCU&#xff1a; 理解Qt…

从遍历上来说,list是单向的,vector是双向的。这句话对吗

从遍历的角度来说&#xff1a; 对于list来说&#xff0c;虽然它是双向链表&#xff0c;每个节点都包含指向前一个节点和后一个节点的指针&#xff0c;但在实际遍历时&#xff0c;我们通常只能沿着一个方向&#xff08;比如从头到尾或从尾到头&#xff09;进行遍历&#xff0c;因…

图像去噪--(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 …

条款09:绝不在析构和构造中调用virtual函数

1.为什么 #include<iostream> using namespace std;class Transaction//交易信息类 {Transaction();virtual void logTransaction()const 0;//交易日志 };Transaction::Transaction() {logTransaction(); }class BuyTransaction : public Transaction//买入操作 {virtu…

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…

折半搜索.

折半搜索 知识点折半搜索的原理折半搜索的过程 例题题目&#xff1a;世界冰球锦标赛题目描述输入样例输出样例提示 世界冰球锦标赛题解思路代码 知识点 折半搜索的原理 折半搜索是一种技巧&#xff0c;实际上就是将一个次搜索过程分成两次进行&#xff0c;然后将两次搜索的结果…

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

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

作业-逆序和定位

目录 字符串逆序 题目描述 输入 输出 样例 解题思路&#xff1a; 单词倒排 题目描述 输入 输出 样例 解题思路&#xff1a; 首字母大写 题目描述 输入 输出 样例 解题思路&#xff1a; 统计句子中单词个数 题目描述 输入 输出 样例 解题思路&#xff1a; 大小写字母互换 题目描…