基于GEC6818的简易自动售货机的设计

本文记录了一位学生基于GEC6818开发板设计简易自动售货机的项目经验。从项目背景、流程图绘制到编程实现,作者分享了遇到的问题及解决方法,包括图片格式适配、头文件和结构体管理以及多文件编译的注意事项。
摘要由CSDN通过智能技术生成

第一阶段的学习已经完成,老师布置了一个阶段验收项目,我以为是电子相册,谁知道,是这个,售货机,来说一下自己的心得体会吧
1 大二下学期的时候,有一个一周的简易项目需要完成,学生信息管理系统,不涉及到UI,数据库,网络,就是一个简简单单的vc6环境下的学生信息管理系统,功能?增删改查即可,老师说完要求,所有人,一半的人开始抱怨,难,另一半的人开始敲了,少数人开始思考怎么写,过了一会老师才说,你们是不是没做过项目呀,“是!”,“我去”,教你们,先画流程图,框架图,功能模块图,先写报告,编程是小事,第一次听老师提及项目这个词
2培训班老师说完,就开始想我应该怎么写,老师给我支招,先画流程图,再在主函数中写自己要做的东西的备注,先做什么再做什么
3画完流程图,写完备注后,思路果然清晰了许多,知道自己应该怎么做,做完后哪里可以优化升级一下了,编程?一天完成的差不多了,编程确实是小事
好了,给大家带来代码吧

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
#include <linux/input.h>
#include <sys/mman.h>
#include <stdlib.h>
#include <stdbool.h>
#include "fp.h"

extern int *lcd_memory;
extern int lcd_fd ;
extern char n_16x32[][64] ;
extern char n_buf[][16];

int main()
{
	int x , y ;
	int pet_number = 0 ;//代表pet的标号,范围为 1~8,
	int page_current = 1 ;//代表当前页数
	int pet_select = 0 ;
	struct input_event events ;
	int touch_fd = open_lcd() ;
	// 2 打开触摸屏
	// 3 初始化链表
	listnode head = init_list() ;
	// 4 信息录入(从文件夹下的data.txt录入)如果没有自己插入
	int struNumber = info_entering(head,"./petData.txt") ;//信息录入
	show_all(head);
	printf(" struNumber : mainfile : %d\n",struNumber);
	listnode newOne = head->next ;
	if(struNumber == 0)// if no member in txt , aumotically add pets information
	{
		add_node(head,1,"Pikachu",1,100,"./pica.bmp");
		add_node(head,2,"cabi",0,150,"./cabi.bmp");
		add_node(head,3,"jng",0,130,"./jng.bmp");
		add_node(head,4,"littleGray",1,170,"./littleGray.bmp");
		add_node(head,5,"mwzz",1,200,"./mwzz.bmp");
		add_node(head,6,"spike",1,300,"./spike.bmp");
		add_node(head,7,"pinkball",1,200,"./pinkBall.bmp");
		add_node(head,8,"xhl",1,300,"./xhl.bmp");
	}
	//电脑端显示所有的信息
	show_all(head);
// 5 进入欢迎界面 3秒后进入售卖界面
	show_bmp( "./bg.bmp");
	pageshow( head , 1);//刚开始显示第一页
// 6 如果点击上一页或者下一页,便刷新
    int pos[3] = {-1,-1,-1};
    while(1)
	{
		kick_pos(pos);
		printf("x = %d   y = %d    pressure = %d\n", pos[0], pos[1], pos[2]);	
		x = pos[0];
		y = pos[1];
		if(CANCEL_SIGN)
		{
			//cancel(head);
			pet_select = 0 ;
			if(page_current == 1)
			{
				pageshow(head,1) ;
			}
			else
			{
				pageshow(head,2) ;
			}
		}
		if(PREV)
		{
			Next_And_Prev( &page_current , head , pet_select );
		}
		if(NEXT)
		{
			Next_And_Prev( &page_current , head , pet_select );
		}
		if(PET_1)
		{
			kick_pet( page_current , &pet_select , head , 1 ) ;
			show_all(head);
		}
		if(PET_2)
		{
			kick_pet( page_current , &pet_select , head , 2 ) ;
			show_all(head);
		}
		if(PET_3)
		{
			kick_pet( page_current , &pet_select , head , 3 ) ;
			show_all(head);
		}
		if(PET_4)
		{
			kick_pet( page_current , &pet_select , head , 4 ) ;
			show_all(head);
		}
		if(CHECK)
		{
			if(pet_select >= 1 && pet_select <= 8 )
			{
				show_bmp( "./bg.bmp");
				//show_pay1( "./pay.bmp" , head, pet_select, "./paysign.bmp");
				confirm_mode("./payConfirm.bmp" , head , &pet_select);
				//confirm_mode(char *confirmPic , listnode head , int petNumber  , int *pet_select)
				pet_select = 0 ;
				if(page_current == 1)
				{
					pageshow(head,1) ;
				}
				else
				{
					pageshow(head,2) ;
				}
				
			}
			show_all(head);
		}	
		if(ZONE_EXIT)
		{
			info_save( head );
			clear_lcd();
			break;
		}
	}	
	return 0;
}


