STM32_WGY/User/display.c

523 lines
9.5 KiB
C
Raw Permalink Normal View History

2025-04-03 15:29:20 +08:00
#include "includes.h"
// <20><>ʾһ<CABE><D2BB>8<EFBFBD><38><EFBFBD><EFBFBD>
// pos: Fld1Ϊ0~4<><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><D2A3><EFBFBD>ֵ<EFBFBD><D6B5>1~5)
void Disp_DispChar(u8 pos, char c)
{
if(pos == 0)
HT1621_WriteChar(c, 11, 21, 23, 14, 13, 12, 22);
else if(pos == 1)
HT1621_WriteChar(c, 31, 41, 43, 34, 33, 32, 42);
else if(pos == 2)
HT1621_WriteChar(c, 51, 61, 63, 54, 53, 52, 62);
else if(pos == 3)
HT1621_WriteChar(c, 71, 81, 83, 74, 73, 72, 82);
}
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
void Disp_Fld1Text(s8 *text)
{
u8 len = strlen(text), i = 0, c;
if(len < 4) // ǧλ
c = ' ';
else
c = text[i++];
Disp_DispChar(0, c);
if(len < 3) // <20><>λ
c = ' ';
else
c = text[i++];
Disp_DispChar(1, c);
if(len < 2) // ʮλ
c = ' ';
else
c = text[i++];
Disp_DispChar(2, c);
if(len < 1) // <20><>λ
c = ' ';
else
c = text[i++];
Disp_DispChar(3, c);
}
void Disp_Fld1PointOff()
{
HT1621_WriteBuf(24, 0);
HT1621_WriteBuf(44, 0);
HT1621_WriteBuf(64, 0);
}
// <20><>ʾС<CABE><D0A1><EFBFBD><EFBFBD>
void Disp_Fld1PointOn(u8 pos)
{
Disp_Fld1PointOff();
if(pos == 1) // С<><D0A1><EFBFBD><EFBFBD>
HT1621_WriteBuf(24, 1);
else if(pos == 2) // С<><D0A1><EFBFBD><EFBFBD>
HT1621_WriteBuf(44, 1);
else if(pos == 3) // С<><D0A1><EFBFBD><EFBFBD>
HT1621_WriteBuf(64, 1);
}
//void Disp_Fld1PointOff()
//{
// HT1621_WriteBuf(124, 0);
// HT1621_WriteBuf(104, 0);
// HT1621_WriteBuf(84, 0);
// HT1621_WriteBuf(64, 0);
//}
// <20><>ʾ<EFBFBD><CABE>λ<EFBFBD>л<EFBFBD>
void Disp_SwitchDiffUnit(TDiffUnit unit)
{
Disp_Fld1UnitOff();
// if(unit == UNIT_KPA)
// HT1621_WriteBuf(161, 1);
// else if(unit == UNIT_MMH2O)
// HT1621_WriteBuf(294, 1);
// else // UNIT_INH2O
// HT1621_WriteBuf(144, 1);
HT1621_WriteBuf(131, 1);//D
HT1621_WriteBuf(84, 1); // K
HT1621_WriteBuf(94, 1);//PA
}
void Disp_SwitchPresUnit(TPresUnit unit)
{
Disp_Fld1UnitOff();
// HT1621_WriteBuf(163, 1);
// HT1621_WriteBuf(164, 1);
HT1621_WriteBuf(93, 1); // MPA
HT1621_WriteBuf(132, 1); //P
}
void Disp_SwitchTempUnit(TTempUnit unit)
{
Disp_Fld1UnitOff();
// HT1621_WriteBuf(162, 1);
HT1621_WriteBuf(133, 1); //T
HT1621_WriteBuf(92, 1); // <20><>
}
void Disp_SwitchVacuUnit(TVacuUnit unit)
{
Disp_Fld1UnitOff();
//HT1621_WriteBuf(164, 1);
HT1621_WriteBuf(131, 1);//D
HT1621_WriteBuf(94, 1);//PA
}
void Disp_Fld1UnitOff()
{
// HT1621_WriteBuf(294, 0); // mmH2O
// HT1621_WriteBuf(161, 0); // kPa
// HT1621_WriteBuf(162, 0); // <20><>
// HT1621_WriteBuf(163, 0); // M
// HT1621_WriteBuf(164, 0); // Pa
// HT1621_WriteBuf(144, 0); // inH2O
HT1621_WriteBuf(94, 0); // Pa
HT1621_WriteBuf(84, 0); // K
HT1621_WriteBuf(92, 0); // <20><>
HT1621_WriteBuf(93, 0); // MPa
HT1621_WriteBuf(131, 0);//D
HT1621_WriteBuf(132, 0); //P
HT1621_WriteBuf(133, 0); //T
}
// <20><>ʾͨ<CABE><CDA8><EFBFBD>л<EFBFBD>
void Disp_ChannelOn(uint8_t channel)
{
// Disp_ChannelOff();
// if(channel == 1)
// HT1621_WriteBuf(151, 1);
// else if(channel == 2)
// HT1621_WriteBuf(152, 1);
// else if(channel == 3)
// HT1621_WriteBuf(153, 1);
// else if(channel == 4)
// HT1621_WriteBuf(154, 1);
}
void Disp_ChannelOff()
{
// HT1621_WriteBuf(151, 0); // 1
// HT1621_WriteBuf(152, 0); // 2
// HT1621_WriteBuf(153, 0); // 3
// HT1621_WriteBuf(154, 0); // 4
}
// <20><>ʾҺԴ
void Disp_SwitchSource(TDispSource src)
{
}
void Disp_WriteNeedle(u8 val)
{
// static uint8_t last_val = 0;
// const uint16_t pinCom[51] =
// {
// 292, 291,
// 281, 282, 283, 284, 274, 273, 272, 271,
// 261, 262, 263, 264, 254, 253, 252, 251,
// 241, 242, 243, 244, 234, 233, 232, 231,
// 221, 222, 223, 224, 214, 213, 212, 211,
// 201, 202, 203, 204, 194, 193, 192, 191,
// 181, 182, 183, 184, 174, 173, 172, 171,
// 311
// };
//
// // <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
// if(last_val < 51)
// HT1621_WriteBuf(pinCom[last_val], 0);
// else
// HT1621_WriteBuf(pinCom[50], 0);
// // д<>µ<EFBFBD>ָ<EFBFBD><D6B8>
// if(val < 51)
// HT1621_WriteBuf(pinCom[val], 1);
// else
// HT1621_WriteBuf(pinCom[50], 1);
//
// // <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>λ<EFBFBD><CEBB>
// last_val = val;
}
// д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void Disp_WriteBattery(u8 val)
{
HT1621_WriteBuf(101, val <= 1); //S15
HT1621_WriteBuf(111, val >= 0); //S14
HT1621_WriteBuf(103, val >= 1); //S10
HT1621_WriteBuf(102, val >= 2); //S11
HT1621_WriteBuf(113, val >= 3); //S12
HT1621_WriteBuf(112, val >= 4); //S13
}
// д<>ź<EFBFBD>ǿ<EFBFBD><C7BF>
void Disp_WriteStrength(u8 val)
{
if(val>0)
HT1621_WriteBuf(124, 1);
HT1621_WriteBuf(123, val >= 1);//S6
HT1621_WriteBuf(122, val >= 2);//S5
HT1621_WriteBuf(121, val >= 3);
// HT1621_WriteBuf(341, val >= 4);
}
// дͨѶ״̬
void Disp_WriteCommunication(u8 val)
{
HT1621_WriteBuf(134, val >= 1);//DWON
HT1621_WriteBuf(104, val >= 1);//UP
}
// д<>澯״̬
void Disp_WriteAlarm(u8 val)
{
}
// д<><D0B4><EFBFBD><EFBFBD>״̬
void Disp_WriteError(u8 val)
{
}
// д<><D0B4>װ״̬
void Disp_WriteFill(u8 val)
{
}
// д<><D0B4><EFBFBD><EFBFBD>״̬
void Disp_WritePower(u8 val)
{
// HT1621_WriteBuf(324, val != 0);
}
// дRF״̬
void Disp_WriteRF(u8 val)
{
}
// дGPS״̬
void Disp_WriteGPS(u8 val)
{
}
// <20><><EFBFBD><EFBFBD>
void Disp_Clear()
{
memset(&VideoBuf, 0, sizeof(VideoBuf));
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸
void Disp_SetBlinkVisible(u8 visible)
{
VideoBuf.blink_visible = visible;
}
void Disp_Fld1Blink(u8 blink)
{
VideoBuf.fld1_blink = blink;
}
void Disp_BatteryBlink(u8 blink)
{
VideoBuf.battery_blink = blink;
}
// ********************************************
// <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD>ʵ<EFBFBD><CAB5>
// ********************************************
// <20><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD>ʾ
void Disp_SetCursor(u8 pos, u8 width)
{
VideoBuf.cursor_pos = pos;
VideoBuf.cursor_width = width;
}
void Disp_ClearCursor()
{
VideoBuf.cursor_pos = 0;
VideoBuf.cursor_width = 0;
}
// ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ˢ<><CBA2><EFBFBD><EFBFBD>ʾ
void SelectBox_Refresh(TSelectBox *pBox)
{
u8 i;
for(i = 0; i < strlen(pBox->items[pBox->idx]) && i < pBox->width; i++)
Disp_DispChar(pBox->pos + i, pBox->items[pBox->idx][i]);
for(; i < pBox->width; i++)
Disp_DispChar(pBox->pos + i, ' ');
}
// <20><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>
void SelectBox_Create(TSelectBox *pBox, u8 pos, u8 width, u8 count, const char items[][5], u8 idx)
{
u8 i;
memset(pBox, 0, sizeof(TSelectBox));
pBox->pos = pos;
pBox->width = width;
pBox->count = count;
for(i = 0; i < count; i++)
strcpy(pBox->items[i], items[i]);
pBox->idx = idx;
// ˢ<><CBA2><EFBFBD><EFBFBD>ʾ
SelectBox_Refresh(pBox);
}
// <20><><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void SelectBox_ReadOnly(TSelectBox *pBox)
{
pBox->read_only = 1;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void SelectBox_Hide(TSelectBox *pBox)
{
pBox->hide = 1;
}
// ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 SelectBox_OnKey(TSelectBox *pBox, u8 key)
{
u8 idx = pBox->idx;
if(key == KEY_FUNC)
return key; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(key == KEY_UP)
{
if(!pBox->read_only)
{
if(pBox->idx == pBox->count - 1)
pBox->idx = 0;
else
pBox->idx++;
}
}
else if(key == KEY_DOWN)
{
if(!pBox->read_only)
{
if(pBox->idx == 0)
pBox->idx = pBox->count - 1;
else
pBox->idx--;
}
}
// ˢ<><CBA2><EFBFBD><EFBFBD>ʾ
if(idx != pBox->idx)
SelectBox_Refresh(pBox);
return KEY_INVALID; // <20>Ѵ<EFBFBD><D1B4><EFBFBD>
}
// ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>
void SelectBox_SetFocus(TSelectBox *pBox)
{
Disp_SetCursor(pBox->pos, pBox->width);
}
// <20><EFBFBD><E0BCAD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ˢ<><CBA2><EFBFBD><EFBFBD>ʾ
void EditBox_Refresh(TEditBox *pEdit)
{
u8 i, j;
for(i = pEdit->left_idx, j = 0; i < strlen(pEdit->text) && i < pEdit->len && j < pEdit->width; i++, j++)
Disp_DispChar(pEdit->pos + j, pEdit->text[i]);
for(; j < pEdit->width; j++)
Disp_DispChar(pEdit->pos + j, ' ');
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0BCAD>
void EditBox_Create(TEditBox *pEdit, u8 pos, u8 width, u8 len, char *text)
{
memset(pEdit, 0, sizeof(TEditBox));
pEdit->pos = pos;
pEdit->width = width;
pEdit->len = len;
strcpy(pEdit->text, text);
pEdit->left_idx = 0;
pEdit->curr_idx = 0;
pEdit->read_only = 0;
// ˢ<><CBA2><EFBFBD><EFBFBD>ʾ
EditBox_Refresh(pEdit);
}
// <20><><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void EditBox_ReadOnly(TEditBox *pEdit)
{
pEdit->read_only = 1;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void EditBox_Hide(TEditBox *pEdit)
{
pEdit->hide = 1;
}
// <20><EFBFBD><E0BCAD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 EditBox_OnKey(TEditBox *pEdit, u8 key)
{
u8 idx = pEdit->curr_idx;
u8 c = pEdit->text[idx];
if(key == KEY_FUNC)
return key; // <20><><EFBFBD><EFBFBD>EditBox<6F><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(key == KEY_UP)
{
if(!pEdit->read_only)
{
if(pEdit->text[pEdit->curr_idx] == '9' || !isdigit(pEdit->text[pEdit->curr_idx]))
pEdit->text[pEdit->curr_idx] = '0';
else
pEdit->text[pEdit->curr_idx]++;
}
}
else if(key == KEY_DOWN)
{
if(!pEdit->read_only)
{
if(pEdit->text[pEdit->curr_idx] == '0' || !isdigit(pEdit->text[pEdit->curr_idx]))
pEdit->text[pEdit->curr_idx] = '9';
else
pEdit->text[pEdit->curr_idx]--;
}
}
else if(key == KEY_SET)
{
// <20><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>
if(pEdit->curr_idx == pEdit->len - 1)
{
pEdit->curr_idx = 0;
pEdit->left_idx = 0;
}
else
{
pEdit->curr_idx++;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(pEdit->curr_idx >= pEdit->left_idx + pEdit->width)
pEdit->left_idx++;
}
// <20><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD>
Disp_SetCursor(pEdit->pos + (pEdit->curr_idx - pEdit->left_idx), 1);
}
// ˢ<><CBA2><EFBFBD><EFBFBD>ʾ
if(idx != pEdit->curr_idx || c != pEdit->text[pEdit->curr_idx])
EditBox_Refresh(pEdit);
return KEY_INVALID; // <20>Ѵ<EFBFBD><D1B4><EFBFBD>
}
// <20><EFBFBD><E0BCAD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>
void EditBox_SetFocus(TEditBox *pEdit)
{
pEdit->left_idx = 0;
pEdit->curr_idx = 0;
Disp_SetCursor(pEdit->pos, 1);
}
// <20><>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>
// ˢ<><CBA2><EFBFBD><EFBFBD>ʾ
void Button_Refresh(TButton *pButton)
{
u8 i;
for(i = 0; i < strlen(pButton->caption) && i < pButton->width; i++)
Disp_DispChar(pButton->pos + i, pButton->caption[i]);
for(; i < pButton->width; i++)
Disp_DispChar(pButton->pos + i, ' ');
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť
void Button_Create(TButton *pButton, u8 pos, u8 width, char *caption)
{
memset(pButton, 0, sizeof(TButton));
pButton->pos = pos;
pButton->width = width;
strcpy(pButton->caption, caption);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void Button_Hide(TButton *pButton)
{
pButton->hide = 1;
}
// <20><>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 Button_OnKey(TButton *pButton, u8 key)
{
if(key == KEY_FUNC)
return key; // <20><><EFBFBD><EFBFBD>Button<6F><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(key == KEY_SET)
return key; // ִ<>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return KEY_INVALID; // <20>Ѵ<EFBFBD><D1B4><EFBFBD>
}
// <20><>ť<EFBFBD><C5A5><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>
void Button_SetFocus(TButton *pButton)
{
Disp_SetCursor(pButton->pos, pButton->width);
}