论坛元老
 
- 积分
- 3347
- 金钱
- 3347
- 注册时间
- 2013-4-10
- 在线时间
- 333 小时
|
发表于 2016-3-21 02:18:35
|
显示全部楼层
本帖最后由 likunxue 于 2016-3-21 02:22 编辑
计算出来的嘛
/********************************************************************************************
函 数 名: 在显示屏上生成软键盘
调 用: G811_KEY(u8 ats)
参 数: ats
反 回 值: 0无效, 1 有效
********************************************************************************************/
int UGI_KEY(u8 tem)
{
const int Kuan = 75; //按扭宽度
const int Gao = 40; //按扭高度50
const int XDF = 40; //软键盘X向初点坐标
const int YDF = 300; //软键盘Y向初点起始坐标
const int DBF = 5; //间距
const int KUAN = ((Kuan+ DBF) * 9 )+DBF;//软键盘窗体宽
const int GAO = ((Gao +DBF) * 3)+DBF;//软键盘窗本高
const int Dolor = MAKE_RGB565(236,233,216);//软键盘窗体底色
const char DL[25]={0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2};
const char DJ[25]={0,1,2,3,4,5,6,7,8,0,1,2,3,4,5,6,7,8,0,1,2,3,4,5,7};
int i;
BOX_T r;
const int Solor_tab[] = //字体颜色
{
RED,RED,RED,RED,WHITE,WHITE,WHITE,WHITE,GREEN,
RED,RED,RED,RED,WHITE,WHITE,WHITE,WHITE,GREEN,
WHITE,RED,RED,RED,WHITE,BROWN,RED,
};
const int color_tab[] = //按扭颜色
{
LIGHTBLUE,LIGHTBLUE,LIGHTBLUE,LIGHTBLUE,
DGRAY,DGRAY,DGRAY,DGRAY,BROWN,
LIGHTBLUE,LIGHTBLUE,LIGHTBLUE,LIGHTBLUE,
DGRAY,DGRAY,DGRAY,DGRAY,BRRED,
RED,LIGHTBLUE,LIGHTBLUE,LIGHTBLUE,DGRAY,LGRAYBLUE,LIGHTBLUE,
};
const char * color_text[] =
{
"X","Y","Z","A","6","7","8","9","DEL",
"C","G","N","S","2","3","4","5","Ent",
"OFF","/",",","=", "1","0",".",
};
if(tem ==0) //初始化软键盘
{
LCD_DrawCirRec(XDF-5,YDF,KUAN,GAO,Dolor,3,1); //清圆角矩形
LCD_DrawCirRec(XDF-5,YDF,KUAN,GAO,BRRED,3,0); //清圆角矩形
r.Kuan = Kuan;
r.Gao = Gao;
r.fill_flag = 1;
r.attrib = 1;
for(i =0; i<25; i++)
{
r.x = XDF + (DBF + Kuan) * DJ; // 计算X起点坐标
r.y = YDF + (DBF +(DBF + Gao) * DL); // 计算Y向起点坐标
r.Color = color_tab;
r.Title = color_text;
r.size = FONT_32 ; //字体
r.Solor = Solor_tab; //字体颜色
if(i==17)r.Gao = Gao * 2 +DBF; //画确认键高度是两个按键的值加
else r.Gao = Gao;
if(i ==23)r.Kuan = r.Kuan = Kuan * 2 + DBF; //宽度是两个按扭的值
else r.Kuan = Kuan;
GUI_box(&r); //画按扭
}
}
else{ //读键值
if(G811_KEY_OUT(XDF-5,YDF,KUAN,GAO) != 0) //在软键盘内有键被按下了
{
r.Kuan = Kuan;
r.Gao = Gao;
r.fill_flag = 1;
r.attrib = 1;
r.size = FONT_32 ; //字体
for(i =0; i<25; i++)
{
r.x = XDF + (DBF + Kuan) * DJ; // 计算X起点坐标
r.y = YDF + (DBF +(DBF + Gao) * DL); // 计算Y向起点坐标
r.Color = color_tab;
r.Title = color_text;
if(i==17)r.Gao = Gao * 2 +DBF; //画确认键高度是两个按键的值加
else r.Gao = Gao;
if(i ==23)r.Kuan = r.Kuan = Kuan * 2 + DBF; //宽度是两个按扭的值
else r.Kuan = Kuan;
if(G811_KEY_OUT(r.x,r.y,r.Kuan,r.Gao ) !=0) //判断当前键是不是被按下
{
r.attrib = 0;
r.Dolor = GUI.add_color(5,BRRED); //处理按键被按下的颜色
GUI_box(&r); //画按扭被按下状态
EPPK();
while(G811_KEY_OUT(r.x,r.y,r.Kuan,r.Gao) != 0); //等按键放开
r.attrib = 1;
r.Solor = Solor_tab;//字体颜色
GUI_box(&r);//重画按扭状态
return i;//反回键值
}
}
}
}
return 0xff;
}
|
|