文件IO(三)

系统IO的实际应用

===============

     安装使用液晶屏触摸屏模拟器

           第一步: 分别安装触摸屏和液晶屏的驱动

                          先make编译驱动程序,得到.ko文件(ko文件就是驱动文件)

                          使用insmod   驱动的名字    安装驱动(使用超级用户权限安装)

                          提示:驱动安装成功以后,在ubuntu根目录  /dev下生成两个驱动节点文件

                                            ubuntu_event   //触摸屏的驱动

                                            ubuntu_lcd      //液晶屏的驱动            

           第二步:执行VTSLcd程序

                          ./VTSLcd     (超级用户权限执行)

                                                                

  1.  使用系统IO在液晶屏上显示bmp格式的图片

          日常图片格式:  jpg (用算法压缩过的,占用的存储空间很小)   bmp   png    gif (每种格式的图片都有自己的编码方式)

          bmp图片的特点:  没有压缩过,存储的是每个像素点最原始的RGB数据(三原色),RGB各占1个字节,bmp每个像素点占三个字节(24位二进制)

                                      微软公司发明bmp格式图片,规定了bmp图片在存储的时候上下像素点就是颠倒,RGB的排列也是颠倒    

                                      bmp图片最前面有54个字节的头信息(存放的是图片的属性信息,宽,高),真实的RGB数据从55字节开始的

                

          模拟lcd: 每个像素点占4个字节,多出来的一个字节用来存放图片的透明度信息(A),换句话来说lcd要求是ARGB, 但是bmp图片是RGB

          思路:  

                    第一步:打开你要显示的bmp图片(800*480大小)

                                  打开虚拟的液晶屏驱动

                    第二步:读取bmp图片像素点的RGB数值

                    第三步:把读取的RGB数值写入到液晶屏中

                    第四步:关闭图片,关闭液晶屏

         遇到的问题:

                   第一个问题: 图像显示错乱

                          二进制    1101  1010

                                         1010  1101<<8  按位或   结果 1010  1101  1101  1010

                            R   1101  1010

                            G  1010  1101<<8

                            B  1100  1011<<16  位或     结果1100  1011 1010  1101 1101  1010

                      按位或和左移配合,实现数据的拼接

  2.  使用系统IO操作触摸屏

                  思路:  打开触摸屏的驱动    /dev/ubuntu_event

                              读取触摸屏的坐标

                              关闭触摸屏

                  输入子系统模型:(后面学习驱动会详细讲解,目前理解原理即可)

                       /usr/include/linux/input.h定义了大量的宏定义(统一了名字)

                   linux把所有输入类型的设备驱动统一成了一个模型---》称为输入子系统模型

                  常见的输入类型的设备: 鼠标    键盘    触摸屏

                  //linux中定义了一个结构体

                  struct input_event {

                 struct timeval time;  //事件触发的时间

                 __u16 type;   //事件类型,EV_KEY表示键盘     EV_REL表示鼠标  EV_ABS表示触摸屏

 __u16 code;  //x,y坐标   左右键    键盘的按键  ABS_X   x坐标   ABS_Y  y坐标

 __s32 value; //坐标值    键值

};

 

作业:

       1.  思考题:  其它大小的图片,在液晶屏指定位置如何显示???

                200*100大小的bmp    在屏幕 (100,150)的位置显示出来

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值