赞
踩
本次项目开发环境:gec6818,QT5.14.2,SecureCRT。
所使用的相关技术:c/s架构,STL库,C++封装,标准化代码编写
实现的功能:用户登录页面,食品分区在不同页面,用户点餐页面,用户买单页面,数据整合并发送至后台,后台成功接受数据,返回主页面。
1、gec6818开发板的特点(性能强大):
a:GEC6818开发平台,核心板采用10层板工艺设计,确保稳定可靠。
b:该平台搭载三星Cortex-A53系列高性能八核处理器S5P6818,最高主频高达1.4GHz。
c:开发板留有丰富的外设,支持千兆以太网、板载LVDS接口、MIPI接口、USB接口等。
d:可应用于嵌入式Linux和Android等操作系统的驱动、应用开发。
c:搭载7.0英寸LCD屏支持32位真彩色,触摸屏使用电容屏触点多达1,536,000个以上。
2、连接电源,串口和网络接口,通过SecureCRT来设置开发板。
3、编写代码:
思路:初始化显示屏和触摸屏,生成自定义坐标X轴Y轴,根据触摸坐标发出的信号来响应事件。通过STL库中的正向迭代器使文件中的图片按顺序输出,在通过TCP通信发送整合的数据到服务器。为防止项目代码又长又丑,采用分文件编写,精简,直观也方便查询。
注意:本次项目只展现部分重要代码
main.cpp
- #include <iostream>
- using namespace std;
- #include "application.h"
-
- int main()
- {
- Application a1; //自定义开始状态
-
- a1.exec(); //只做一个项目入口
-
- return 0;
- }
application.cpp
-
- #include "application.h"
-
- Application::Application()
- {
- m_state = E_APP_STATE_START; //初始化状态,使其固定在开始状态
- }
-
- //这里设计的是按流程一步步往下走
- int Application::exec()
- {
- while(1)
- {
- switch (m_state) {
- case E_APP_STATE_NONE:
- break;
- case E_APP_STATE_START://进入开始画面的状态
- {
- staticInterface s1;
- s1.show();
- }
- m_state = E_APP_STATE_LOGIN;
- break;
- case E_APP_STATE_LOGIN://进入登录界面的状态
- {
- LoginInterface l1;
- l1.show();
- }
- m_state = E_APP_STATE_MAIN;
- break;
- case E_APP_STATE_MAIN://进入主界面的状态
- {
- MainWidget m1;
- m1.show();
- }
- m_state = E_APP_STATE_LOGIN;
- break;
- }
- }
- }

staticInterface.cpp
- #include "staticinterface.h"
-
- 在.h文件中类私有成员里面定义的容器
- //std::list<std::string> m_bmpList; //定义容器
-
-
- staticInterface::staticInterface()
- {
- //初始化容器,将staticBmp文件夹里面的图片按顺序放入容器中
- m_bmpList = Dir::entryList("./bmp/staticBmp");
- }
-
- void staticInterface::show()
- {
- Bmp b1;
- //使用常量正向迭代器
- for(std::list<std::string>::iterator it = m_bmpList.begin() ; it!=m_bmpList.end(); it++)
- {
- b1.setFileName(*it);
- b1.show(); //将容器中的图片一个个显示,1秒的间隔,形成一个简单的开始动画动图效果
-
- sleep(1);
- }
- }

登录页面代码过长切基本上重复代码,不做演示,其原理是固定x轴和y轴的大小,当点击时触发信号,显示数字并记录在类内中,同时设置9个数字也就是9个x轴和y轴的大小,点击设置好的确定按钮区,即可进入下一个页面。
maininterface.cpp
- void MainWidget::show()
- {
- //显示主界面图片
- Bmp b1("./bmp/main.bmp");
- b1.show();
- //显示菜单界面图片
- m_menuWidget->show();
-
- SendData s1;
-
- while(1){
- int x,y;
- //等待触摸屏 触摸
- TouchSreen touch;
- touch.waitTouch(x,y);
-
- if(x>=0 && x<800 && y>=0 && y<480) //点击到了 菜单界面区域
- {
- std::cout<<"点击到了菜单界面区域...."<<std::endl;
- //判断当前点击的是 哪个 菜单界面的按钮,然后切换不同的 页面
- //这里采用了枚举
- m_menuWidget->setPageWidget(x,y);
-
- }
- }
- }

