最终实现的效果是一个触屏计算器,在上一篇博客的工程基础下改变主程序即可,用的是4.3寸屏幕,如果不是4.3寸屏幕,就需要自己该改参数,Calculator_Init函数中的界面参数也要重新设置,最终实现的效果如下:
主程序
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "beep.h"
#include "ili93xx.h"
#include "touch.h"
#include "gui.h"
#include "24cxx.h"
#include "ucos_ii.h"
#include "string.h" //需要用到字符串处理函数
#include "stdio.h" //sprintf转换要用到
#include "FRAMEWIN.h"
#include "BUTTON.h"
#include "EDIT.h"
#include "LISTBOX.h"
int t;
//计算器的模块构建部分!定义为全局变量,省去了传递参数的麻烦,当然,这不够规范
FRAMEWIN_Handle hFrame;
//FRAMEWIN_Handle在#include "FRAMEWIN.h" 当中
BUTTON_Handle hButton1;
BUTTON_Handle hButton2;
BUTTON_Handle hButton3;
BUTTON_Handle hButton4;
BUTTON_Handle hButton5;
BUTTON_Handle hButton6;
BUTTON_Handle hButton7;
BUTTON_Handle hButton8;
BUTTON_Handle hButton9;
BUTTON_Handle hButton0;
BUTTON_Handle hButton_jia;
BUTTON_Handle hButton_jian;
BUTTON_Handle hButton_chen;
BUTTON_Handle hButton_chu;
BUTTON_Handle hButton_equal;
BUTTON_Handle hButton_backspace;
BUTTON_Handle hButton_dort;
BUTTON_Handle hButton_ac;
EDIT_Handle hEdit;
LISTBOX_Handle hListBox;
GUI_PID_STATE Button_State; //输入设备状态
char num1[10]={
""};
char num2[10]={
""};
char temp1[50]={
""}; //临时数组1——放第一个运算数
char temp2[50]={
""}; //临时数组1——放第二个运算数
double a=0.0; //妈的,必须用double,一开始用的float有时好用有时不好用
//还以为自己程序写错了
double b=0.0;
static int middle_flag=0; //中间运算符标志
double f=0.0; //存放最终结果
int len;//获取字符串长度
int Type=0; //默认是=0,表示没有运算符按下
//=1:加;=2:减;=3:乘;=4:除
/UCOSII任务设置///
//START 任务
//设置任务优先级
#define START_TASK_PRIO 10 //开始任务的优先级设置为最低
//设置任务堆栈大小
#define START_STK_SIZE 64
//任务堆栈
OS_STK START_TASK_STK[START_STK_SIZE];
//任务函数
void start_task(void *pdata);
//触摸屏任务
//设置任务优先级
#define TOUCH_TASK_PRIO 7
//设置任务堆栈大小
#define TOUCH_STK_SIZE 256
//任务堆栈
OS_STK TOUCH_TASK_STK[TOUCH_STK_SIZE];
//任务函数
void touch_task(void *pdata);
/***************************************************************************
* 计算器框架的初始化部分 *
***************************************************************************/
void Calculator_Init(void)
{
hFrame = FRAMEWIN_Create("Calculator", NULL, WM_CF_SHOW, 0,0,480,800);
//WM_CF_SHOW/* Show window after creation */
FRAMEWIN_SetActive(hFrame, 1);
FRAMEWIN_SetMoveable(hFrame, 1); //设置为可移动的
FRAMEWIN_SetFont(hFrame, &GUI_Font16B_ASCII);
FRAMEWIN_SetTextColor(hFrame, GUI_RED);
FRAMEWIN_SetBarColor(hFrame, 0, GUI_GREEN);
FRAMEWIN_SetTextAlign(hFrame, GUI_TA_HCENTER);
FRAMEWIN_AddMaxButton(hFrame, FRAMEWIN_BUTTON_RIGHT, 0);
FRAMEWIN_AddMinButton(hFrame, FRAMEWIN_BUTTON_RIGHT, 0);
hButton1 = BUTTON_CreateAsChild(10,120,70, 70,hFrame,101,WM_CF_SHOW);
//注意这里的ID,每一个空间都有自己的一个ID
hButton2 = BUTTON_CreateAsChild(10,200,70, 70,hFrame,102,WM_CF_SHOW);
hButton3 = BUTTON_CreateAsChild(10,280,70, 70,hFrame,103,WM_CF_SHOW);
hButton4 = BUTTON_CreateAsChild(90,120,70, 70,hFrame,104,WM_CF_SHOW);
hButton5 = BUTTON_CreateAsChild(90,200,70, 70,hFrame,105,WM_CF_SHOW);
hButton6 = BUTTON_CreateAsChild(90,280,70, 70,hFrame,106,WM_CF_SHOW);
hButton7 = BUTTON_CreateAsChild(170,120,70, 70,hFrame,107,WM_CF_SHOW);
hButton8 = BUTTON_CreateAsChild(170,200,70, 70,hFrame,108,WM_CF_SHOW);
hButton9 = BUTTON_CreateAsChild(170,280,70, 70,hFrame,109,WM_CF_SHOW);
hButton0 = BUTTON_CreateAsChild(250,120,70, 70,hFrame,100,WM_CF_SHOW);
hButton_jia = BUTTON_CreateAsChild(250,200,70, 70,hFrame,110,WM_CF_SHOW);
hButton_jian = BUTTON_CreateAsChild(250,280,70, 70,hFrame,111,WM_CF_SHOW);
hButton_chen = BUTTON_CreateAsChild(330,120,70,