INT_HEAP_LEN=3072
HALNODEBUG
OSAL_CBTIMER_NUM_TASKS=1
HAL_AES_DMA=TRUE
HAL_DMA=TRUE
POWER_SAVING
xPLUS_BROADCASTER
HAL_LCD=TRUE
HAL_LED=FALSE
HAL_KEY=TRUE
--------------------------------------------------------------------------------------LCD初始化
main(void) ==>HalDriverInit(); ==>HalDriverInit (void) ===> HalLcdInit()===>HalLcd_HW_Init(void):
--------------------------------------------------------------------------------------hal_lcd.h
/*常量*/
#define HAL_LCD_LINE_1 0x01
#define HAL_LCD_LINE_2 0x02#define HAL_LCD_LINE_3 0x03
#define HAL_LCD_LINE_4 0x04
#define HAL_LCD_LINE_5 0x05
#define HAL_LCD_LINE_6 0x06
#define HAL_LCD_LINE_7 0x07
#define HAL_LCD_LINE_8 0x08
/*函数 - API*/
extern void HalLcdInit(void);// 初始化液晶服务
extern void HalLcdWriteString ( char *str, uint8 option);//在LCD上写入一个字符串。
extern void HalLcdWriteValue ( uint32 value, const uint8 radix, uint8 option);//为LCD写一个值。
extern void HalLcdWriteScreen( char *line1, char *line2 );//为LCD写一个值。
extern void HalLcdWriteStringValue( char *title, uint16 value, uint8 format, uint8 line );//写一个字符串后跟一个值到LCD。
extern void HalLcdWriteStringValueValue( char *title, uint16 value1, uint8 format1, uint16 value2, uint8 format2, uint8 line );//编写一个字符串后跟两个值到LCD。
extern void HalLcdDisplayPercentBar( char *title, uint8 value );//在液晶屏上写一个百分比栏。
--------------------------------------------------------------------------------------hal_lcd.c
/* LCD Max Chars and Buffer */
#define HAL_LCD_MAX_CHARS 16
#define HAL_LCD_MAX_BUFF 25
/* LCD 控制线设置 */
#define HAL_LCD_MODE_PORT 0 // control- P0.0 - LCD_MODE
#define HAL_LCD_MODE_PIN 0
#define HAL_LCD_RESET_PORT 1 // control- P1.1 - LCD_FLASH_RESET
#define HAL_LCD_RESET_PIN 1
#define HAL_LCD_CS_PORT 1 // control- P1.2 - LCD_CS
#define HAL_LCD_CS_PIN 2
/* LCD SPI 线设置 */
#define HAL_LCD_CLK_PIN 5
#define HAL_LCD_MOSI_PORT 1 // spi- P1.6 - MOSI
#define HAL_LCD_MOSI_PIN 6
#define HAL_LCD_MISO_PORT 1 // spi- P1.7 - MISO
#define HAL_LCD_MISO_PIN 7
/* SPI settings */
#define HAL_SPI_CLOCK_POL_LO 0x00 //极性
#define HAL_SPI_CLOCK_PHA_0 0x00 //相位
#define HAL_SPI_TRANSFER_MSB_FIRST 0x20 //MSB优先
/* LCD lines */
#define LCD_MAX_LINE_COUNT 3 // 显示行数
#define SET_POWER_SAVE_MODE(options) HalLcd_HW_Control(0x0C | (options)) //Set power save mode
#define FUNCTION_SET(options) HalLcd_HW_Control(0x10 | (options)) // Function Set
#define SET_DISPLAY_START_LINE(line) HalLcd_HW_Control(0x18 | (line)) //Set Display Start Line
#define SET_BIAS_CTRL(bias) HalLcd_HW_Control(0x1C | (bias)) //Bias control
#define SET_POWER_CTRL(options) HalLcd_HW_Control(0x20 | (options)) //Power control
#define SET_DISPLAY_CTRL(options) HalLcd_HW_Control(0x28 | (options)) //Set display control
#define SET_DDRAM_ADDR(charIndex) HalLcd_HW_Control(0x80 | (charIndex)) //Set DD address
#define SET_GCRAM_CHAR(specIndex) HalLcd_HW_Control(0xC0 | (specIndex)) //Set CGRAM address
#define SET_ICONRAM_ADDR(addr) HalLcd_HW_Control(0x40 | (addr)) //Set ICONRAM address
#define SET_DOUBLE_HEIGHT(options) HalLcd_HW_Control(0x08 | (options)) //Set double height
/* SPI interface control */
#define LCD_SPI_BEGIN() // spi chip select 使能
#define LCD_SPI_END() //spi chip select 失能
//清除接收和发送的字节状态,将tx数据写入缓冲区,等待发送完成
#define LCD_SPI_TX(x)
#define LCD_SPI_WAIT_RXRDY()
/* Control macros */
#define LCD_DO_WRITE() HAL_IO_SET(HAL_LCD_MODE_PORT, HAL_LCD_MODE_PIN, 1);
#define LCD_DO_CONTROL() HAL_IO_SET(HAL_LCD_MODE_PORT, HAL_LCD_MODE_PIN, 0);
#define LCD_ACTIVATE_RESET() HAL_IO_SET(HAL_LCD_RESET_PORT, HAL_LCD_RESET_PIN, 0);
#define LCD_RELEASE_RESET() HAL_IO_SET(HAL_LCD_RESET_PORT, HAL_LCD_RESET_PIN, 1);
/* FUNCTIONS - API*/
void HalLcd_HW_Init(void); // 液晶驱动初始化
void HalLcd_HW_WaitUs(uint16 i); // ms延时
void HalLcd_HW_Clear(void); //LCD清屏,写空格
void HalLcd_HW_ClearAllSpecChars(void); //清除所有特殊字符
void HalLcd_HW_Control(uint8 cmd);//将1个命令写入LCD
void HalLcd_HW_Write(uint8 data);//将1个数据写入LCD
void HalLcd_HW_SetContrast(uint8 value); //设置显示的对比
void HalLcd_HW_WriteChar(uint8 line, uint8 col, char text); //将一个字符写入显示。
void HalLcd_HW_WriteLine(uint8 line, const char *pText);//在显示器上写一行。
--------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
void SimpleBLEPeripheral_Init( uint8 task_id )
{
。。。。
#if (defined HAL_LCD) && (HAL_LCD == TRUE)
#if defined FEATURE_OAD //若打开了OAD功能
#if defined (HAL_IMAGE_A)
HalLcdWriteStringValue( "BLE Peri-A", OAD_VER_NUM( _imgHdr.ver ), 16, HAL_LCD_LINE_1 );
#else
HalLcdWriteStringValue( "BLE Peri-B", OAD_VER_NUM( _imgHdr.ver ), 16, HAL_LCD_LINE_1 );
#endif // HAL_IMAGE_A
#else
HalLcdWriteString( "BLE Peripheral", HAL_LCD_LINE_1 );
#endif // FEATURE_OAD
#endif // (defined HAL_LCD) && (HAL_LCD == TRUE)
。。。。
}
--------------------------------------------------------------------------------------HalLcd_HW_Init()解析
void HalLcd_HW_Init(void)
{
/* Initialize LCD IO lines */
halLcd_ConfigIO();
/* Initialize SPI */
halLcd_ConfigSPI();
/* 执行重置 */
LCD_ACTIVATE_RESET();
HalLcd_HW_WaitUs(15000); // 15 ms
LCD_RELEASE_RESET();
HalLcd_HW_WaitUs(15); // 15 us
/* 执行初始化序列 */
FUNCTION_SET(CGRAM | COM_FORWARD | THREE_LINE);
/*设置对比度*/
HalLcd_HW_SetContrast(15);
/* 设置电源 */
SET_POWER_SAVE_MODE(OSC_OFF | POWER_SAVE_ON);
SET_POWER_CTRL(VOLTAGE_DIVIDER_ON | CONVERTER_AND_REG_ON);
SET_BIAS_CTRL(BIAS_1_5);
HalLcd_HW_WaitUs(21000);// 21 ms
/* 清屏 */
HalLcd_HW_Clear();
HalLcd_HW_ClearAllSpecChars();
SET_DISPLAY_CTRL(DISPLAY_CTRL_ON | DISPLAY_CTRL_BLINK_OFF | DISPLAY_CTRL_CURSOR_OFF);
}
static void halLcd_ConfigIO(void)
{
/* GPIO configuration */
HAL_CONFIG_IO_OUTPUT(HAL_LCD_MODE_PORT, HAL_LCD_MODE_PIN, 1);//选择 lCD的模式
HAL_CONFIG_IO_OUTPUT(HAL_LCD_RESET_PORT, HAL_LCD_RESET_PIN, 1); //LCD复位
HAL_CONFIG_IO_OUTPUT(HAL_LCD_CS_PORT, HAL_LCD_CS_PIN, 1); //LCD片选
}
static void halLcd_ConfigSPI(void)
{
/* UART/SPI 外设配置 */
uint8 baud_exponent;
uint8 baud_mantissa;
/* Set UART 1上的SPI 为 位置2 */
PERCFG |= 0x02;
/* 配置时钟线, 主机输出、主机输出线*/
HAL_CONFIG_IO_PERIPHERAL(HAL_LCD_CLK_PORT, HAL_LCD_CLK_PIN);
HAL_CONFIG_IO_PERIPHERAL(HAL_LCD_MOSI_PORT, HAL_LCD_MOSI_PIN);
HAL_CONFIG_IO_PERIPHERAL(HAL_LCD_MISO_PORT, HAL_LCD_MISO_PIN);
/*将SPI速度设置为1MHz(值假设系统clk为32MHz),确认在1MHz SPI clk中。*/
baud_exponent = 15;
baud_mantissa = 0;
/*配置SPI */
U1UCR = 0x80; /* 刷新并进入空闲状态。8 - n - 1。 */
U1CSR = 0x00; /* 设置SPI 模式为 主机*/
U1GCR = HAL_SPI_TRANSFER_MSB_FIRST | HAL_SPI_CLOCK_PHA_0 | HAL_SPI_CLOCK_POL_LO | baud_exponent;
U1BAUD = baud_mantissa;
}