萌宠智选宝盒 基于文件IO、GEC6818开发板

项目功能:

1.主界面左滑进入店内,上滑付款结算

第一步就上滑会出现提示信息(必须先看才能买)

2.点击店内心仪品种狗狗,查看详细信息

3.左右滑动翻看心仪品种狗狗,按编号挑选

4.翻看完毕,切换选择界面

5.点击按键做出选择

若选择继续查看其他品种狗狗,返回第2点

若选择离店,弹出离店页面,项目结束

若选择购买,弹出购买界面,上滑付款结算

6.进入购买界面

弹出品种大全,先选择心仪品种

弹出编号表,再选择相应编号

7.购买成功,弹出最终效果图


技术实现:

1.初始化LCD屏幕文件

2.基于内存映射设置一个像素点颜色从而展示相应bmp图片或jpg图片

3.监控触摸点坐标,用click函数封装,实现选狗图片点击功能,跳转相应界面

4.监控触摸屏动作,左右滑动依靠双链表,用slide函数封装实现,把一个目录下所有图片放入双链表

5.监控触摸点坐标,用is_buy函数封装,选择界面设置三个flag判断事件:flag1判断是否离店,离店展示离店界面;flag2判断是否准备按到按钮,不准确则继续展示选择界面;flag3判断是否购买

6.监控触摸屏动作,主界面左滑进店上滑结算,用cover函数封装,若一开始就上滑则展示提示图片

7.根据选择展示各自界面,用option函数封装

8.如若顾客想要购买,展示购买界面,监控触摸点坐标,点击心仪品种切换编号图片,再监控触摸屏坐标切换效果图


源码:

#include "dog.h"
#include "touch.h"
#include "jpeglib.h"
#include "word.h"
#include "num.h"

typedef struct BNode{
    char pathname[100];
    struct BNode *next;
    struct BNode *prev;
}BNode;

BNode *first = NULL;
BNode *last = NULL;

int flag = 0; //flag用来区分是否第一次看狗(0是第一次1不是)
int flag1 = 0;//flag1用来判断是否继续看狗(1不看了0继续看)
int flag2 = 1;//flag2用来判断最后选择时刻是否按了按键(1按了0没按)
int flag3 = 0;//flag3用来判断是否去购买(1购买0不买)
int flag4 = 0;//flag4用来判断第一次在主界面是否向上滑(1是0不是)

int *plcd = NULL;

/*
    功能:初始化LCD屏幕文件(在"/dev/fb0"里)
    返回值:
        文件描述符
*/
int init_lcd()
{
    int fd = open("/dev/fb0", O_RDWR);
    if(fd == -1)
    {
        perror("open error");
        return -1;
    }
    //内存映射
    plcd = mmap(NULL, 480*800*4, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
    if(plcd == MAP_FAILED)
    {
        perror("mmap error");
        return -1;
    }
    return fd;
}

/*
    功能:设置像素点(x,y)的颜色
    参数:
        @x:像素点横坐标
        @y:像素点纵坐标
        @color:设置的颜色
*/
void lcd_draw_point(int x, int y, int color)
{
    if(x>=0 && x<=800 && y>=0 && y<=480)
    {
        *(plcd+y*800+x) = color;
    }
}

/*
    功能:展示bmp图片
    参数:
        @pathname:图片所占绝对路径
        @x:起始点横坐标
        @y:起始点纵坐标
*/
void show_bmp(char *pathname, int x, int y)
{
    int fd = open(pathname, O_RDONLY);
    if(fd == -1)
    {
        perror("open error");
        return ;
    }

    int size, offset, h, w;
    short color_depth;//bmp图片的色深
    lseek(fd, 0x02, SEEK_SET);
    read(fd, &size, 4);
    lseek(fd, 0x0A, SEEK_SET);
    read(fd, &offset, 4);
    lseek(fd, 0x12, SEEK_SET);
    read(fd, &w, 4);
    lseek(fd, 0x16, SEEK_SET);
    read(fd, &h, 4);
    lseek(fd, 0x1C, SEEK_SET);
    read(fd, &color_depth, 2);

    // printf("%s: size = %d offset = %d w = %d h = %d color_depth = %d\n", pathname,size, offset, w, h, color_depth);

    int fill = 0;
    if(w*3%4)
    {
        fill += 4 - w*3%4;
    }
    //读取像素数组
    int pixel_size = size - offset;
    char *buf = (char *)calloc(pixel_size, sizeof(char));
    read(fd, buf, pixel_size);

    //显示颜色
    char a = 0, r, g , b;
    int k = 0;
    for(int i=0; i<h; ++i)
    {
        for(int j=0; j<w; ++j)
        {
            b = buf[k++];
            g = buf[k++];
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值