#ifndef _FP_H_  
#define _FP_H_  
typedef struct node{
	int petNumber;
	char petName[20] ;
	int petSurplus;
	double petPrice;
	char petPic[50] ;
	struct node *next;   //next指向后一个节点指针(后继指针),
}*listnode;


extern char n_buf[][16];
extern char n_16x32[][64];

extern int *lcd_memory;
extern int lcd_fd ;

#define PAY_1 x >= 124  && y >= 24 && x < 230 && y < 120
#define PAY_2 x >= 276  && y >= 24 && x < 380 && y < 120
#define PAY_3 x >= 426  && y >= 24 && x < 530 && y < 120
#define PAY_4 x >= 576  && y >= 24 && x < 680 && y < 120

#define PET_1 x >= 40  && y >= 60 && x < 190 && y < 360
#define PET_2 x >= 230  && y >= 60 && x < 380 && y < 360
#define PET_3 x >= 420  && y >= 60 && x < 570 && y < 360
#define PET_4 x >= 610  && y >= 60 && x < 760 && y < 360
#define CANCEL_SIGN x >= 40  && y >= 370 && x < 190 && y < 470
#define PREV x >= 230  && y >= 370 && x < 380 && y < 470
#define NEXT x >= 420  && y >= 370 && x < 570 && y < 470
#define CHECK x >= 610  && y >= 370 && x < 760 && y < 470

#define ZONE_CONFIRM x >= 0  && y >= 380 && x < 360 && y < 480
#define ZONE_CANCEL x >= 440  && y >= 380 && x < 800 && y < 480
#define ZONE_EXIT x >= 770  && y >= 0 && x < 800 && y < 30
int lcd_draw_bmp( int x0 , int y0 , char* bmpAddress );
int open_lcd();
void show_all(listnode head);
listnode init_list();
int info_entering( listnode head , char* fileAddress );
int show_bmp( char* bmpAddress);
int add_node(listnode head,int petNumber,char* petName,int petSurplus,double petPrice ,char* petPic);
int pageshow(listnode head , int page);
void kick_pos(int *pos);
void show_num16x32(int x,int y, int num, int color);
void show_money(int x, int y, int money);
int show_pay( char* payAddress , listnode head, int petNumber ,char* paySignAddress);
void kick_pet( int page_current , int* pet_select , listnode head , int zoneNumber );
void Next_And_Prev( int* page_current , listnode head , int pet_select );
void confirm_mode(char *confirmPic , listnode head , int *pet_select);
int soldout_draw_bmp( int picNumber,  char *bmpname);
bool soldout_judge( listnode head , int petNumber);
int pay_way(listnode tmp, int petNumber);
void draw_bar(int x0, int y0, int width, int height, int speed, int color);
int info_save( struct node *head );
void close_lcd();
void clear_lcd();
#endif
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
#include <linux/input.h>
#include <sys/mman.h>
#include <stdlib.h>
#include <stdbool.h>
#include "fp.h"


int *l
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值