忙了几个晚上(白天赶项目加班)终于做了几个计算器界面出来,效果还行,但和当初自己设想的一个完整的计算器程序还相差甚远,没来得及加入触摸和算法,只有界面及换肤功能,暂时充当GUI部分的作业吧。我以后一定会补足,抱歉了...
写这个其实是受Demo程序的影响,但是用TI的库去做单一的项目会包含很多并不需要的东西,MCU时间和资源会有点浪费,但是它们确实好用。
本程序的大致流程是:在驱动屏幕的基础上,写两个文件,一个用来定义,创建和显示刷新按钮控件,一个用来定义,创建和显示刷新标签控件,由于只是个简单示例而且计算器的UI也很简单,所以两个控件的属性和方法都很少。
#define BUTTON_MAX_NUM 30
#define clFont WFONT_COLOR
#define clBtn WBACK_COLOR
////status位定义
//#define Enable 0x01 //使能
//#define Visable 0x02 //可见
//#define Refresh 0x04 //需要刷新
//#define Fouse 0x08 //当前焦点
//#define Ico 0x10 //是否使用图形
//#define Down 0x20 //按下状态
//
typedef struct
{
unsigned char id ; // 识别号
unsigned int x ; // 起始位置横坐标x
unsigned int y ; // 起始位置纵坐标y
unsigned char width ; // 宽度
unsigned char high ; // 高度
unsigned char property ; // 属性
unsigned short font_color ; // 文字颜色
unsigned short button_color ; // 按钮颜色
unsigned char image_index ; // 按钮图像编号
unsigned char status ; // 状态
unsigned char caption[10] ; // 字符串
} BUTTON_DIG ; // 按钮控件
extern BUTTON_DIG Btn_Dig[30];
extern unsigned char CreateButtonDig(BUTTON_DIG newbtn);
extern void Refresh_Btn_Dig(void);
extern void ButtonDig_SetRefresh(void);
其实就是两个结构体组,我只简单写了创建、刷新显示和设置刷新三个方法,只要初始化或设置好结构体的数据,创建并调用刷新就好了,如果需要改变,只要修改参数后重置status.Refresh位,就会在下次刷新检测时更新,可以每个按钮单独刷新,不会有太多的闪烁感。
//status位定义
#define Enable 0x01 //使能
#define Visable 0x02 //可见
#define Refresh 0x04 //需要刷新
#define Fouse 0x08 //当前焦点
#define Ico 0x10 //是否使用图形
#define Down 0x20 //按下状态
#define bReadOnly 0x40
这两个控件支持位图,只需要把位图作为资源加载进去,设置status.Ico属性,并把位图指针放入unsigned char *btn_p0=btn00; unsigned char *btn_p1=btn10;里面就好了。
所以可以支持无图和位图两种模式
你可以在定时其中执行
Refresh_Btn_Dig();
Refresh_Label_Dig();
两个函数,如果一旦其中那个控件的status.Refresh为1需要刷新,就会更新它。
源程序下面附上,只要TI官方库按默认路径(C:\StellarisWare)安装,即可在任意目录运行。我用的Keil4.22和jlink编译仿真,有问题欢迎您更提出
视频