[mw_shl_code=c,true]这个是main.c的所有函数
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "timer.h"
#include "gui.h"
#include "touch.h"
#include "WM.h"
#include "button.h"
#include "progbar.h"
#include "CHECKBOX.h"
#include "listbox.h"
#include "framewin.h"
// ----------------------------------------------- //
const GUI_ConstString table[]={"english","Deutsch","Franch","Japanese","Italian",NULL};
#define countof(Array)(sizeof(Array)/sizeof(Array[0]))
// ----------------------------------------------- //
GUI_PID_STATE STATE; //该变量为GUI触屏的x y位置存储坐标(内部已将其换算为屏幕坐标了)
int bar;
PROGBAR_Handle hBar;
BUTTON_Handle hButton,hbut1,hbut2;//按钮句柄
CHECKBOX_Handle hbox;
int temp1,temp2,temp3,temp4;
FRAMEWIN_Handle hFrame;
BUTTON_Handle hButton1;
BUTTON_Handle hButton2;
// ----------------------------------------------- //
void Progbar(void)
{
GUI_DispStringAt("PROGRESS BAR",100,0);
hBar = PROGBAR_Create(100,20,100,20,WM_CF_SHOW);
PROGBAR_SetBarColor(hBar,0,GUI_BLUE);
PROGBAR_SetBarColor(hBar,1,GUI_YELLOW);
}
// ----------------------------------------------- //
// ----------------------------------------------- //
void Listbox(void)
{
int i;
int Entries = countof(table)-1;
LISTBOX_Handle hlist;
int ySize = GUI_GetYSizeOfFont(&GUI_Font13B_1)*Entries;
hlist = LISTBOX_Create(table,10,10,60,ySize+10,WM_CF_SHOW);
for(i=0;i<Entries-1;i++)
{
GUI_Delay(500);
LISTBOX_IncSel(hlist);
WM_Exec();
}
for(i=0;i<Entries-1;i++)
{
GUI_Delay(500);
LISTBOX_DecSel(hlist);
WM_Exec();
}
}
//
//
void Button_Init(void)
{
hButton=BUTTON_Create(10,100,40,20,GUI_ID_OK,WM_CF_SHOW);//创建一个按钮
hbut1=BUTTON_Create(10,120,40,20,2,WM_CF_SHOW);//创建一个按钮
hbut2=BUTTON_Create(10,140,40,20,3,WM_CF_SHOW);//创建一个按钮
BUTTON_SetText(hButton, "Click");
BUTTON_SetText(hbut1, "Click");
BUTTON_SetText(hbut2, "Click");
}
//
//
void MessageBox(void)
{
WM_SetBkWindowColor(GUI_WHITE);
GUI_MessageBox("aa","bb",GUI_MESSAGEBOX_CF_MOVEABLE);
}
//
//
void Touch_Process(void)
{
// TIM3->CR1&=0xfe; //关闭定时器3
GUI_TOUCH_GetState(&STATE);
GUI_DispStringAt("x:", 0, 200);
GUI_DispDec(STATE.x, 3);
GUI_DispStringAt("y:", 0, 250);
GUI_DispDec(STATE.y, 3);
if (STATE.Pressed == 1)
{
GUI_CURSOR_SetPosition(STATE.x,STATE.y);
GUI_CURSOR_Show();
}
// TIM3->CR1|=0x01; //使能定时器3
}
//
//
void Button_Process(void)
{
switch( GUI_GetKey())
{
case 1:if(temp1==1)
{
temp1=0;
BUTTON_SetText(hButton,"yes");
}
else
{
temp1=1;
BUTTON_SetText(hButton,"no");
}
break;
case 2:if(temp2==1)
{
temp2=0;
BUTTON_SetText(hbut1,"yes");
}
else
{
temp2=1;
BUTTON_SetText(hbut1,"no");
}
break;
case 3:if(temp3==1)
{
temp3=0;
BUTTON_SetText(hbut2,"yes");
}
else
{
temp3=1;
BUTTON_SetText(hbut2,"no");
}
break;
case 4: if(temp4==1)
{
temp4=0;
BUTTON_SetText(hButton1, "Open LED");
}
else
{
temp4=1;
BUTTON_SetText(hButton1, "Close LED");
}
break;
case 5:
break;
}
}
//
void Frame(void)
{
hFrame = FRAMEWIN_Create("test", 0, WM_CF_SHOW, 80, 150, 80, 100);
GUI_Delay(10);
hButton1 = BUTTON_CreateAsChild(10, 20, 60, 30, hFrame, 4, WM_CF_SHOW);
BUTTON_SetText(hButton1, "1");
GUI_Delay(10);
hButton2 = BUTTON_CreateAsChild(10, 60, 60, 30, hFrame, 5, WM_CF_SHOW);
BUTTON_SetText(hButton2, "2");
GUI_Delay(10);
// WM_Paint(hButton2);
}
//
//
void Frame_Process(void)
{
}
//
//
int main(void)
{
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化
LED_Init();
Timerx_Init(71,1000);
StartTouch();
GUI_Init();
GUI_SetBkColor(GUI_WHITE);
GUI_SetColor(GUI_BLACK);
GUI_Clear();
GUI_SetFont(&GUI_Font8x16);
Button_Init();
// Progbar();
Listbox();
// MessageBox();
Frame();
while(1)
{
// PROGBAR_SetValue(hBar,bar/10);
GUI_Delay(10);
Touch_Process();
Button_Process();
}
}
以下是定时器里的程序,用于刷新触摸屏的坐标
#include "timer.h"
#include "led.h"
#include "gui.h"
//////////////////////////////////////////////////////////////////////////////////
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//Mini STM32开发板
//通用定时器 驱动代码
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2010/12/03
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 正点原子 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
extern int bar;
extern int temp4;
//定时器3中断服务程序
void TIM3_IRQHandler(void)
{
if(TIM3->SR&0X0001)//溢出中断
{
// LED1=!LED1;
GUI_TOUCH_Exec();
bar+=1;
if(bar>=1000)
{
bar=0;
}
if(temp4==1)
{
if(bar%100==0)
{
LED0=~LED0;
}
}
else
{
LED0=1;
}
}
TIM3->SR&=~(1<<0);//清除中断标志位
}
//通用定时器中断初始化
//这里时钟选择为APB1的2倍,而APB1为36M
//arr:自动重装值。
//psc:时钟预分频数
//这里使用的是定时器3!
void Timerx_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<1;//TIM3时钟使能
TIM3->ARR=arr; //设定计数器自动重装值//刚好1ms
TIM3->

