📄 gui.c
字号:
#include <at89c51xd2.h>
#include "common.h"
#include "hanzi.h"
#include "lm3228.h"
#include "ds18b20.h"
#include "PCA_9555.h"
#include "ds1302.h"
#include "LTC1860.h"
#include "stdio.h"
#include "lct1451.h"
#define KeyTabLen 13
extern uchar data keyvalue[2];
extern bit key_flag;
volatile uchar data zhen_temp[4]; //
volatile uchar data xiaoshu_temp[5]; //
extern bit ds18b20_flag;
extern bit dot_dis;
bit timeout=0;
uchar data time_count=0;
uchar data keyfuncindex=12;
uchar data ds18b20_1_dis,ds18b20_2_dis,ds18b20_3_dis,ds18b20_4_dis;
//函数申明
void FunctionDisp(void);
void Config(void);
void Serial(void);
void HelpInf(void);
void Temprature(void);
void Time(void);
void AD(void);
void CaculatorDisp(void);
void TempratureDisp(void);
void AD_Disp(void);
void Caculator(void);
void TimeDisp(void);
void gui_init(void);
void time_init(void);
void channel_display(void);
//结构定义
typedef struct
{
uchar KeyTab_MenuIndex; //当前状态索引号 //uchar KeyTab_MaxItems; //本级菜单最大条目数
uchar KeyTab_PressDown; //按下"向下"键时转向的状态索引号
uchar KeyTab_PressUp; //按下"向上"键时转向的状态索引号
uchar KeyTab_PressOk; //按下"回车"键时转向的状态索引号
uchar KeyTab_PressEsc; //按下"返回"键时转向的状态索引号
void (*CurrentOperate)(); //当前状态应该执行的功能操作
}KeyTabStruct;
void (*KeyFuncPtr)(); //按键功能指针
//结构数组
KeyTabStruct xdata KeyTab[KeyTabLen]={
{0,1,3,4,12,(*FunctionDisp)},
{1,2,1,1,0,(*Config)},
{2,3,1,2,0,(*Serial)},
{3,0,2,3,0,(*HelpInf)},
{4,5,7,8,0,(*Temprature)},
{5,6,4,9,0,(*Time)},
{6,7,5,10,0,(*AD)},
{7,4,6,11,0,(*Caculator)},
{8,8,8,8,4,(*TempratureDisp)},
{9,9,9,9,5,(*TimeDisp)},
{10,10,10,10,6,(*AD_Disp)},
{11,11,11,11,7,(*CaculatorDisp)},
{12,11,0,12,12,(*gui_init)}
};
//
void delay(unsigned int time)
{
unsigned int i,j;
for(i=0;i<time;i++)
for(j=0;j<200;j++);
}
//开机动画
void open_picture_init(void)
{
uchar i;//data
hanzi_display(open_picture,sizeof(open_picture),0x00,0x10);
for(i=0;i<30;i++)
{
if(!key_flag)
{
set_display_area(GRAPHIC_ADDRESS,0x00+i,0x00);
delay(100);
}
else
break;
}
}
//开机密码
/*void open_code(void)
{
uint data key_code=0;
uchar data i;
bit code_ok=0;
uchar code *str="Please input code:";
uchar code *str1="code error!:";
clrgraphic();
set_point(SET_ADDRESS_POINTER,0x00,0x31);
string_display_code(0,str,0x00,0x31);
while(!code_ok)
{
for(i=0;i<4;i++)
{
while(!key_flag)
{
}
{
key_flag=0;
readregister(keyvalue);
text_display('*'); // ,0x00,0x00
key_code=key_code*10+(keyvalue[0]&0x0f);
}
}
if(key_code==124)
code_ok=1;
else
{ clrtext();
set_point(SET_ADDRESS_POINTER,0x00,0x31);
string_display_code(0,str1,0x00,0x31);
while(!key_flag)
{
}
key_flag=0;
key_code=0;
set_point(SET_ADDRESS_POINTER,0x00,0x31);
string_display_code(0,str,0x00,0x31);
}
}
}*/
//界面初始化
void gui_init(void)
{
Picture pic1={64,32,menu1}; //data
Picture pic2={64,32,menu2}; //data
Picture pic3={64,32,menu3}; //data
Picture pic4={64,32,menu4};//data
Picture *point1=&pic1;
clrgraphic();
clrtext();
picture_display(point1,0x00,0x00,0);
point1=&pic2;
picture_display(point1,0x08,0x00,0);
point1=&pic3;
picture_display(point1,0x10,0x00,0);
point1=&pic4;
picture_display(point1,0x18,0x00,0);
hanzi_display(cancel,sizeof(cancel),0x1c,0x1e);
hanzi_display(ok,sizeof(ok),0x00,0x1e);
}
//得到键
void get_inputkey(void)
{
switch(keyvalue[0]&0x0f)
{
case 0x03: //向上键
keyfuncindex=KeyTab[keyfuncindex].KeyTab_PressUp;
break;
case 0x07: //向下键
keyfuncindex=KeyTab[keyfuncindex].KeyTab_PressDown;
break;
case 0x0b: //功能键
keyfuncindex=0;
break;
case 0x0c: //cancel
keyfuncindex=KeyTab[keyfuncindex].KeyTab_PressEsc;
break;
case 0x0e: //帮助键
break;
case 0x0f: //ok键
keyfuncindex=KeyTab[keyfuncindex].KeyTab_PressOk;
break;
default:
break;
}
KeyFuncPtr=KeyTab[keyfuncindex].CurrentOperate;
(*KeyFuncPtr)();
}
//
void FunctionDisp(void)
{
Picture pic1={64,32,menu1};
Picture pic2={64,32,menu2};
Picture pic3={64,32,menu3};
Picture pic4={64,32,menu4};
Picture *point2=&pic1;
clrgraphic();
clrtext();
picture_display(point2,0x00,0x00,1);
point2=&pic2;
picture_display(point2,0x08,0x00,0);
point2=&pic3;
picture_display(point2,0x10,0x00,0);
point2=&pic4;
picture_display(point2,0x18,0x00,0);
}
//
void Config(void)
{
Picture data pic1={64,32,menu1};
Picture data pic2={64,32,menu2};
Picture data pic3={64,32,menu3};
Picture data pic4={64,32,menu4};
Picture *point1=&pic1;
picture_display(point1,0x00,0x00,0);
point1=&pic2;
picture_display(point1,0x08,0x00,1);
point1=&pic3;
picture_display(point1,0x10,0x00,0);
point1=&pic4;
picture_display(point1,0x18,0x00,0);
}
//
void Serial(void)
{
Picture data pic1={64,32,menu1};
Picture data pic2={64,32,menu2};
Picture data pic3={64,32,menu3};
Picture data pic4={64,32,menu4};
Picture *point1=&pic1;
picture_display(point1,0x00,0x00,0);
point1=&pic2;
picture_display(point1,0x08,0x00,0);
point1=&pic3;
picture_display(point1,0x10,0x00,1);
point1=&pic4;
picture_display(point1,0x18,0x00,0);
}
//
void HelpInf(void)
{
Picture data pic1={64,32,menu1};
Picture data pic2={64,32,menu2};
Picture data pic3={64,32,menu3};
Picture data pic4={64,32,menu4};
Picture *point1=&pic1;
picture_display(point1,0x00,0x00,0);
point1=&pic2;
picture_display(point1,0x08,0x00,0);
point1=&pic3;
picture_display(point1,0x10,0x00,0);
point1=&pic4;
picture_display(point1,0x18,0x00,1);
}
//
void Temprature(void)
{
Picture data pic1={48,24,menu5};
Picture data pic2={48,24,menu6};
Picture data pic3={48,24,menu7};
Picture data pic4={48,24,menu8};
Picture *point1=&pic1;
clrgraphic();
clrtext();
picture_display(point1,0x00,0x04,1);
point1=&pic2;
picture_display(point1,0x00,0x07,0);
point1=&pic3;
picture_display(point1,0x00,0x0a,0);
point1=&pic4;
picture_display(point1,0x00,0x0d,0);
}
//
void Time(void)
{
Picture data pic1={48,24,menu5};
Picture data pic2={48,24,menu6};
Picture data pic3={48,24,menu7};
Picture data pic4={48,24,menu8};
Picture *point1=&pic1;
clrgraphic();
clrtext();
picture_display(point1,0x00,0x04,0);
point1=&pic2;
picture_display(point1,0x00,0x07,1);
point1=&pic3;
picture_display(point1,0x00,0x0a,0);
point1=&pic4;
picture_display(point1,0x00,0x0d,0);
}
//
void AD(void)
{
Picture data pic1={48,24,menu5};
Picture data pic2={48,24,menu6};
Picture data pic3={48,24,menu7};
Picture data pic4={48,24,menu8};
Picture *point1=&pic1;
clrgraphic();
clrtext();
picture_display(point1,0x00,0x04,0);
point1=&pic2;
picture_display(point1,0x00,0x07,0);
point1=&pic3;
picture_display(point1,0x00,0x0a,1);
point1=&pic4;
picture_display(point1,0x00,0x0d,0);
}
//
void Caculator(void)
{
Picture data pic1={48,24,menu5};
Picture data pic2={48,24,menu6};
Picture data pic3={48,24,menu7};
Picture data pic4={48,24,menu8};
Picture *point1=&pic1;
clrgraphic();
clrtext();
picture_display(point1,0x00,0x04,0);
point1=&pic2;
picture_display(point1,0x00,0x07,0);
point1=&pic3;
picture_display(point1,0x00,0x0a,0);
point1=&pic4;
picture_display(point1,0x00,0x0d,1);
}
//
void TempratureDisp(void)
{
uchar data temp;
uchar code *str1="Do you want to display 4 channel temperature at the same time:\nPlease press cancel for no or ok for yes";
uchar code *str2="Please input the num of channel(eg:1,2,3,4):";
Picture data pic1={64,32,menu1};
Picture data pic2={64,32,menu2};
Picture data pic3={64,32,menu3};
Picture data pic4={64,32,menu4};
Picture *point1=&pic1;
clrgraphic();
picture_display(point1,0x00,0x00,0);
point1=&pic2;
picture_display(point1,0x08,0x00,0);
point1=&pic3;
picture_display(point1,0x10,0x00,0);
point1=&pic4;
picture_display(point1,0x18,0x00,0);
time_init();
clrtext();
while(!key_flag)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -