通过内存映射的方式向lcd屏幕输出几个圆

/*************************************************
 *
 *   file name:color.c
 *   author   :momolyl@126.com
 *   date     :2024/05/11
 *   brief    :通过内存映射的方式向lcd屏幕输出几个圆
 *   note     :None
 *
 *   CopyRight (c) 2024    momolyl@126.com    All Right Reseverd
 *
 **************************************************/

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/mman.h>
int main(void)
{
    int lcd_fd = open("/dev/fb0", O_RDWR);
    if (-1 == lcd_fd)
    {
        printf("open lcd faild\n");
        return -1;
    }
    int *lcd_mmap = (int *)mmap(
        NULL,
        800 * 480 * 4,
        PROT_READ | PROT_WRITE,
        MAP_SHARED,
        lcd_fd,
        0);
    int x = 350, y = 300, r = 50;
    int x1 = 100, y1 = 100, r1 = 20;
    int x2 = 600, y2 = 260, r2 = 70;
    for (int i = 0; i < 800 * 480; i++)
    {

        if (((i / 800) - y) * ((i / 800) - y) + ((i % 800) - x) * ((i % 800) - x) <= r * r)
        {
            lcd_mmap[i] = 0x00CCFFFF;
        }
        else if (((i / 800) - y1) * ((i / 800) - y1) + ((i % 800) - x1) * ((i % 800) - x1) <= r1 * r1)
        {
            lcd_mmap[i] = 0x00FFCCE5;
        }
        else if (((i / 800) - y2) * ((i / 800) - y2) + ((i % 800) - x2) * ((i % 800) - x2) <= r2 * r2)
        {
            lcd_mmap[i] = 0x00CCCCFF;
        }
        else
            lcd_mmap[i] = 0x00ffffff;
    }

    write(lcd_fd, lcd_mmap, 800 * 480 * 4);
    return 0;
}

运行结果
image

posted @   铃是铃铛的铃  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示