#include #include #include "../inc/type.h" #include "../inc/config.h" #include "../inc/lcd.h" #include "../inc/os_task.h" #include "../inc/delay.h" #include "../inc/isys_com.h" #if USE_LCD_CACHE static char lcd_cache[2][42]; #endif #define LCD_HW_SUPPORT_CHAR_TYPE 88 uint8 lcd_show_char[LCD_HW_SUPPORT_CHAR_TYPE] = { '!','$','$','%','&','(',')','*','+',',','-','.', '0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?', '@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O', 'P','Q','R','S','T','U','V','W','X','Y','Z','[',']','^','_', 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p', 'q','r','s','t','u','v','w','x','y','z','{','|','}' }; const uint32 c_lcd_gpio_arry[8]= { LCD_D0_GP_NUM, LCD_D1_GP_NUM, LCD_D2_GP_NUM, LCD_D3_GP_NUM, LCD_D4_GP_NUM, LCD_D5_GP_NUM, LCD_D6_GP_NUM, LCD_D7_GP_NUM }; static void LCD_EN_SET(void) { set_gpio_value(LCD_E_GP_NUM, E_IO_H); } static void LCD_EN_CLEAR(void) { set_gpio_value(LCD_E_GP_NUM, E_IO_L); } static void LCD_RW_CLEAR(void) { set_gpio_value(LCD_RW_GP_NUM, E_IO_L); } static void LCD_RS_SET(void) { set_gpio_value(LCD_RS_GP_NUM, E_IO_H); } static void LCD_RS_CLEAR(void) { set_gpio_value(LCD_RS_GP_NUM, E_IO_L); } static void LCD_EN_Write(void) { LCD_EN_SET(); delay_us(20); LCD_EN_CLEAR(); delay_us(20); } static void Lcd_Write_Data(uint8 LCD_DATA) { uint16 data; uint8 temp; uint8 i; LCD_RW_CLEAR(); LCD_RS_SET(); for (i = 0; i < 8; i++) { temp = (LCD_DATA >> i) & 0x01; set_gpio_value(c_lcd_gpio_arry[i], (E_IO_VAL)temp); } LCD_EN_Write(); } static void Lcd_Write_Cmd(uint8 LCD_CMD) { uint16 data; uint8 temp; uint8 i; LCD_RW_CLEAR(); LCD_RS_CLEAR(); for (i = 0; i < 8; i++) { temp = (LCD_CMD >> i) & 0x01; set_gpio_value(c_lcd_gpio_arry[i], (E_IO_VAL)temp); } LCD_EN_Write(); } #define LCD_INIT_TIME 3// void lcd_init(void) { int i = 0; log_printf(LOG_INFO, I_SYS_STATUS, "init lcd display.\n"); do { //delay_ms(150); Lcd_Write_Cmd(0x38); delay_ms(1); Lcd_Write_Cmd(0x0c); delay_ms(1); Lcd_Write_Cmd(0x01); delay_ms(500); }while(++iLCD_CHAR_NUM-Y?LCD_CHAR_NUM-Y:strlen((const char *)pstr); memcpy(&lcd_cache[0][Y],pstr,i); } if(X==LINE_2) { i = strlen((const char *)pstr)>LCD_CHAR_NUM-Y?LCD_CHAR_NUM-Y:strlen((const char *)pstr); memcpy(&lcd_cache[1][Y],pstr,i); } } else { LCD_SET_XY( X, Y ); delay_us(10); while(*pstr) { Lcd_Write_Data(*pstr++); } } #else char *pstr = (char*)s; LCD_SET_XY( X, Y ); delay_us(10); while(*pstr) { Lcd_Write_Data(*pstr++); } #endif } void lcd_write_cache(void) { #if USE_LCD_CACHE uint32 i = 0; if(1)//sys_ready { LCD_SET_XY(0,0); delay_us(10); for(i=0;i