Day1 一些Linux系统的基本操作和环境配置

Day2 在屏幕上显示一个圆

  1. 打开屏幕获得屏幕端口号fd_lcd
  2. 进行xy循环,符合圆以内的write入颜色1,不符合的write入颜色2,write每次执行,光标都会跳到下一个位置
  3. 关闭文件

Day3 让屏幕上的圆动起来

  1. 打开屏幕获得屏幕端口号fd_lcd
  2. 申请一段内存存放颜色信息,获得内存地址ptr,且与fd_lcd建立连接
  3. while1无限循环,判断圆是否碰壁,碰壁触发改变移动方向
  4. 根据移动方向代号,设置移动方向具体实现代码

Day4 在屏幕上显示图片

  1. 打开屏幕获得屏幕端口号fd_lcd
  2. 申请一段内存存放颜色信息,获得内存地址ptr,且与fd_lcd建立连接
  3. 打开图片获得端口号bmp_fd
  4. 创一个数组bmp_buffer存图片颜色数据,使用lseek跳过bmp_fd的前54个字节,用read读颜色数据到bmp_buffer中.
  5. 创建4字节int类型的数组lcd_buffer存放屏幕显示颜色信息,屏幕像素是4个字节,顺序是ARGB,而BMP中读取的信息的顺序是BGR,因此需要将00向前移24位作为A,红色1个字节向前移16位作为R,绿色的1个字节向前移8位作为G,蓝色不变,将这几个数字相或即可等价于相加.
  6. 作xy循环,将lcd_buffer放到ptr中
  7. 若需要作偏移则将偏移后的坐标作为x,y坐标,且最多只读取图片大小次
1
2
3
4
5
6
7
8
for(y=0; (y+offset_y<480 && y<bmp_height); y++)
{
for(x=0; (x+offset_x<800 && x<bmp_width); x++)
{
//屏幕的位置 图片的转换好的数据
*(ptr+800*(y+offset_y)+(x+offset_x)) = lcd_buffer[y*bmp_width+x];
}
}

Day5 读取触摸屏的触摸坐标

  1. 打开触摸屏,获取触摸屏端口号touch_fd

  2. 使用input_event结构体作为屏幕触摸的事件容器

  3. 使用read将touch_fd与事件容器交换数据

  4. 循环,判断触摸的事件,每次触摸屏幕将会传送两次touch_struct回来,第一次是X轴信息,第二次是Y轴信息
    要进行滑动识别,需要引入按下事件和抬起事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
	//touch_struct.value 为0时代表松开
//touch_struct.value 为非0时代表按下
if(BTN_TOUCH == touch_struct.code && 0 == touch_struct.value)
{ printf("松开按键");
end_x = touch_x;
end_y = touch_y;
break; //退出获取坐标的循环
}
else if(BTN_TOUCH == touch_struct.code && 0 != touch_struct.value)
{ printf("按下按键");
start_x = touch_x;
start_y = touch_y;
}
}

Day6 成果展示