📄 k90ti_lcd.c
字号:
void GUI_CursorOFF(U8 x, U8 y)
{
Display_Locate(0x00,x,y);
Display_Locate(0x00,x,y+1);
}
*/
#endif
/*
*****************************************************************************
* GUI_DispHexAt - 显示一个数据的十六进制值
* DESCRIPTION: -
* 最大长度4个
* @Param v:数据
* @Param x:X轴坐标
* @Param y:Y轴坐标 XY均是起点坐标 也就是数据最高字节坐标
* @Param Len:长度1--4
* @Return :
*
*****************************************************************************
*/
void GUI_DispHexAt(INT32U v, INT16U x, INT16U y, INT8U Len)
{
INT8U i;
INT8U HexData;
if(Len > 8){//限制范围
Len = 8;
}
for(i = 0; i < Len; i++){
HexData = v&0x0F;
v = v >>4;
if(HexData < 0x0A){
GUI_DispCharAt(HexData+'0',x+Char_XSIZE*(Len-1-i),y);
}else{
GUI_DispCharAt(HexData-0x0A+'A',x+Char_XSIZE*(Len-1-i),y);
}
}
}
//显示 bit的数据
void GUI_DispBitAt(INT8U v, INT16U x, INT16U y)
{
INT8U i;
for(i = 0; i < 8; i++){
if(v & 0x80){
GUI_DispCharAt('1',x+Char_XSIZE*i,y);
}else{
GUI_DispCharAt('0',x+Char_XSIZE*i,y);
}
v = v << 1;
}
}
/*
*****************************************************************************
* HBar - 显示一个垂直的进度条
* DESCRIPTION: -
* 附加有百分比显示
* @Param y0:进度条起点X轴坐标 0-->LCD_YSIZE
* @Param y1:进度条结束点X坐标 0-->LCD_YSIZE 必须大于y0 百分比显示于该坐标之后
* @Param x:进度条X轴坐标 0--LCD_X_BYTE_SIZE
* @Param percent:当前百分值 0-->100
* @Return :
*
*****************************************************************************
*/
void VBar(INT16U x, INT16U y0, INT16U y1,INT8U percent)
{
INT8U U8Temp;
INT16U Ypos;
float Center;
if(percent > 100){//防止上溢出
percent = 100;
}
Center = (y1-y0);
Center *= percent;
Center /= 100;
// U8Temp = (x1-x0)*percent/100;//这个计算做法在430上能用,但C51下似乎必须用浮点算
U8Temp = (INT8U)Center;
Display_Locate(0xFF, x, y0);
Display_Locate(0xFF, x, y1);
for(Ypos = 1; Ypos < U8Temp; Ypos++){
Display_Locate(0xBD, x, y0+Ypos);
}
for(Ypos = y0+U8Temp+1; Ypos < y1; Ypos++){
Display_Locate(0x81, x, Ypos);
}
}
//INT8U _CONST_ BarCode0[]={0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00};
//INT8U _CONST_ BarCode1[]={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
INT8U _CONST_ BarCode0[]={0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE};
void HBar(INT16U y, INT16U x0, INT16U x1,INT8U percent)
{
INT8U U8Temp;
INT8U U8A;
INT8U U8B;
INT16U i;
INT8U Width;
float Center;
Center = (x1-x0)*8;
Center *= percent;
Center /= 100;
// U8Temp = (x1-x0)*percent/100;//这个计算做法在430上能用,但C51下似乎必须用浮点算
U8Temp = (INT8U)Center;
U8A = U8Temp / 8;
U8B = U8Temp % 8;
/*
if(U8A){
for(i = 0; i < U8A; i++){
for(Width = 0; Width < 8; Width++){
Display_Locate(0xFF, x0 + i, y+Width);
}
}
}else{
for(Width = 0; Width < 8; Width++){
Display_Locate(0x80, x0, y+Width);
}
}
*/
//------------------
for(i = 0; i < U8A; i++){
Display_Locate(0xFF, x0+i, y);
Display_Locate(0x00, x0+i, y+1);
for(Width = 2; Width < 6; Width++){
Display_Locate(0xFF, x0+i, y+Width);
}
Display_Locate(0x00, x0+i, y+6);
Display_Locate(0xFF, x0+i, y+7);
}
if (U8A == x1-x0){
U8Temp = BarCode0[U8B] | 0x01;
}else if(U8A == 0){
U8Temp = BarCode0[U8B] | 0x80;
}else{
U8Temp = 0xFF;
}
i = x0+ U8A;
Display_Locate(0xFF, i, y);
Display_Locate(0x00, i, y+1);
for(Width = 2; Width < 6; Width++){
Display_Locate(U8Temp, i, y+Width);
}
Display_Locate(0x00, i, y+6);
Display_Locate(0xFF, i, y+7);
//------------------
for(i = x0+U8A+1; i < x1-1; i++){
Display_Locate(0xFF, i, y);
Display_Locate(0x00, i, y+1);
for(Width = 2; Width < 6; Width++){
Display_Locate(0x00, i, y+Width);
}
Display_Locate(0x00, i, y+6);
Display_Locate(0xFF, i, y+7);
}
if (U8A != x1-x0){
i = x1-1;
Display_Locate(0xFF, i, y);
Display_Locate(0x01, i, y+1);
for(Width = 2; Width < 6; Width++){
Display_Locate(0x01, i, y+Width);
}
Display_Locate(0x01, i, y+6);
Display_Locate(0xFF, i, y+7);
}
/*
if(U8A){
for(Width = 0; Width < 8; Width++){
Display_Locate(0x80, x0, y+Width);
}
}
U8Temp = (INT8U)Center;
U8Temp = U8Temp % 8;
if(U8Temp){
}
for(i = x0+U8Temp+1; i < x1; i++){
Display_Locate(0xFF, i, y);
Display_Locate(0x00, i, y+1);
for(Width = 2; Width < 6; Width++){
Display_Locate(0x00, i, y+Width);
}
Display_Locate(0x00, i, y+6);
Display_Locate(0xFF, i, y+7);
}
*/
}
/*
*****************************************************************************
* GUI_DispDecAt - 显示十进制数值
* DESCRIPTION: -
* 处理长度最多5个数字(因为INT16S--->+- 32768)
* @Param v:显示的数据
* @Param x:X轴坐标
* @Param y:Y轴坐标 XY 均是起点位置坐标 也就是数值最高位的坐标
* @Param Len:指定的显示长度1--5内正负号跟随于最高位的数字前面 更高的用空白显示
5位时:
+12345
+12
-235
* @Return :
*
*****************************************************************************
*/
void GUI_DispDecSAt(INT16S v, INT16U x, INT16U y, INT8U Len)
{
#define IsPositive 0
#define IsNegative 1
#define IsZero 2
INT8U i;
INT8U CharBuf[5];
INT8U HighByte;
INT8U Flag;
Len += 1;//预留 + -符号
Flag = 0;
if(v < 0){
v = -v;
Flag = IsNegative;
}else if (v == 0){
Flag = IsZero;
}else{
Flag = IsPositive;
}
HighByte = 0;
for(i = 0; i < 5; i++){
CharBuf[i] = (INT8U)(v%10);
v = v/10;
if(CharBuf[i]){
HighByte = i;
}
}
//第0位无论如何也显示
i = 0;
GUI_DispCharAt(CharBuf[i]+'0',x+((Len-1)-i)*Char_XSIZE,y);
for(i = 1; i < Len; i++){
if(i > HighByte){
GUI_DispCharAt(' ',x+((Len-1)-i)*Char_XSIZE,y);
}else{
GUI_DispCharAt(CharBuf[i]+'0',x+((Len-1)-i)*Char_XSIZE,y);
}
}
if(IsZero == Flag){
GUI_DispCharAt(' ',x+((Len-2)-HighByte)*Char_XSIZE,y);
}else if(IsPositive == Flag){
GUI_DispCharAt('+',x+((Len-2)-HighByte)*Char_XSIZE,y);
}else{
GUI_DispCharAt('-',x+((Len-2)-HighByte)*Char_XSIZE,y);
}
}
/*
*****************************************************************************
* GUI_DispDecAt - 显示十进制数值
* DESCRIPTION: -
* 处理长度最多5个数字(因为INT16S--->+- 32768)
* @Param v:显示的数据
* @Param x:X轴坐标
* @Param y:Y轴坐标 XY 均是起点位置坐标 也就是数值最高位的坐标
* @Param Len:指定的显示长度1--5内 高位用空格填充
5位时:
12345
12
235
* @Return :
*
*****************************************************************************
*/
void GUI_DispDecAt(INT16U v, INT16U x, INT16U y, INT8U Len)
{
INT8U i;
INT8U CharBuf[5];
INT8U HighByte;
HighByte = 0;
for(i = 0; i < 5; i++){
CharBuf[i] = (INT8U)(v%10);
v = v/10;
if(CharBuf[i]){
HighByte = i;
}
}
//第0位无论如何也显示
i = 0;
GUI_DispCharAt(CharBuf[i]+'0',x+((Len-1)-i)*Char_XSIZE,y);
for(i = 1; i < Len; i++){
if(i > HighByte){
GUI_DispCharAt(' ',x+((Len-1)-i)*Char_XSIZE,y);
}else{
GUI_DispCharAt(CharBuf[i]+'0',x+((Len-1)-i)*Char_XSIZE,y);
}
}
}
/*
*****************************************************************************
* GUI_DrawIcon - 制定位置显示一个图标 图标数据区的开始2个字节指明该图标大小
* DESCRIPTION: -
*
* @Param x0:X轴坐标
* @Param y0:Y轴坐标 注意边界!
* @Param Ico:图标数据
* @Return :
* ----
*****************************************************************************
*/
void GUI_DrawIcon(INT8U _CONST_ *Ico,INT16U x0,INT16U y0)
{
INT16U i;
INT16U j;
INT16U Count;
INT16U ICO_XLen;
INT16U ICO_YLen;
ICO_XLen = Ico[0];//X Byte len
ICO_YLen = Ico[1];//Y Byte len
Count = 2;
for(j = 0; j < ICO_YLen; j++){
if(y0 + j < LCD_YSIZE){
for(i = 0; i < ICO_XLen; i++){
if(x0 + i < LCD_X_BYTE_SIZE){
Display_Locate(Ico[Count++],x0+i,y0+j);
}else{
Count++;//如果越界 只是丢弃数据不显示
}
}
}else{
// Count++;//如果越界 只是丢弃数据不显示
return;
}
}
}
void GUI_Test(void)
{
INT8U x;
INT8U y;
INT16U Key;
GUI_Init();
// for(y = 0; y <= 100;y++){
// Display_Locate(0xFF, 0,y);
// }
// Display_ASCII('A',0,0);
// Display_ASCII('B',1,0);
// Display_ASCII('C',1,8);
/*
for(x = 0; x < 8; x++){
y = (1<<x);
GUI_DispBitAt(y, 0,0);
GUI_DispHexAt(y, 0,Char_YSIZE*4,2);
}
for(y = 0; y <= 100;y++){
for(x = 0; x <= 100;x++){
//VBar(2,10,210,x);
HBar(10, 2,22,x);
LCD_DelayMs(300);
}
LCD_DelayMs(300);
}
*/
// GUI_SetFontZoom(GUI_TEXTMODE_ZOOMx2);
// GUI_DispStringAt("ABFC",0,0);
// GUI_DispStringAt("String测试",0,Char_YSIZE*7);
// Display_Locate(0x01, 0,0);
// Display_Locate(0x02, 1,1);
// Display_Locate(0xFF, 0,1);
// for(x = 0; x < 8; x++){
// Display_Locate((1<<x), 0,0);
// }
GUI_SetFontZoom(GUI_TEXTMODE_ZOOMx1);
GUI_DispStringAt("String",0,Char_YSIZE*13);
// Display_Chinese(0xD5EF,10,0);
GUI_DispStringAt("String测试中..",0,Char_YSIZE*2);
GUI_DispStringAt("AString测试中..",10,480-32);
Display_Locate(0xFF, 0,0);
while(1){
for(y = 0; y <= 100;y++){
GUI_DispDecAt(y,0,0,3);
SIM_Delay(1);
Key = GUI_GetKey();
if(Key){
GUI_DispHexAt(Key,0,48,4);
}
}
}
// Display_Locate(0xFF, 0,1);
Display_Locate(0xFF, LCD_X_BYTE_SIZE-1,0);
Display_Locate(0xFF, 0,(LCD_YSIZE-1));
Display_Locate(0xFF, LCD_X_BYTE_SIZE-1,LCD_YSIZE-1);
for(x = 0; x < (LCD_XSIZE/8); x++){
Display_Locate(0xAA, x,0);
Display_Locate(0xAA, x,1);
Display_Locate(0xAA, x,2);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -