Ver Fonte

add:LCD pin_pwr改为可选项

Dozingfiretruck há 4 anos atrás
pai
commit
be7edd275e

+ 4 - 2
components/lcd/luat_lcd.c

@@ -118,13 +118,15 @@ int luat_lcd_close(luat_lcd_conf_t* conf) {
 }
 
 int luat_lcd_display_on(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_HIGH);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_HIGH);
     lcd_write_cmd(conf,0x29);
     return 0;
 }
 
 int luat_lcd_display_off(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     return 0;
 }
 

+ 11 - 5
components/lcd/luat_lcd_custom.c

@@ -13,7 +13,8 @@
 #define LCD_DIRECTION 0
 
 static int custom_sleep(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     luat_timer_mdelay(5);
     luat_lcd_custom_t * cst = (luat_lcd_custom_t *)conf->userdata;
     luat_lcd_execute_cmds(conf, &cst->sleepcmd, 1);
@@ -21,7 +22,8 @@ static int custom_sleep(luat_lcd_conf_t* conf) {
 }
 
 static int custom_wakeup(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_HIGH);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_HIGH);
     luat_timer_mdelay(5);
     luat_lcd_custom_t * cst = (luat_lcd_custom_t *)conf->userdata;
     luat_lcd_execute_cmds(conf, &cst->wakecmd, 1);
@@ -29,7 +31,8 @@ static int custom_wakeup(luat_lcd_conf_t* conf) {
 }
 
 static int custom_close(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     return 0;
 }
 
@@ -39,11 +42,14 @@ static int custom_init(luat_lcd_conf_t* conf) {
         conf->h = LCD_H;
     if (conf->direction == 0)
         conf->direction = LCD_DIRECTION;
+        
+    if (conf->pin_pwr != 255)
+        luat_gpio_mode(conf->pin_pwr, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_LOW); // POWER
     luat_gpio_mode(conf->pin_dc, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_HIGH); // DC
-    luat_gpio_mode(conf->pin_pwr, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_LOW); // POWER
     luat_gpio_mode(conf->pin_rst, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_LOW); // RST
 
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     luat_gpio_set(conf->pin_rst, Luat_GPIO_LOW);
     luat_timer_mdelay(100);
     luat_gpio_set(conf->pin_rst, Luat_GPIO_HIGH);

+ 10 - 9
components/lcd/luat_lcd_gc9106l.c

@@ -13,14 +13,16 @@
 #define LCD_DIRECTION 0
 
 static int gc9106l_sleep(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     luat_timer_mdelay(5);
     lcd_write_cmd(conf,0x10);
     return 0;
 }
 
 static int gc9106l_wakeup(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_HIGH);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_HIGH);
     luat_timer_mdelay(5);
     lcd_write_cmd(conf,0x11);
     //luat_timer_mdelay(120); // 外部休眠就好了吧
