LinuxLCDFrambuffer基础介绍和使用方法
时间:2023-06-26 12:51:13来源:面包芯语

1、什么是Framebuffer?

假设LCD屏幕分辨率是800x600,每个像素占4字节,那么framebuffer 大小就是:

800x600x4=960000字节

framebuffer 显示原理,如下图所示:

假设需要设置 LCD 中坐标(x,y)处像素的颜色,首要要找到这个像素对应的内存,然后根据它的 BPP 值设置颜色。


(相关资料图)

假设 fb_base 是 APP 执行 mmap 后得到的 Framebuffer 地址,如下图所示:

(x,y)像素起始地址=fb_base+(xres*bpp/8)y + xbpp/8

2、为什么要有Frambuffer?

思考一个问题,为什么要用Framebuffer?

上图为LCD 驱动框架图:

从软件层面分析:framebuffer 起着承上启下的作用,向上,为应用层提供通用系统调用(open(),ioctl(),mmap());向下,联接LCD控制器,之前对硬件进行操作。

从硬件层面分析:用户只需要将数据写到framebuffer,硬件会自动刷新到屏幕上。

3、常用接口和数据结构

3.1 常用接口

通过 man 2 查看如下:

函数说明:

函数原型:

intioctl(intfd,unsignedlongrequest,...);

函数说明:

3)mmap 系统调用:

函数说明:

3.2 相关数据结构

fb_var_screeninfo:包含xres, yres, bits_per_pixel等信息,在后续会经常用到。

4、如何在LCD 上描点?

4.1 LCD 显示原理

当我们需要显示一个字母‘A’时,是通过判断点阵的每一个位数值状态,来填充颜色,达到显示字符效果。其中‘1’表示一种颜色,‘0’表示填充另一种颜色。

如下图[1]8*16的点阵,只要有这个点阵,我们就可以在LCD上面描点,达到显示字符的效果。

4.2 Framebuffer 操作说明

framebuffer 操作如下流程:

intfd_fb;structfb_var_screeninfovar;/*Currentvar*/intscreen_size;unsignedchar*fbmem;unsignedintline_width;unsignedintpixel_width;intmain(intargc,char*argv[]){/*Step1:打开设备*/fd_fb=open("/dev/fb0",O_RDWR);if(fd_fb<0){printf("can"topen/dev/fb0\n");return-1;}/*Step2:获取设备参数信息* xres:x 方向总像素* yres:y 方向总像素* bits_per_pixel:每个像素占多少位*/if(ioctl(fd_fb,FBIOGET_VSCREENINFO,&var)){printf("can"tgetvar\n");return-1;}/*Step3:计算线宽,分配显存*//*line_width每行占的字节*/line_width=var.xres*var.bits_per_pixel/8;pixel_width=var.bits_per_pixel/8;screen_size=var.xres*var.yres*var.bits_per_pixel/8;fbmem=(unsignedchar*)mmap(NULL,screen_size,PROT_READ|PROT_WRITE,MAP_SHARED,fd_fb,0);if(fbmem==(unsignedchar*)-1){printf("can"tmmap\n");return-1;}/*Step4:清屏:全部设为黑色*/memset(fbmem,0,screen_size);/*Step5:描点*/lcd_put_ascii(var.xres/2,var.yres/2,"A");/*在屏幕中间显示8*16的字母A*//* Step6:释放资源*/munmap(fbmem,screen_size);/* Step7:关闭设备*/close(fd_fb);return0;}

4.3 描点实现

描点的关键是计算点(x,y)位置对应的地址,然后直接指向fbmem即可向frambuffer 写入数据。

/***********************************************************************函数名称:lcd_put_pixel*功能描述:在LCD指定位置上输出指定颜色(描点)*输入参数:x坐标,y坐标,颜色*输出参数:无*返回值:会***********************************************************************/voidlcd_put_pixel(intx,inty,unsignedintcolor){/**最主要的就是fbmem*计算(x,y)位置的偏移,然后指向fbmem,这块直接映射到framebuffer内存里*/unsignedchar*pen_8=fbmem+y*line_width+x*pixel_width;unsignedshort*pen_16;unsignedint*pen_32;unsignedintred,green,blue;pen_16=(unsignedshort*)pen_8;pen_32=(unsignedint*)pen_8;switch(var.bits_per_pixel){/*8bpp*/case8:{*pen_8=color;break;}/*16bpp*/case16:{/*565*/red=(color>>16)&0xff;green=(color>>8)&0xff;blue=(color>>0)&0xff;color=((red>>3)<<11)|((green>>2)<<5)|(blue>>3);*pen_16=color;break;}case32:{*pen_32=color;break;}default:{printf("can"tsurport%dbpp\n",var.bits_per_pixel);break;}}}

4.4 向 LCD 写入 英文

写入英文的前提:

/***********************************************************************函数名称:lcd_put_ascii*功能描述:在LCD指定位置上显示一个8*16的字符*输入参数:x坐标,y坐标,ascii码*输出参数:无*返回值:无***********************************************************************/voidlcd_put_ascii(intx,inty,unsignedcharc){/*fontdata_8x168x16英文点阵数据*/unsignedchar*dots=(unsignedchar*)&fontdata_8x16[c*16];inti,b;unsignedcharbyte;/*8x16的点阵,16行8列*/for(i=0;i<16;i++){byte=dots[i];for(b=7;b>=0;b--){if(byte&(1<

标签:

最新
  • LinuxLCDFrambuffer基础介绍和使用方法

    1、什么是Framebuffer?Framebuffer字面意思就是帧缓存的意思,即显存

  • 当前通讯!小冯:双币关键阻力位承压调整 黄金整体偏弱关注1940

    比特币连续的冲高之后近几日显然多头势能开始放缓币价也开始进入调整阶

  • 个性化定制、主题研学,暑期游玩法“上新”持续升温 每日简讯

    六月的夏日充满毕业季独有的青春气息,随着中高考结束,“暑期档”旅游

  • 高温来袭 防暑降温这样做

    金羊网

  • 走进端午节 传承端午情 | 小店区正阳街小学端午节主题活动 全球快讯

    走进端午节传承端午情|小店区正阳街小学端午节主题活动,小店区,习俗,传

  • 卡卡废了是怎么回事?卡卡哪一年退役的呢?|全球热讯

    卡卡废了是怎么回事?卡卡的职业生涯中,他经历了许多的伤病。但是,

  • 天天热点评!微视频|大地诗篇

    05:59土地,是万物之源、立国之本,是“大国粮仓”的根基。6月25日是第

  • 中国农业发展银行总行专家委员会副主任委员赵富洲被查

    中国农业发展银行总行专家委员会副主任委员赵富洲被查

  • “哪凉快哪待着” 青岛威海上榜全国前十

    2023年端午节恰逢毕业季,不仅大家的出行意愿上升,节日消费氛围也很浓

  • 葛花茶的作用与功效_葛花茶的作用与功效介绍 快看 每日时讯

    1、防止早衰2、延缓衰老是葛根茶的重要功效之一。这种茶含有大量的黄酮

  • “敬礼娃娃”高考637分想报北大 当前要闻

    这两天,有关“汶川地震中的“敬礼娃娃”郎铮高考637分:准备报考北大

  • 返程小心风雨!深圳全市雷电预警,北方酷热南方雨雨雨,欢迎小伙伴来广东避暑……_焦点资讯

    今天是端午假期最后一天经历了假期第一天的烈日当空第二天的雷电阵雨今

  • 全球观焦点:“国会山股神”佩洛西出手 行权买入苹果(AAPL.US)、微软(MSFT.US)股票

    根据提交的一份新的美国国会交易表披露,被讽刺为“国会山股神”的众议

  • 2023年广西青少年业余俱乐部水球锦标赛落幕

    广西新闻网-广西日报南宁讯(记者玉智威)6月23日,2023年广西青少年业

  • 考点校送“清凉”,考生自信赴考,提醒:今年考生在进场时要接受金属探测仪检查 每日资讯

    6月24日7时许,距离2023年北京初中学业水平考试首门还有不到1小时,北

  • 田世宏会见美国UL公司全球总裁简思明

    证券时报网讯,据市场监管总局消息,6月21日,国家市场监督管理总局副

  • 旅游
    • 拓维信息龙虎榜:机构净卖出9317万元|世界播资讯

    • 友谊赛-德国vs波兰首发:哈弗茨、穆西亚拉先发,莱万出战|世界时快讯

    • 上海今日启动“亮剑浦江·消费领域个人信息权益保护专项执法行动”_全球观热点

    • 腾景科技:公司精密光学元组件产品可应用于高速光模块中 具体需求情况跟随客户订单波动