NANO130_H2Press/User/Lcd_drv.c

574 lines
17 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "includes.h"
#include <lcd.h>
// 是否自检屏状态
u8 self_check_state = 0;
// 显示缓冲区
TVideoBuf VideoBuf = {0};
TVideoBuf Last_VideoBuf = {0};
// 定义7段字库编码
// |-A-|
// F B
// |-G-|
// E C
// |-D-|
typedef struct
{
unsigned A : 1;
unsigned B : 1;
unsigned C : 1;
unsigned D : 1;
unsigned E : 1;
unsigned F : 1;
unsigned G : 1;
unsigned : 1;
} TChar;
// 字库,不带小数点或单位
const TChar CLib[] =
{
{0, 0, 0, 0, 0, 0, 0}, // ' '
{0, 0, 0, 0, 0, 0, 1}, // '-'
{0, 1, 1, 0, 0, 0, 1}, // '+' = '-|'
{1, 1, 1, 0, 1, 1, 1}, // 'A'
{0, 0, 1, 1, 1, 1, 1}, // 'b'
{0, 0, 0, 1, 1, 0, 1}, // 'c'
{0, 1, 1, 1, 1, 0, 1}, // 'd'
{1, 0, 0, 1, 1, 1, 1}, // 'E'
{1, 0, 0, 0, 1, 1, 1}, // 'F'
{1, 0, 1, 1, 1, 1, 0}, // 'G'
{0, 0, 1, 0, 1, 1, 1}, // 'h'
{0, 0, 0, 0, 1, 1, 0}, // 'I'
{0, 1, 1, 1, 0, 0, 0}, // 'J'
{0, 0, 0, 1, 0, 0, 0}, // 'K' = '_'
{0, 0, 0, 1, 1, 1, 0}, // 'L'
{0, 0, 0, 1, 0, 0, 0}, // 'M' = '_'
{0, 0, 1, 0, 1, 0, 1}, // 'n'
{0, 0, 1, 1, 1, 0, 1}, // 'o'
{1, 1, 0, 0, 1, 1, 1}, // 'P'
{1, 1, 1, 0, 0, 1, 1}, // 'q'
{0, 0, 0, 0, 1, 0, 1}, // 'r'
{1, 0, 1, 1, 0, 1, 1}, // 'S'
{0, 0, 1, 0, 0, 0, 1}, // 't'
{0, 1, 1, 1, 1, 1, 0}, // 'U'
{0, 1, 0, 0, 1, 1, 1}, // 'V'
{0, 0, 0, 1, 0, 0, 0}, // 'W' = '_'
{0, 0, 0, 1, 0, 0, 0}, // 'X' = '_'
{0, 1, 1, 1, 0, 1, 1}, // 'y'
{0, 0, 0, 1, 0, 0, 0}, // 'Z' = '_'
{1, 1, 1, 1, 1, 1, 0}, // '0'
{0, 1, 1, 0, 0, 0, 0}, // '1'
{1, 1, 0, 1, 1, 0, 1}, // '2'
{1, 1, 1, 1, 0, 0, 1}, // '3'
{0, 1, 1, 0, 0, 1, 1}, // '4'
{1, 0, 1, 1, 0, 1, 1}, // '5'
{1, 0, 1, 1, 1, 1, 1}, // '6'
{1, 1, 1, 0, 0, 0, 0}, // '7'
{1, 1, 1, 1, 1, 1, 1}, // '8'
{1, 1, 1, 1, 0, 1, 1}, // '9'
};
// 字符在字库中的编码
typedef enum
{CODE_SPACE, CODE_MINUS, CODE_PLUS,
CODE_A, CODE_B, CODE_C, CODE_D, CODE_E, CODE_F, CODE_G,
CODE_H, CODE_I, CODE_J, CODE_K, CODE_L, CODE_M, CODE_N,
CODE_O, CODE_P, CODE_Q, CODE_R, CODE_S, CODE_T,
CODE_U, CODE_V, CODE_W, CODE_X, CODE_Y, CODE_Z,
CODE_0, CODE_1, CODE_2, CODE_3, CODE_4, CODE_5, CODE_6, CODE_7, CODE_8, CODE_9}
TCode;
TCode HT1621_Char2Code(char c)
{
if(c >= '0' && c <= '9')
return CODE_0 + (c - '0');
if(c >= 'a' && c <= 'z')
return CODE_A + (c - 'a');
if(c >= 'A' && c <= 'Z')
return CODE_A + (c - 'A');
if(c == '-')
return CODE_MINUS;
if(c == '+')
return CODE_PLUS;
return CODE_SPACE;
}
// pin_no: 1~32
// com_no: 1~4
void HT1621_WriteBuf(u16 pin_com, u8 bit_val)
{
u8 byte_index, bit_index;
u8 pin_no = pin_com / 10;
u8 com_no = pin_com % 10;
if(pin_no < 1 || pin_no > 32)
return;
if(com_no < 1 || com_no > 4)
return;
byte_index = (pin_no - 1) / 2;
bit_index = com_no - 1; // COM4高位COM1低位
if((pin_no - 1) % 2)
bit_index += 4; // 奇数pin高4位偶数pin低4位
if(bit_val)
VideoBuf.buf[byte_index] |= (1 << bit_index);
else
VideoBuf.buf[byte_index] &= ~(1 << bit_index);
}
// 写一个七段码字符
// pin_comA = (A段的pin_no) * 10 + (A段的com_no)
void HT1621_WriteChar(char c, u16 pin_comA, u16 pin_comB, u16 pin_comC, u16 pin_comD, u16 pin_comE, u16 pin_comF, u16 pin_comG)
{
TCode code = HT1621_Char2Code(c);
HT1621_WriteBuf(pin_comA, CLib[code].A);
HT1621_WriteBuf(pin_comB, CLib[code].B);
HT1621_WriteBuf(pin_comC, CLib[code].C);
HT1621_WriteBuf(pin_comD, CLib[code].D);
HT1621_WriteBuf(pin_comE, CLib[code].E);
HT1621_WriteBuf(pin_comF, CLib[code].F);
HT1621_WriteBuf(pin_comG, CLib[code].G);
}
// 写一个七段码数据
// pin_comA = (A段的pin_no) * 10 + (A段的com_no)
void HT1621_Write7Seg(u8 val, u16 pin_comA, u16 pin_comB, u16 pin_comC, u16 pin_comD, u16 pin_comE, u16 pin_comF, u16 pin_comG)
{
HT1621_WriteBuf(pin_comA, val & 1);
val >>= 1;
HT1621_WriteBuf(pin_comB, val & 1);
val >>= 1;
HT1621_WriteBuf(pin_comC, val & 1);
val >>= 1;
HT1621_WriteBuf(pin_comD, val & 1);
val >>= 1;
HT1621_WriteBuf(pin_comE, val & 1);
val >>= 1;
HT1621_WriteBuf(pin_comF, val & 1);
val >>= 1;
HT1621_WriteBuf(pin_comG, val & 1);
}
u8 HT1621_Pin2Seg(u8 pin)
{
// LCD pin 1~12 对应 seg 0~11
if(pin >= 1 && pin <= 12)
return pin - 1;
// LCD pin 13~18 对应 seg 14~19
if(pin >= 13 && pin <= 18)
return pin + 1;
// LCD pin 19~32 对应 seg 22~35
return pin + 3;
}
// 刷新整个显示屏内容
void HT1621_Refresh()
{
__IO uint32_t *memPtrs = &LCD->MEM_0;
u8 pin = 1;
u8 i, seg, memnum, seg_shift;
// 比较显示内容和标志位,如无改变则不操作
if(memcmp(&VideoBuf, &Last_VideoBuf, sizeof(VideoBuf)) == 0)
return;
// 保存显示内容和标志位
Last_VideoBuf = VideoBuf;
// 处理闪烁,根据标志位临时改变显示内容
if(!self_check_state && !VideoBuf.blink_visible)
{
// 隐藏数字(显示界面)
if(VideoBuf.h2press_blink) // 氢压力
{
Disp_H2PressText(" ");
Disp_H2PressPointOff();
}
if(VideoBuf.temp_blink) // 温度
{
Disp_TempText(" ");
Disp_TempPointOff();
}
if(VideoBuf.pres_blink) // 压力
{
Disp_PresText(" ");
Disp_PresPointOff();
}
if(VideoBuf.vacu_blink) // 真空
{
Disp_VacuText(" ");
Disp_TempPointOff();
}
if(VideoBuf.battery_blink) // 电池
Disp_WriteBattery(0);
// 光标闪烁(配置界面)
for(i = 0; i < VideoBuf.cursor_width; i++)
Disp_DispChar(VideoBuf.cursor_pos + i, ' ');
}
for(i = 0; i < sizeof(VideoBuf.buf); i++)
{
seg = HT1621_Pin2Seg(pin++);
memnum = seg / 4;
seg_shift = (seg % 4) * 8;
memPtrs[memnum] &= ~(0xFFul << seg_shift);
memPtrs[memnum] |= (((uint32_t) (VideoBuf.buf[i] & 0x0F)) << seg_shift);
seg = HT1621_Pin2Seg(pin++);
memnum = seg / 4;
seg_shift = (seg % 4) * 8;
memPtrs[memnum] &= ~(0xFFul << seg_shift);
memPtrs[memnum] |= (((uint32_t) (VideoBuf.buf[i] >> 4)) << seg_shift);
}
// 恢复显示内容和标志位
VideoBuf = Last_VideoBuf;
}
// 整个屏幕全熄灭
void HT1621_AllOff()
{
self_check_state = 1;
memset(VideoBuf.buf, 0x00, sizeof(VideoBuf.buf)); // 不影响最后的状态
HT1621_Refresh();
self_check_state = 0;
}
// 整个屏幕全点亮
void HT1621_AllOn()
{
self_check_state = 1;
memset(VideoBuf.buf, 0xFF, sizeof(VideoBuf.buf)); // 不影响最后的状态
HT1621_Refresh();
self_check_state = 0;
}
void LCD_Init()
{
/* Enable IP clock */
CLK->APBCLK |= CLK_APBCLK_LCD_EN;
/*---------------------------------------------------------------------------------------------------------*/
/* Init LCD I/O Multi-function */
/*---------------------------------------------------------------------------------------------------------*/
/* Set PD.4 multi-function pins for SEG35 */
SYS->PD_L_MFP &= ~SYS_PD_L_MFP_PD4_MFP_Msk;
SYS->PD_L_MFP |= SYS_PD_L_MFP_PD4_MFP_LCD_S35;
/* Set PD.5 multi-function pins for SEG34 */
SYS->PD_L_MFP &= ~SYS_PD_L_MFP_PD5_MFP_Msk;
SYS->PD_L_MFP |= SYS_PD_L_MFP_PD5_MFP_LCD_S34;
/* Set PC.15 multi-function pins for SEG33 */
SYS->PC_H_MFP &= ~SYS_PC_H_MFP_PC15_MFP_Msk;
SYS->PC_H_MFP |= SYS_PC_H_MFP_PC15_MFP_LCD_S33;
/* Set PC.14 multi-function pins for SEG32 */
SYS->PC_H_MFP &= ~SYS_PC_H_MFP_PC14_MFP_Msk;
SYS->PC_H_MFP |= SYS_PC_H_MFP_PC14_MFP_LCD_S32;
/* Set PB.15 multi-function pins for SEG31 */
SYS->PB_H_MFP &= ~SYS_PB_H_MFP_PB15_MFP_Msk;
SYS->PB_H_MFP |= SYS_PB_H_MFP_PB15_MFP_LCD_S31;
/* Set PB.8 multi-function pins for SEG30 */
SYS->PB_H_MFP &= ~SYS_PB_H_MFP_PB8_MFP_Msk;
SYS->PB_H_MFP |= SYS_PB_H_MFP_PB8_MFP_LCD_S30;
/* Set PE.15 multi-function pins for SEG29 */
SYS->PE_H_MFP &= ~SYS_PE_H_MFP_PE15_MFP_Msk;
SYS->PE_H_MFP |= SYS_PE_H_MFP_PE15_MFP_LCD_S29;
/* Set PE.14 multi-function pins for SEG28 */
SYS->PE_H_MFP &= ~SYS_PE_H_MFP_PE14_MFP_Msk;
SYS->PE_H_MFP |= SYS_PE_H_MFP_PE14_MFP_LCD_S28;
/* Set PE.13 multi-function pins for SEG27 */
SYS->PE_H_MFP &= ~SYS_PE_H_MFP_PE13_MFP_Msk;
SYS->PE_H_MFP |= SYS_PE_H_MFP_PE13_MFP_LCD_S27;
/* Set PB.14 multi-function pins for SEG26 */
SYS->PB_H_MFP &= ~SYS_PB_H_MFP_PB14_MFP_Msk;
SYS->PB_H_MFP |= SYS_PB_H_MFP_PB14_MFP_LCD_S26;
/* Set PB.13 multi-function pins for SEG25 */
SYS->PB_H_MFP &= ~SYS_PB_H_MFP_PB13_MFP_Msk;
SYS->PB_H_MFP |= SYS_PB_H_MFP_PB13_MFP_LCD_S25;
/* Set PB.12 multi-function pins for SEG24 */
SYS->PB_H_MFP &= ~SYS_PB_H_MFP_PB12_MFP_Msk;
SYS->PB_H_MFP |= SYS_PB_H_MFP_PB12_MFP_LCD_S24;
/* Set PA.11 multi-function pins for SEG23 */
SYS->PA_H_MFP &= ~SYS_PA_H_MFP_PA11_MFP_Msk;
SYS->PA_H_MFP |= SYS_PA_H_MFP_PA11_MFP_LCD_S23;
/* Set PA.10 multi-function pins for SEG22 */
SYS->PA_H_MFP &= ~SYS_PA_H_MFP_PA10_MFP_Msk;
SYS->PA_H_MFP |= SYS_PA_H_MFP_PA10_MFP_LCD_S22;
/* Set PD.8 multi-function pins for SEG19 */
SYS->PD_H_MFP &= ~SYS_PD_H_MFP_PD8_MFP_Msk;
SYS->PD_H_MFP |= SYS_PD_H_MFP_PD8_MFP_LCD_S19;
/* Set PD.9 multi-function pins for SEG18 */
SYS->PD_H_MFP &= ~SYS_PD_H_MFP_PD9_MFP_Msk;
SYS->PD_H_MFP |= SYS_PD_H_MFP_PD9_MFP_LCD_S18;
/* Set PD.10 multi-function pins for SEG17 */
SYS->PD_H_MFP &= ~SYS_PD_H_MFP_PD10_MFP_Msk;
SYS->PD_H_MFP |= SYS_PD_H_MFP_PD10_MFP_LCD_S17;
/* Set PD.11 multi-function pins for SEG16 */
SYS->PD_H_MFP &= ~SYS_PD_H_MFP_PD11_MFP_Msk;
SYS->PD_H_MFP |= SYS_PD_H_MFP_PD11_MFP_LCD_S16;
/* Set PD.12 multi-function pins for SEG15 */
SYS->PD_H_MFP &= ~SYS_PD_H_MFP_PD12_MFP_Msk;
SYS->PD_H_MFP |= SYS_PD_H_MFP_PD12_MFP_LCD_S15;
/* Set PD.13 multi-function pins for SEG14 */
SYS->PD_H_MFP &= ~SYS_PD_H_MFP_PD13_MFP_Msk;
SYS->PD_H_MFP |= SYS_PD_H_MFP_PD13_MFP_LCD_S14;
/* Set PB.6 multi-function pins for SEG11 */
SYS->PB_L_MFP &= ~SYS_PB_L_MFP_PB6_MFP_Msk;
SYS->PB_L_MFP |= SYS_PB_L_MFP_PB6_MFP_LCD_S11;
/* Set PB.7 multi-function pins for SEG10 */
SYS->PB_L_MFP &= ~SYS_PB_L_MFP_PB7_MFP_Msk;
SYS->PB_L_MFP |= SYS_PB_L_MFP_PB7_MFP_LCD_S10;
/* Set PE.8 multi-function pins for SEG9 */
SYS->PE_H_MFP &= ~SYS_PE_H_MFP_PE8_MFP_Msk;
SYS->PE_H_MFP |= SYS_PE_H_MFP_PE8_MFP_LCD_S9;
/* Set PE.7 multi-function pins for SEG8 */
SYS->PE_L_MFP &= ~SYS_PE_L_MFP_PE7_MFP_Msk;
SYS->PE_L_MFP |= SYS_PE_L_MFP_PE7_MFP_LCD_S8;
/* Set PB.0 multi-function pins for SEG7 */
SYS->PB_L_MFP &= ~SYS_PB_L_MFP_PB0_MFP_Msk;
SYS->PB_L_MFP |= SYS_PB_L_MFP_PB0_MFP_LCD_S7;
/* Set PB.1 multi-function pins for SEG6 */
SYS->PB_L_MFP &= ~SYS_PB_L_MFP_PB1_MFP_Msk;
SYS->PB_L_MFP |= SYS_PB_L_MFP_PB1_MFP_LCD_S6;
/* Set PB.2 multi-function pins for SEG5 */
SYS->PB_L_MFP &= ~SYS_PB_L_MFP_PB2_MFP_Msk;
SYS->PB_L_MFP |= SYS_PB_L_MFP_PB2_MFP_LCD_S5;
/* Set PB.3 multi-function pins for SEG4 */
SYS->PB_L_MFP &= ~SYS_PB_L_MFP_PB3_MFP_Msk;
SYS->PB_L_MFP |= SYS_PB_L_MFP_PB3_MFP_LCD_S4;
/* Set PD.6 multi-function pins for SEG3 */
SYS->PD_L_MFP &= ~SYS_PD_L_MFP_PD6_MFP_Msk;
SYS->PD_L_MFP |= SYS_PD_L_MFP_PD6_MFP_LCD_S3;
/* Set PD.7 multi-function pins for SEG2 */
SYS->PD_L_MFP &= ~SYS_PD_L_MFP_PD7_MFP_Msk;
SYS->PD_L_MFP |= SYS_PD_L_MFP_PD7_MFP_LCD_S2;
/* Set PD.14 multi-function pins for SEG1 */
SYS->PD_H_MFP &= ~SYS_PD_H_MFP_PD14_MFP_Msk;
SYS->PD_H_MFP |= SYS_PD_H_MFP_PD14_MFP_LCD_S1;
/* Set PD.15 multi-function pins for SEG0 */
SYS->PD_H_MFP &= ~SYS_PD_H_MFP_PD15_MFP_Msk;
SYS->PD_H_MFP |= SYS_PD_H_MFP_PD15_MFP_LCD_S0;
/* Set PC.5 multi-function pins for COM3 */
SYS->PC_L_MFP &= ~SYS_PC_L_MFP_PC5_MFP_Msk;
SYS->PC_L_MFP |= SYS_PC_L_MFP_PC5_MFP_LCD_COM3;
/* Set PC.4 multi-function pins for COM2 */
SYS->PC_L_MFP &= ~SYS_PC_L_MFP_PC4_MFP_Msk;
SYS->PC_L_MFP |= SYS_PC_L_MFP_PC4_MFP_LCD_COM2;
/* Set PC.3 multi-function pins for COM1 */
SYS->PC_L_MFP &= ~SYS_PC_L_MFP_PC3_MFP_Msk;
SYS->PC_L_MFP |= SYS_PC_L_MFP_PC3_MFP_LCD_COM1;
/* Set PC.2 multi-function pins for COM0 */
SYS->PC_L_MFP &= ~SYS_PC_L_MFP_PC2_MFP_Msk;
SYS->PC_L_MFP |= SYS_PC_L_MFP_PC2_MFP_LCD_COM0;
// /* Set PC.1 multi-function pins for DH2 */
// SYS->PC_L_MFP &= ~SYS_PC_L_MFP_PC1_MFP_Msk;
// SYS->PC_L_MFP |= SYS_PC_L_MFP_PC1_MFP_LCD_DH2;
//
// /* Set PC.0 multi-function pins for DH1 */
// SYS->PC_L_MFP &= ~SYS_PC_L_MFP_PC0_MFP_Msk;
// SYS->PC_L_MFP |= SYS_PC_L_MFP_PC0_MFP_LCD_DH1;
//
// /* Set PB.11 multi-function pins for V1 */
// SYS->PB_H_MFP &= ~SYS_PB_H_MFP_PB11_MFP_Msk;
// SYS->PB_H_MFP |= SYS_PB_H_MFP_PB11_MFP_LCD_V1;
//
// /* Set PB.10 multi-function pins for V2 */
// SYS->PB_H_MFP &= ~SYS_PB_H_MFP_PB10_MFP_Msk;
// SYS->PB_H_MFP |= SYS_PB_H_MFP_PB10_MFP_LCD_V2;
//
// /* Set PB.9 multi-function pins for V3 */
// SYS->PB_H_MFP &= ~SYS_PB_H_MFP_PB9_MFP_Msk;
// SYS->PB_H_MFP |= SYS_PB_H_MFP_PB9_MFP_LCD_V3;
/* Disable for PA.1110 OffD */
GPIO_DISABLE_DIGITAL_PATH(PA, 0x0C00ul);
/* Disable for PB.15141312,8,7,63210 OffD */
GPIO_DISABLE_DIGITAL_PATH(PB, 0xF1CFul);
/* Disable forPC.1514, 5432 OffD */
GPIO_DISABLE_DIGITAL_PATH(PC, 0xC03Cul);
/* Disable for PD.151413,121110987654 OffD */
GPIO_DISABLE_DIGITAL_PATH(PD, 0xFFF0ul);
/* Disable for PE.15141387 OffD */
GPIO_DISABLE_DIGITAL_PATH(PE, 0xE180ul);
//Enable Timer0 clock and select Timer0 clock source
CLK_EnableModuleClock(TMR0_MODULE);
CLK_SetModuleClock(TMR0_MODULE, CLK_CLKSEL1_TMR0_S_HXT, 0);
}
/**
* @brief LCD Initialization routine.
*
* @param[in] u32DrivingType LCD driving type: \ref LCD_C_TYPE / \ref LCD_EXTERNAL_R_TYPE / \ref LCD_INTERNAL_R_TYPE / \ref LCD_EXTERNAL_C_TYPE
* @param[in] u32ComNum LCD Com number: 1 ~6
* @param[in] u32BiasLevel LCD bias level: \ref LCD_BIAS_STATIC / \ref LCD_BIAS_HALF / \ref LCD_BIAS_THIRD
* @param[in] u32FramerateDiv LCD frequency divider: \ref LCD_FREQ_DIV32 / \ref LCD_FREQ_DIV64 / \ref LCD_FREQ_DIV96 / \ref LCD_FREQ_DIV128 /
* \ref LCD_FREQ_DIV192/ \ref LCD_FREQ_DIV256 / \ref LCD_FREQ_DIV384 / \ref LCD_FREQ_DIV512
* @param[in] u32DrivingVol LCD charge pump driving voltage: \ref LCD_CPVOl_2_6V / \ref LCD_CPVOl_2_7V / \ref LCD_CPVOl_2_8V / \ref LCD_CPVOl_2_9V /
* \ref LCD_CPVOl_3V / \ref LCD_CPVOl_3_1V / \ref LCD_CPVOl_3_2V / \ref LCD_CPVOl_3_3V
*
* @return LCD frame rate.
*
*/
void LCD_Open_WithoutSystick(uint32_t u32DrivingType, uint32_t u32ComNum, uint32_t u32BiasLevel, uint32_t u32FramerateDiv, uint32_t u32DrivingVol)
{
uint32_t clkdiv, muldiv;
uint32_t lcd_freq_div[] = {32, 64, 96, 128, 192, 256, 384, 512};
uint32_t multiplex_freq_div[] = {2, 4, 6, 8, 10, 12};
uint32_t u32clk_src;
/* IP reset */
SYS->IPRST_CTL2 |= SYS_IPRST_CTL2_LCD_RST_Msk;
SYS->IPRST_CTL2 &= ~SYS_IPRST_CTL2_LCD_RST_Msk;
LCD_DisableDisplay();
/* Turn all segments off */
// LCD_SetAllPixels(0); // 这个函数要用到SysTick Timer屏蔽之
switch(u32DrivingType) {
case LCD_C_TYPE:
case LCD_EXTERNAL_C_TYPE:
LCD->DISPCTL &= ~LCD_DISPCTL_BV_SEL_Msk; // internal source for charge pump
LCD->DISPCTL = (LCD->DISPCTL & ~LCD_DISPCTL_CPUMP_FREQ_Msk) | (LCD_CPUMP_DIV1);
LCD->DISPCTL = (LCD->DISPCTL & ~LCD_DISPCTL_CPUMP_VOL_SET_Msk) | (u32DrivingVol);
LCD->DISPCTL &= ~LCD_DISPCTL_IBRL_EN_Msk;
LCD->DISPCTL |= LCD_DISPCTL_CPUMP_EN_Msk; // enable charge pump
break;
case LCD_EXTERNAL_R_TYPE:
case LCD_INTERNAL_R_TYPE:
LCD->DISPCTL &= ~LCD_DISPCTL_CPUMP_EN_Msk;
LCD->DISPCTL |= LCD_DISPCTL_BV_SEL_Msk;
LCD->DISPCTL &= ~LCD_DISPCTL_IBRL_EN_Msk;
LCD->DISPCTL |= (u32DrivingType == LCD_INTERNAL_R_TYPE)?LCD_DISPCTL_IBRL_EN_Msk:0;
break;
};
LCD->CTL &= ~LCD_CTL_FREQ_Msk;
LCD->CTL |= u32FramerateDiv;
LCD->CTL = (LCD->CTL & ~LCD_CTL_MUX_Msk) | ((u32ComNum - 1) << LCD_CTL_MUX_Pos);
LCD->DISPCTL = (LCD->DISPCTL & ~LCD_DISPCTL_BIAS_SEL_Msk) | u32BiasLevel;
if((CLK->CLKSEL1 & CLK_CLKSEL1_LCD_S_Msk) == 0)
u32clk_src = 32 * 1024;
else
u32clk_src = 10 * 1024;
clkdiv = (LCD->CTL & LCD_CTL_FREQ_Msk) >> LCD_CTL_FREQ_Pos;
muldiv = (LCD->CTL & LCD_CTL_MUX_Msk) >> LCD_CTL_MUX_Pos;
}
void LCD_MyOpen()
{
/* Do LCD Initialization */
LCD_Open_WithoutSystick(LCD_INTERNAL_R_TYPE, 4, LCD_BIAS_THIRD, LCD_FREQ_DIV32, LCD_CPVOl_3V);
LCD_EnableDisplay();
LCD->CTL |= LCD_CTL_PDDISP_EN_Msk;
// 刷新任务,优先级较高
NVIC_SetPriority (TMR0_IRQn, 2); /* set Priority for Sample Interrupt */
NVIC_EnableIRQ(TMR0_IRQn);
// 设置定时器的周期: 2Hz(500ms
TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 2);
// 启动定时器
TIMER_EnableInt(TIMER0);
TIMER_Start(TIMER0);
}
void TMR0_IRQHandler(void)
{
static uint32_t halfSeconds = 0;
uint16_t interval = 30;
// clear Timer0 interrupt flag
NVIC_ClearPendingIRQ(TMR0_IRQn);
TIMER_ClearIntFlag(TIMER0);
// 判断GPS定位是否超时
if(GPS_Waiting && IsTickOut(GPS_waitTick))
GPS_Waiting = 0;
// 判断是否发送GPS数据
if(IsTickOut(GPS_tranTick))
{
GPS_tranTick = GetDelayTick(dcBuff.configData.intervalGPSTrans * 1000);
DTU_semGPS = 1;
}
//
if(MeterInSamplePage() && interval > 3)
interval = 3;
// 判断是否采集数据
if(Wakeup_GetWorkMode() == WORK_MODE_NORMAL && ++halfSeconds >= interval * 2)
{
// 定时采集
halfSeconds = 0;
if(!Sample_Busy())
NVIC_SetPendingIRQ(TMR1_IRQn);
}
// 刷新显示
Form_OnTimer();
}