diff --git a/Ubiquitous/RT_Thread/aiit_board/stm32f407_core/board/ports/drv_lcd.c b/Ubiquitous/RT_Thread/aiit_board/stm32f407_core/board/ports/drv_lcd.c index 04b5cffe2..1813559b4 100644 --- a/Ubiquitous/RT_Thread/aiit_board/stm32f407_core/board/ports/drv_lcd.c +++ b/Ubiquitous/RT_Thread/aiit_board/stm32f407_core/board/ports/drv_lcd.c @@ -12,7 +12,7 @@ #include #include "drv_lcd.h" #include "string.h" - +#include "font.h" //#define DRV_DEBUG #define LOG_TAG "drv.lcd" #include @@ -510,6 +510,75 @@ void lcd_fill_array(rt_uint16_t x_start, rt_uint16_t y_start, rt_uint16_t x_end, } } +//LCD的画笔颜色和背景色 +rt_uint16_t POINT_COLOR=RED; //画笔颜色 +rt_uint16_t BACK_COLOR =WHITE; //背景色 +/** + * @description: + * @param {rt_uint16_t} x_start + * @param {rt_uint16_t} y_start + * @param {rt_uint8_t} num show char + * @param {rt_uint8_t} size 12/16/24/32 + * @param {rt_uint32_t} color + * @return {*} + */ +void lcd_show_char(rt_uint16_t x, rt_uint16_t y, rt_uint8_t num, rt_uint8_t size, rt_uint16_t color) +{ + rt_uint8_t temp,t1,t; + rt_uint16_t y0=y; + rt_uint8_t csize=(size/8+((size%8)?1:0))*(size/2); //得到字体一个字符对应点阵集所占的字节数 + num=num-' ';//得到偏移后的值(ASCII字库是从空格开始取模,所以-' '就是对应字符的字库) + for(t=0;t=lcddev.height)return; //超区域了 + if((y-y0)==size) + { + y=y0; + x++; + if(x>=lcddev.width)return; //超区域了 + break; + } + } + } +} + +//显示字符串 +//x,y:起点坐标 +//width,height:区域大小 +//size:字体大小 +//*p:字符串起始地址 +void lcd_show_string(rt_uint16_t x,rt_uint16_t y,rt_uint16_t width,rt_uint16_t height,rt_uint8_t size,rt_uint8_t *p,rt_uint16_t color) +{ + rt_uint8_t x0=x; + width+=x; + height+=y; + while((*p<='~')&&(*p>=' '))//判断是不是非法字符! + { + if(x>=width){x=x0;y+=size;} + if(y>=height)break;//退出 + lcd_show_char(x,y,*p,size,color); + x+=size/2; + p++; + } +} + static rt_err_t drv_lcd_init(struct rt_device *device) { @@ -1870,6 +1939,8 @@ static rt_err_t drv_lcd_init(struct rt_device *device) } LCD_Display_Dir(0); //默认为竖屏 rt_pin_write(LCD_BL, PIN_HIGH); + lcddev.pointcolor = RED; + lcddev.backcolor = WHITE; LCD_Clear(0xffff); return RT_EOK; } @@ -1981,4 +2052,23 @@ void lcd_fill(int argc, void **argv) } } MSH_CMD_EXPORT(lcd_fill, lcd fill test for mcu lcd); + + + + //Show_Str(30,280,200,25," ",16,0); + //Show_Str(30,280,200,25,detection_label[top_ind],16,0); +void lcd_showstring_test(int argc, void **argv) +{ + char tmp[50] = "hello aiit board stm32"; + + if(argc == 1) + { + lcd_show_string(30,260,240,16,16,tmp,RED); + return; + } + memset(tmp,0,50); + memcpy(tmp,argv[1],50); + lcd_show_string(30,250,240,16,16,tmp,RED); +} +MSH_CMD_EXPORT(lcd_showstring_test, lcd show string test); #endif diff --git a/Ubiquitous/RT_Thread/aiit_board/stm32f407_core/board/ports/drv_lcd.h b/Ubiquitous/RT_Thread/aiit_board/stm32f407_core/board/ports/drv_lcd.h index 904643fe6..bc42e6a98 100644 --- a/Ubiquitous/RT_Thread/aiit_board/stm32f407_core/board/ports/drv_lcd.h +++ b/Ubiquitous/RT_Thread/aiit_board/stm32f407_core/board/ports/drv_lcd.h @@ -12,7 +12,6 @@ #include #include "rtdevice.h" #include -#include "font.h" #define LCD_W 800 #define LCD_H 480 @@ -27,6 +26,8 @@ typedef struct uint16_t wramcmd; //开始写gram指令 uint16_t setxcmd; //设置x坐标指令 uint16_t setycmd; //设置y坐标指令 + uint16_t pointcolor; // 画笔颜色 + uint16_t backcolor; //背景色 }_lcd_dev; //LCD参数 @@ -69,6 +70,35 @@ typedef struct #define SSD_VPS (SSD_VER_BACK_PORCH) +//画笔颜色 +#define WHITE 0xFFFF +#define BLACK 0x0000 +#define BLUE 0x001F +#define BRED 0XF81F +#define GRED 0XFFE0 +#define GBLUE 0X07FF +#define RED 0xF800 +#define MAGENTA 0xF81F +#define GREEN 0x07E0 +#define CYAN 0x7FFF +#define YELLOW 0xFFE0 +#define BROWN 0XBC40 //棕色 +#define BRRED 0XFC07 //棕红色 +#define GRAY 0X8430 //灰色 +//GUI颜色 + +#define DARKBLUE 0X01CF //深蓝色 +#define LIGHTBLUE 0X7D7C //浅蓝色 +#define GRAYBLUE 0X5458 //灰蓝色 +//以上三色为PANEL的颜色 + +#define LIGHTGREEN 0X841F //浅绿色 +//#define LIGHTGRAY 0XEF5B //浅灰色(PANNEL) +#define LGRAY 0XC618 //浅灰色(PANNEL),窗体背景色 + +#define LGRAYBLUE 0XA651 //浅灰蓝色(中间层颜色) +#define LBBLUE 0X2B12 //浅棕蓝色(选择条目的反色) + void lcd_fill_array(rt_uint16_t x_start, rt_uint16_t y_start, rt_uint16_t x_end, rt_uint16_t y_end, void *pcolor); #endif