@@ -28,7 +30,8 @@ static int gc9106l_wakeup(luat_lcd_conf_t* conf) {
 }
 
 static int gc9106l_close(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     return 0;
 }
 static int gc9106l_init(luat_lcd_conf_t* conf) {
@@ -39,15 +42,13 @@ static int gc9106l_init(luat_lcd_conf_t* conf) {
     if (conf->direction == 0)
         conf->direction = LCD_DIRECTION;
 
-    luat_gpio_mode(conf->pin_dc, Luat_GPIO_OUTPUT, Luat_GPIO_PULLUP, 0); // DC
-    luat_gpio_mode(conf->pin_pwr, Luat_GPIO_OUTPUT, Luat_GPIO_PULLUP, 0); // POWER
-    luat_gpio_mode(conf->pin_rst, Luat_GPIO_OUTPUT, Luat_GPIO_PULLUP, 0); // RST
-
+    if (conf->pin_pwr != 255)
+        luat_gpio_mode(conf->pin_pwr, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_LOW); // POWER
     luat_gpio_mode(conf->pin_dc, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_HIGH); // DC
-    luat_gpio_mode(conf->pin_pwr, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_LOW); // POWER
     luat_gpio_mode(conf->pin_rst, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_LOW); // RST
 
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     luat_gpio_set(conf->pin_rst, Luat_GPIO_LOW);
     luat_timer_mdelay(100);
     luat_gpio_set(conf->pin_rst, Luat_GPIO_HIGH);

+ 10 - 9
components/lcd/luat_lcd_gc9306.c

@@ -13,14 +13,16 @@
 #define LCD_DIRECTION 0
 
 static int gc9306_sleep(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     luat_timer_mdelay(5);
     lcd_write_cmd(conf,0x10);
     return 0;
 }
 
 static int gc9306_wakeup(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_HIGH);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_HIGH);
     luat_timer_mdelay(5);
     lcd_write_cmd(conf,0x11);
     //luat_timer_mdelay(120); // 外部休眠就好了吧
@@ -28,7 +30,8 @@ static int gc9306_wakeup(luat_lcd_conf_t* conf) {
 }
 
 static int gc9306_close(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     return 0;
 }
 static int gc9306_init(luat_lcd_conf_t* conf) {
@@ -39,15 +42,13 @@ static int gc9306_init(luat_lcd_conf_t* conf) {
     if (conf->direction == 0)
         conf->direction = LCD_DIRECTION;
 
-    luat_gpio_mode(conf->pin_dc, Luat_GPIO_OUTPUT, Luat_GPIO_PULLUP, 0); // DC
-    luat_gpio_mode(conf->pin_pwr, Luat_GPIO_OUTPUT, Luat_GPIO_PULLUP, 0); // POWER
-    luat_gpio_mode(conf->pin_rst, Luat_GPIO_OUTPUT, Luat_GPIO_PULLUP, 0); // RST
-
+    if (conf->pin_pwr != 255)
+        luat_gpio_mode(conf->pin_pwr, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_LOW); // POWER
     luat_gpio_mode(conf->pin_dc, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_HIGH); // DC
-    luat_gpio_mode(conf->pin_pwr, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_LOW); // POWER
     luat_gpio_mode(conf->pin_rst, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_LOW); // RST
 
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     luat_gpio_set(conf->pin_rst, Luat_GPIO_LOW);
     luat_timer_mdelay(100);
     luat_gpio_set(conf->pin_rst, Luat_GPIO_HIGH);

+ 10 - 9
components/lcd/luat_lcd_gc9a01.c

@@ -13,14 +13,16 @@
 #define LCD_DIRECTION 0
 
 static int gc9a01_sleep(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     luat_timer_mdelay(5);
     lcd_write_cmd(conf,0x10);
     return 0;
 }
 
 static int gc9a01_wakeup(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_HIGH);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_HIGH);
     luat_timer_mdelay(5);
     lcd_write_cmd(conf,0x11);
     //luat_timer_mdelay(120); // 外部休眠就好了吧
@@ -28,7 +30,8 @@ static int gc9a01_wakeup(luat_lcd_conf_t* conf) {
 }
 
 static int gc9a01_close(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     return 0;
 }
 static int gc9a01_init(luat_lcd_conf_t* conf) {
@@ -39,15 +42,13 @@ static int gc9a01_init(luat_lcd_conf_t* conf) {
     if (conf->direction == 0)
         conf->direction = LCD_DIRECTION;
 
-    luat_gpio_mode(conf->pin_dc, Luat_GPIO_OUTPUT, Luat_GPIO_PULLUP, 0); // DC
-    luat_gpio_mode(conf->pin_pwr, Luat_GPIO_OUTPUT, Luat_GPIO_PULLUP, 0); // POWER
-    luat_gpio_mode(conf->pin_rst, Luat_GPIO_OUTPUT, Luat_GPIO_PULLUP, 0); // RST
-
+    if (conf->pin_pwr != 255)
+        luat_gpio_mode(conf->pin_pwr, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_LOW); // POWER
     luat_gpio_mode(conf->pin_dc, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_HIGH); // DC
-    luat_gpio_mode(conf->pin_pwr, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_LOW); // POWER
     luat_gpio_mode(conf->pin_rst, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_LOW); // RST
 
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     luat_gpio_set(conf->pin_rst, Luat_GPIO_LOW);
     luat_timer_mdelay(100);
     luat_gpio_set(conf->pin_rst, Luat_GPIO_HIGH);

+ 10 - 9
components/lcd/luat_lcd_ili9341.c

@@ -13,14 +13,16 @@
 #define LCD_DIRECTION 0
 
 static int ili9341_sleep(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     luat_timer_mdelay(5);
     lcd_write_cmd(conf,0x10);
     return 0;
 }
 
 static int ili9341_wakeup(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_HIGH);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_HIGH);
     luat_timer_mdelay(5);
     lcd_write_cmd(conf,0x11);
     //luat_timer_mdelay(120); // 外部休眠就好了吧
@@ -28,7 +30,8 @@ static int ili9341_wakeup(luat_lcd_conf_t* conf) {
 }
 
 static int ili9341_close(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     return 0;
 }
 static int ili9341_init(luat_lcd_conf_t* conf) {
@@ -39,15 +42,13 @@ static int ili9341_init(luat_lcd_conf_t* conf) {
     if (conf->direction == 0)
         conf->direction = LCD_DIRECTION;
 
-    luat_gpio_mode(conf->pin_dc, Luat_GPIO_OUTPUT, Luat_GPIO_PULLUP, 0); // DC
-    luat_gpio_mode(conf->pin_pwr, Luat_GPIO_OUTPUT, Luat_GPIO_PULLUP, 0); // POWER
-    luat_gpio_mode(conf->pin_rst, Luat_GPIO_OUTPUT, Luat_GPIO_PULLUP, 0); // RST
-
+    if (conf->pin_pwr != 255)
+        luat_gpio_mode(conf->pin_pwr, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_LOW); // POWER
     luat_gpio_mode(conf->pin_dc, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_HIGH); // DC
-    luat_gpio_mode(conf->pin_pwr, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_LOW); // POWER
     luat_gpio_mode(conf->pin_rst, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_LOW); // RST
 
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     luat_gpio_set(conf->pin_rst, Luat_GPIO_LOW);
     luat_timer_mdelay(100);
     luat_gpio_set(conf->pin_rst, Luat_GPIO_HIGH);

+ 9 - 8
components/lcd/luat_lcd_st7735.c

@@ -13,14 +13,16 @@
 #define LCD_DIRECTION 0
 
 static int st7735_sleep(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     luat_timer_mdelay(5);
     lcd_write_cmd(conf,0x10);
     return 0;
 }
 
 static int st7735_wakeup(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_HIGH);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_HIGH);
     luat_timer_mdelay(5);
     lcd_write_cmd(conf,0x11);
     //luat_timer_mdelay(120); // 外部休眠就好了吧
@@ -28,7 +30,8 @@ static int st7735_wakeup(luat_lcd_conf_t* conf) {
 }
 
 static int st7735_close(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     return 0;
 }
 static int st7735_init(luat_lcd_conf_t* conf) {
@@ -39,14 +42,12 @@ static int st7735_init(luat_lcd_conf_t* conf) {
     if (conf->direction == 0)
         conf->direction = LCD_DIRECTION;
 
-    luat_gpio_mode(conf->pin_dc, Luat_GPIO_OUTPUT, Luat_GPIO_PULLUP, 0); // DC
-    luat_gpio_mode(conf->pin_pwr, Luat_GPIO_OUTPUT, Luat_GPIO_PULLUP, 0); // POWER
-    luat_gpio_mode(conf->pin_rst, Luat_GPIO_OUTPUT, Luat_GPIO_PULLUP, 0); // RST
-
+    if (conf->pin_pwr != 255)
+        luat_gpio_mode(conf->pin_pwr, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_LOW); // POWER
     luat_gpio_mode(conf->pin_dc, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_HIGH); // DC
-    luat_gpio_mode(conf->pin_pwr, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_LOW); // POWER
     luat_gpio_mode(conf->pin_rst, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_LOW); // RST
 
+    if (conf->pin_pwr != 255)
     luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     luat_gpio_set(conf->pin_rst, Luat_GPIO_LOW);
     luat_timer_mdelay(100);

+ 11 - 10
components/lcd/luat_lcd_st7735s.c

@@ -13,14 +13,16 @@
 #define LCD_DIRECTION 0
 
 static int st7735s_sleep(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
+	if (conf->pin_pwr != 255)
+    	luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     luat_timer_mdelay(5);
     lcd_write_cmd(conf,0x10);
     return 0;
 }
 
 static int st7735s_wakeup(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_HIGH);
+	if (conf->pin_pwr != 255)
+    	luat_gpio_set(conf->pin_pwr, Luat_GPIO_HIGH);
     luat_timer_mdelay(5);
     lcd_write_cmd(conf,0x11);
     //luat_timer_mdelay(120); // 外部休眠就好了吧
@@ -28,7 +30,8 @@ static int st7735s_wakeup(luat_lcd_conf_t* conf) {
 }
 
 static int st7735s_close(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
+	if (conf->pin_pwr != 255)
+    	luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     return 0;
 }
 static int st7735s_init(luat_lcd_conf_t* conf) {
@@ -37,15 +40,13 @@ static int st7735s_init(luat_lcd_conf_t* conf) {
     if (conf->h == 0)
         conf->h = LCD_H;
 
-    luat_gpio_mode(conf->pin_dc, Luat_GPIO_OUTPUT, Luat_GPIO_PULLUP, 0); // DC
-    luat_gpio_mode(conf->pin_pwr, Luat_GPIO_OUTPUT, Luat_GPIO_PULLUP, 0); // POWER
-    luat_gpio_mode(conf->pin_rst, Luat_GPIO_OUTPUT, Luat_GPIO_PULLUP, 0); // RST
-
+	if (conf->pin_pwr != 255)
+    	luat_gpio_mode(conf->pin_pwr, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_LOW); // POWER
     luat_gpio_mode(conf->pin_dc, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_HIGH); // DC
-    luat_gpio_mode(conf->pin_pwr, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_LOW); // POWER
     luat_gpio_mode(conf->pin_rst, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_LOW); // RST
-
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
+	
+	if (conf->pin_pwr != 255)
+    	luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     luat_gpio_set(conf->pin_rst, Luat_GPIO_LOW);
     luat_timer_mdelay(100);
     luat_gpio_set(conf->pin_rst, Luat_GPIO_HIGH);

+ 10 - 4
components/lcd/luat_lcd_st7789.c

@@ -13,14 +13,16 @@
 #define LCD_DIRECTION 0
 
 static int st7789_sleep(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     luat_timer_mdelay(5);
     lcd_write_cmd(conf,0x10);
     return 0;
 }
 
 static int st7789_wakeup(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_HIGH);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_HIGH);
     luat_timer_mdelay(5);
     lcd_write_cmd(conf,0x11);
     //luat_timer_mdelay(120); // 外部休眠就好了吧
@@ -28,7 +30,8 @@ static int st7789_wakeup(luat_lcd_conf_t* conf) {
 }
 
 static int st7789_close(luat_lcd_conf_t* conf) {
-    luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
+    if (conf->pin_pwr != 255)
+        luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     return 0;
 }
 
@@ -41,10 +44,13 @@ static int st7789_init(luat_lcd_conf_t* conf) {
         conf->h = LCD_H;
     if (conf->direction == 0)
         conf->direction = LCD_DIRECTION;
+    
+    if (conf->pin_pwr != 255)
+        luat_gpio_mode(conf->pin_pwr, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_LOW); // POWER
     luat_gpio_mode(conf->pin_dc, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_HIGH); // DC
-    luat_gpio_mode(conf->pin_pwr, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_LOW); // POWER
     luat_gpio_mode(conf->pin_rst, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_LOW); // RST
 
+    if (conf->pin_pwr != 255)
     luat_gpio_set(conf->pin_pwr, Luat_GPIO_LOW);
     luat_gpio_set(conf->pin_rst, Luat_GPIO_LOW);
     luat_timer_mdelay(100);

+ 2 - 2
components/lcd/luat_lib_lcd.c

@@ -42,8 +42,8 @@ static int l_lcd_init(lua_State* L) {
     size_t len = 0;
     luat_lcd_conf_t *conf = luat_heap_malloc(sizeof(luat_lcd_conf_t));
     memset(conf, 0, sizeof(luat_lcd_conf_t)); // 填充0,保证无脏数据
-    if (lua_type(L, 3) == LUA_TUSERDATA)
-    {
+    conf->pin_pwr = 255;
+    if (lua_type(L, 3) == LUA_TUSERDATA){
         conf->userdata = (luat_spi_device_t*)lua_touserdata(L, 3);
     }
     const char* tp = luaL_checklstring(L, 1, &len);

+ 1 - 6
luat/weak/luat_spi_device.c

@@ -10,12 +10,7 @@
 // luat_spi_device_t* 在lua层看到的是一个userdata
 LUAT_WEAK int luat_spi_device_setup(luat_spi_device_t* spi_dev) {
     luat_spi_bus_setup(spi_dev);
-    luat_gpio_t gpio = {
-        .mode = Luat_GPIO_OUTPUT,
-        .irq = Luat_GPIO_HIGH,
-        .pin = spi_dev->spi_config.cs
-    };
-    luat_gpio_setup(&gpio);
+    luat_gpio_mode(spi_dev->spi_config.cs, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_HIGH); // CS
     return 0;
 }