首页 > 其他分享 >在lcd屏幕显示圆

在lcd屏幕显示圆

时间:2024-05-25 16:34:34浏览次数:44  
标签:include int cy lcd cx 800 屏幕显示

 * name;Circle
 * function:画圆
 * parameter;none
 * ReValue;none
 * author;小北blog
 * attention;none
 * date;2024.05.10
 * Copyright(c) 2024 huahuadebaby99@163.com All rights Reserved
 *****************************************************************/
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main()
{
    // 1.打开文件
    int lcd_fd = open("/dev/fb0", O_RDWR);
    if (lcd_fd == -1)
    {
        perror("lcd open failed!");
    }

    // 2.写入颜色

    int x, y;                          // x和y轴
    int cx = 400, cy = 240;            // 圆心坐标
    int color_buffer[800 * 480] = {0}; // 初始化缓冲区
    int i, j;
    int r = 200; // 半径
    for (i = 0; i < 480; i++)
    {
        for (j = 0; j < 800; j++)
        {
            y = i;
            x = j;
            if (((x - cx) * (x - cx) + (y - cy) * (y - cy)) < (r * r))
            {
                color_buffer[800 * i + j] = 0x00FF0000; // 红色
            }
            else
                color_buffer[800 * i + j] = 0x000000FF; // 蓝色
        }
    }

    write(lcd_fd, color_buffer, 800 * 480 * 4);
    // 3.关闭文件
    close(lcd_fd);
    return 0;
}````

效果:800*400分辨率lcd屏幕

![](/i/l/?n=24&i=blog/3432067/202405/3432067-20240525162710276-61536593.jpg)

总结:
1.搭建框架,还是老步骤,open lcd屏幕,错误处理,写入颜色(两个for循环)write,最后关闭lcd(close),因为数组申请的是栈空间不用手动释放
2.最需要注意的是圆的代码怎么写,
先写好两个for循环,然后定义x和y轴变量,定义初始化圆的半径圆心坐标(两个变量),还有缓冲区,这些数据可以用宏定义来更改代码效果,如屏幕大小或者圆的大小,目前未优化可移植性。这块代码难度在于嵌套的for循环是要做一个判断写入颜色的,判断依据是离圆心的距离小于半径的大小那么就写入目标颜色,在这之前要用i和j的数据,所以要用i和j的数据更新到x和y坐标轴上。接下来要用坐标轴判断是否在圆内,因为sqrt()函数参数是表达式出现了错误,所以用宏定义也是相同的,所以我是直接用三角函数关系判断像素点到圆心的距离,因为目前用不了sqrt()函数,所以这块if()里面的三角平方公式不是很直观。
解释:if (((x - cx) * (x - cx) + (y - cy) * (y - cy)) < (r * r)) x或者y减去对应的坐标的平方再开方的值是相对于圆心的距离
数学公式:在一个直角三角形直角两条边各平方之和 等于 斜边的平方
X*X + Y*Y = R*R

标签:include,int,cy,lcd,cx,800,屏幕显示
From: https://www.cnblogs.com/ikunkunkun/p/18212567

相关文章

  • Ubuntu-lcd设备文件控制
    1、通过系统函数来控制lcd设备文件的流程打开文件将颜色写入到lcd屏幕上关闭文件2、Lcd特性设备名字/dev/unbuntu_lcd设备宽度和高度(像素点、大小、分辨率)800*480位深度:一个像素点所占用的大小---32位整个屏幕的大小:宽度高度位深度/8intlcd_argb[800*480];屏幕属......
  • LCD显示原理及应用
    Linux环境下LCD显示原理及应用1.LCD原理概述LCD(LiquidCrystalDisplay)液晶显示器是一种广泛应用于各种电子设备中的显示技术,它利用液晶分子在电场作用下的排列状态来控制光的透过,从而实现图像显示。2.LCD驱动原理LCD显示屏的驱动通常需要硬件和软件两方面的支持:硬件支持:......
  • 【原创】SPI LCD GC9A01+CST816S
    环境:Win1064bit+VSC&esp-idf插件准备:安装好cst816s库步骤:修改Kconfig.projbuild,加入cst816s支持使用SquareLine_Studio生成ui文件夹并移动到main下main/CMakeLists.txt中加入main/ui/CMakeLists.txt文件内的*.c文件清除工程并重新构建执行menuconfig并修改ExampleCo......
  • LCD屏显示练习【二】
    目录题目题目分析思路解析知识点涉及代码展示优化思考问题一:观察界面切换效果,可明显观察到界面切换时有明显的刷新效果,有点影响使用效果问题二:图片的按键位置不能相近或者重合,否则有误触导致执行了别的功能问题三:当快速来回点击触摸屏两个位置时,会出现点击位置坐标读取与实际触摸......
  • 使用jpeg图片库,显示图片并简单实现LCD的触屏功能
    /***@date2024/05/14*CopyRight(c)2023-2024ni456xinmie@163.comAllRightReseverd*/#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>//open函数三部曲#includ......
  • 通过LCD屏幕显示开机动画(将gif图片转为逐帧JPG图片)
    /**@filename: main.c@brief通过LCD屏幕显示开机动画@author1810866453@163.com@date2024/05/14@version1.0:版本@property:属性介绍@note补充注意说明CopyRight(c)2023-2024RISE_AND_GRIND@163.comAllRightReseverd*/#include<stdio.h>#incl......
  • arm平台,lcd显示动图,显示图片触屏反应
    #include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>#include<sys/mman.h>#include<linux/input.h>#include<unistd.h>/**Inclu......
  • 文件IO完成libjpeg库的移植,并设计程序实现在LCD上的任意位置显示一张任意大小的jpg图
    文件IO:完成libjpeg库的移植,并设计程序实现在LCD上的任意位置显示一张任意大小的jpg图片,注意不要越界。1.库的移植1.下载需要移植的库的源码包,libjpeg库源码包在官网可以下载www.ijg.org2.解压压缩包,解压后找到自述文件README,打开README了解libjpeg库的使用规则!3.打开源码包......
  • 设计程序,实现在LCD上任意位置显示一张任意大小的色深为24bit的bmp图片,要求图像不失真
    文件IO练习题设计程序,实现在LCD上任意位置显示一张任意大小的色深为24bit的bmp图片,要求图像不失真可以在开发板的LCD上显示。代码:/****************************************************************************************************************** * filename : Show......
  • 在LCD上的任意位置显示一张任意大小的jpg图片
    /***************************************************filename:lcdshowjpg.c*author:momolyl@126.com*date:2024/05/13*brief:完成libjpeg库的移植,并设计程序实现在LCD上的任意位置显示一张任意大小的jpg图片,注意不要越界。*note:......