menuinterface.cpp
- int MenuInterface::setPageWidget(int x, int y)
- {
- int m_page;
- bool isExit = false;
- //根据点击的不同 坐标 ,判断点击的是哪个按钮,然后进行 换页
- if(x>=0 && x<=120 && y>=0 && y<100) //第一页 --缩略图
- {
- std::cout<<"肉太特么香了"<<std::endl;
- m_page = E_MENU_PAGE1;
- }
- else if(x>=0 && x<=120 && y>=100 && y<200)//第二页
- {
- std::cout<<"蔬菜太特么健康了"<<std::endl;
- m_page = E_MENU_PAGE2;
- }
- else if(x>=0 && x<=120 && y>=200 && y<300)//第3页
- {
- std::cout<<"水果太特么好看了"<<std::endl;
- m_page = E_MENU_PAGE3;
- }
- else if(x>=0 && x<=120 && y>=300 && y<400)//第4页
- {
- std::cout<<"饮料太特么爽了"<<std::endl;
- m_page = E_MENU_PAGE4;
- }
- else if(x>=740 && x<800 && y>=420 && y<480)//结算页面
- {
- std::cout<<"结算中......."<<std::endl;
- m_page = E_MENU_PAGE5;
- }
- }
- //后面有做一个图片缩略图,就不展示了

只展示一个,展示肉区
page1interface.cpp
- void Page1Interface::show()
- {
- //在 界面的右边 120 ~800 这个区域显示 四张 缩小后的图片
- int startX = 200;
- int startY = 50;
-
- int i=0;
-
- //使用stl库的正向迭代器顺序输出图片
- for(std::list<std::string>::iterator it=m_bmpList.begin(); it!=m_bmpList.end(); it++,i++)
- {
-
- Bmp b1(it->data());
-
- switch (i%4) {
- case 0:
- b1.scaleShow(startX,startY);
- break;
- case 1:
- b1.scaleShow(startX+200+100,startY);
- break;
- case 2:
- b1.scaleShow(startX,startY+120+80);
- break;
- case 3:
- b1.scaleShow(startX+200+100,startY+120+80);
- break;
- }
- }
- }
-
- //设置加菜减菜图片设计
- void Page1Interface::addShow()
- {
- Bmp b1("./bmp/jian.bmp"); //60*60
- b1.show(200,178);
- Bmp b2("./bmp/jia.bmp"); //60*60
- b2.show(340,178);
- Bmp b3("./bmp/jian.bmp");
- b3.show(500,178);
- Bmp b4("./bmp/jia.bmp");
- b4.show(640,178);
- Bmp b5("./bmp/jian.bmp");
- b5.show(200,(178+120+16+60));
- Bmp b6("./bmp/jia.bmp");
- b6.show(340,(178+120+16+60));
- Bmp b7("./bmp/jian.bmp");
- b7.show(500,(178+120+16+60));
- Bmp b8("./bmp/jia.bmp");
- b8.show(640,(178+120+16+60));
-
- }
-
-
-

然后就是计算肉区点餐的数量,设置每个菜的价格,同一保存至一个类中,由于代码过长且重复,暂不予展示。其他菜区也是同样的操作不展示。
初始化TCP通信,发送数据
- //创建接口
- t1.applyInterface(); //封装成函数
-
- ssize_t wr_size;
- wr_size = write(t1.return_skt_fd(), buffer, strlen(buffer));//接受数据,拥有阻塞,如果没有数据将会阻塞在这里
- if(wr_size == -1)//出错了
- {
- perror("读取出错,那他走\n");
- return -1;
- }
-
- //关闭接口
- t1.closeCustomer();
此时后台成功接受数据
最后一步,将代码烧写进开发板
通过SecureCRT串口连接开发板,传输编译好的arm文件(arm-linux-g++),再将项目所需图片下载进开发板,运行,实验,无BUG,数据接受完整,ok交差。
项目视频演示连接:https://live.csdn.net/v/287185
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。