SC=psc; //预分频器7200,得到10Khz的计数时钟
//这两个东东要同时设置才可以使用中断
TIM3->DIER|=1<<0; //允许更新中断
TIM3->DIER|=1<<6; //允许触发中断
TIM3->CR1|=0x01; //使能定时器3
MY_NVIC_Init(1,3,TIM3_IRQChannel,2);//抢占1,子优先级3,组2
}
//TIM3 PWM部分
//正点原子@ALIENTEK
//2010/6/2
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void PWM_Init(u16 arr,u16 psc)
{
//此部分需手动修改IO口设置
RCC->APB1ENR|=1<<1; //TIM3时钟使能
GPIOA->CRH&=0XFFFFFFF0;//PA8输出
GPIOA->CRH|=0X00000004;//浮空输入
GPIOA->CRL&=0X0FFFFFFF;//PA7输出
GPIOA->CRL|=0XB0000000;//复用功能输出
GPIOA->ODR|=1<<7;//PA7上拉
TIM3->ARR=arr;//设定计数器自动重装值
TIM3->

SC=psc;//预分频器不分频
TIM3->CCMR1|=7<<12; //CH2 PWM2模式
TIM3->CCMR1|=1<<11; //CH2预装载使能
TIM3->CCER|=1<<4; //OC2 输出使能
TIM3->CR1=0x8000; //ARPE使能
TIM3->CR1|=0x01; //使能定时器3
}
[/mw_shl_code]