diff --git a/CHANGELOG b/CHANGELOG index 9d1c6b5..de998f4 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,9 @@ +---------------------------------------------------------------------------- +2020-12-04 V1.41 +1.lua接口增加LCD显示函数,可以构建图形元素. 新增文件 lua_if_disp.c +2.DAP固件升级到V1.02版本,解决复位方面的小BUG,增加NRST电平指示功能. +3.bsp_InitTVCC() 内部取消TVCC_OFF的语句. 避免从DAP固件跳入后TVCC短暂关闭 + ---------------------------------------------------------------------------- 2020-11-29 V1.40 【重大更新】 新增功能: diff --git a/Project/MDK-ARM(uV5)/project.uvoptx b/Project/MDK-ARM(uV5)/project.uvoptx index 18b3708..5d8a1ae 100755 --- a/Project/MDK-ARM(uV5)/project.uvoptx +++ b/Project/MDK-ARM(uV5)/project.uvoptx @@ -256,7 +256,7 @@ App - 0 + 1 0 0 0 @@ -552,7 +552,7 @@ BSP - 0 + 1 0 0 0 @@ -1016,7 +1016,7 @@ MDK-ARM - 0 + 1 0 0 0 @@ -1708,7 +1708,7 @@ Doc - 0 + 1 0 0 0 @@ -3632,6 +3632,18 @@ 0 0 + + 19 + 270 + 1 + 0 + 0 + 0 + ..\..\User\lua\if\lua_if_disp.c + lua_if_disp.c + 0 + 0 + @@ -3642,7 +3654,7 @@ 0 20 - 270 + 271 1 0 0 @@ -3654,7 +3666,7 @@ 20 - 271 + 272 1 0 0 @@ -3666,7 +3678,7 @@ 20 - 272 + 273 1 0 0 @@ -3678,7 +3690,7 @@ 20 - 273 + 274 1 0 0 @@ -3690,7 +3702,7 @@ 20 - 274 + 275 1 1 0 @@ -3702,7 +3714,7 @@ 20 - 275 + 276 1 0 0 @@ -3714,7 +3726,7 @@ 20 - 276 + 277 1 0 0 @@ -3734,7 +3746,7 @@ 0 21 - 277 + 278 1 0 0 @@ -3746,7 +3758,7 @@ 21 - 278 + 279 1 0 0 @@ -3758,7 +3770,7 @@ 21 - 279 + 280 1 0 0 @@ -3770,7 +3782,7 @@ 21 - 280 + 281 1 0 0 @@ -3782,7 +3794,7 @@ 21 - 281 + 282 1 0 0 @@ -3794,7 +3806,7 @@ 21 - 282 + 283 1 0 0 @@ -3814,7 +3826,7 @@ 0 22 - 283 + 284 1 0 0 @@ -3826,7 +3838,7 @@ 22 - 284 + 285 1 0 0 @@ -3838,7 +3850,7 @@ 22 - 285 + 286 1 0 0 @@ -3858,7 +3870,7 @@ 0 23 - 286 + 287 1 0 0 @@ -3870,7 +3882,7 @@ 23 - 287 + 288 1 0 0 @@ -3882,7 +3894,7 @@ 23 - 288 + 289 1 0 0 @@ -3894,7 +3906,7 @@ 23 - 289 + 290 1 0 0 @@ -3906,7 +3918,7 @@ 23 - 290 + 291 1 0 0 @@ -3926,7 +3938,7 @@ 0 24 - 291 + 292 5 0 0 @@ -3938,7 +3950,7 @@ 24 - 292 + 293 1 0 0 @@ -3950,7 +3962,7 @@ 24 - 293 + 294 1 0 0 @@ -3962,7 +3974,7 @@ 24 - 294 + 295 1 0 0 @@ -3974,7 +3986,7 @@ 24 - 295 + 296 1 0 0 @@ -3986,7 +3998,7 @@ 24 - 296 + 297 1 0 0 @@ -3998,7 +4010,7 @@ 24 - 297 + 298 5 0 0 @@ -4018,7 +4030,7 @@ 0 25 - 298 + 299 1 0 0 @@ -4030,7 +4042,7 @@ 25 - 299 + 300 1 0 0 @@ -4050,7 +4062,7 @@ 0 26 - 300 + 301 5 0 0 @@ -4062,7 +4074,7 @@ 26 - 301 + 302 5 0 0 @@ -4074,7 +4086,7 @@ 26 - 302 + 303 1 0 0 @@ -4086,7 +4098,7 @@ 26 - 303 + 304 1 0 0 @@ -4098,7 +4110,7 @@ 26 - 304 + 305 5 0 0 @@ -4110,7 +4122,7 @@ 26 - 305 + 306 5 0 0 @@ -4122,7 +4134,7 @@ 26 - 306 + 307 1 0 0 @@ -4142,7 +4154,7 @@ 0 27 - 307 + 308 1 0 0 @@ -4154,7 +4166,7 @@ 27 - 308 + 309 1 0 0 @@ -4166,7 +4178,7 @@ 27 - 309 + 310 1 0 0 @@ -4178,7 +4190,7 @@ 27 - 310 + 311 1 0 0 @@ -4190,7 +4202,7 @@ 27 - 311 + 312 1 0 0 @@ -4202,7 +4214,7 @@ 27 - 312 + 313 5 0 0 @@ -4222,7 +4234,7 @@ 0 28 - 313 + 314 1 0 0 @@ -4234,7 +4246,7 @@ 28 - 314 + 315 1 0 0 @@ -4246,7 +4258,7 @@ 28 - 315 + 316 1 0 0 @@ -4258,7 +4270,7 @@ 28 - 316 + 317 1 0 0 @@ -4278,7 +4290,7 @@ 0 29 - 317 + 318 1 0 0 @@ -4290,7 +4302,7 @@ 29 - 318 + 319 1 0 0 diff --git a/Project/MDK-ARM(uV5)/project.uvprojx b/Project/MDK-ARM(uV5)/project.uvprojx index 092d0a7..c155f54 100755 --- a/Project/MDK-ARM(uV5)/project.uvprojx +++ b/Project/MDK-ARM(uV5)/project.uvprojx @@ -1920,6 +1920,11 @@ 1 ..\..\User\lua\if\lua_if_swim.c + + lua_if_disp.c + 1 + ..\..\User\lua\if\lua_if_disp.c + diff --git a/Project/MDK-ARM(uV5)/startup_stm32h743xx.s b/Project/MDK-ARM(uV5)/startup_stm32h743xx.s index 5ef07d2..524c7a2 100755 --- a/Project/MDK-ARM(uV5)/startup_stm32h743xx.s +++ b/Project/MDK-ARM(uV5)/startup_stm32h743xx.s @@ -68,7 +68,7 @@ __Vectors DCD __initial_sp ; Top of Stack DCD MemManage_Handler ; MPU Fault Handler DCD BusFault_Handler ; Bus Fault Handler DCD UsageFault_Handler ; Usage Fault Handler - DCD 0x00000140 ; Reserved H7-TOOL APP 固件版本 + DCD 0x00000141 ; Reserved H7-TOOL APP 固件版本 DCD 0 ; Reserved 固件小版本 DCD 0 ; Reserved DCD 0 ; Reserved diff --git a/Project/dap.bin b/Project/dap.bin index 7d4fa28..182fb50 100644 Binary files a/Project/dap.bin and b/Project/dap.bin differ diff --git a/Project/h7_tool_app(v1.40).bin b/Project/h7_tool_app(V1.41).bin similarity index 78% rename from Project/h7_tool_app(v1.40).bin rename to Project/h7_tool_app(V1.41).bin index 4c561a4..0798aa5 100644 Binary files a/Project/h7_tool_app(v1.40).bin and b/Project/h7_tool_app(V1.41).bin differ diff --git a/User/app/inc/modify_param.h b/User/app/inc/modify_param.h index 03f756f..5b41322 100644 --- a/User/app/inc/modify_param.h +++ b/User/app/inc/modify_param.h @@ -34,7 +34,7 @@ typedef struct int32_t DefaultValue; /* 缺省值 */ }PARAM_LIST_T; -void UartMonInitParam(uint16_t _MainStatus); +void UartMonInitParam(uint16_t _ParamID); void ModifyParam(uint16_t _MainStatus); void UartMonCheckParam(void); diff --git a/User/app/src/file_lib.c b/User/app/src/file_lib.c index f07bb79..3499f3b 100644 --- a/User/app/src/file_lib.c +++ b/User/app/src/file_lib.c @@ -1208,14 +1208,6 @@ uint8_t SelectFile(char *_InitPath, uint16_t _MainStatus, uint16_t _RetStatus, c fListDir = 1; while (g_MainStatus == _MainStatus) { - if (fRefresh) /* 刷新整个界面 */ - { - fRefresh = 0; - - LCD_ClearMenu(&g_tMenuLua); - LCD_DispMenu(&g_tMenuLua); - } - if (fListDir == 1) { fListDir = 0; @@ -1261,6 +1253,14 @@ uint8_t SelectFile(char *_InitPath, uint16_t _MainStatus, uint16_t _RetStatus, c fRefresh = 1; } + + if (fRefresh) /* 刷新整个界面 */ + { + fRefresh = 0; + + LCD_ClearMenu(&g_tMenuLua); /* 清屏菜单区 */ + LCD_DispMenu(&g_tMenuLua); + } bsp_Idle(); diff --git a/User/app/src/main.c b/User/app/src/main.c index 923f958..561f99d 100755 --- a/User/app/src/main.c +++ b/User/app/src/main.c @@ -88,6 +88,9 @@ int main(void) LoadParam(); /* 读取应用程序参数, 该函数在param.c */ + bsp_InitTVCC(); /* TVCC控制引脚 -- 放到后面读完参数后设置 */ + bsp_SetTVCC(3300); + ST7789_SetDirection(g_tParam.DispDir); /* 主程序采用状态机实现程序功能切换 */ @@ -151,9 +154,7 @@ int main(void) //PERIOD_Start(&g_tRunLed, 50, 50, 0); /* LED一直闪烁, 非阻塞 */ PERIOD_Start(&g_tRunLed, 1000, 1000, 0); /* LED一直闪烁, 每2秒闪1次 */ - bsp_InitESP32(); - - bsp_SetTVCC(3300); + bsp_InitESP32(); DSO_InitHard(); DSO_SetDC(1, 1); diff --git a/User/app/src/modify_param.c b/User/app/src/modify_param.c index 895031c..7b73859 100644 --- a/User/app/src/modify_param.c +++ b/User/app/src/modify_param.c @@ -308,28 +308,28 @@ void ModifyParam(uint16_t _MainStatus) ********************************************************************************************************* * 函 数 名: UartMonInitParam * 功能说明: 初始化参数列表 -* 形 参: _MainStatus +* 形 参: _ParamID : 参数ID * 返 回 值: 无 ********************************************************************************************************* */ -void UartMonInitParam(uint16_t _MainStatus) +void UartMonInitParam(uint16_t _ParamID) { - if (_MainStatus == MODIFY_PARAM_UART_MON) + if (_ParamID == MODIFY_PARAM_UART_MON) { s_pParamList = UartMonParamList; s_ParamCount = UART_MON_PARAM_COUNT; } - else if (_MainStatus == MODIFY_PARAM_SYSTEM) + else if (_ParamID == MODIFY_PARAM_SYSTEM) { s_pParamList = SysBaseParamList; s_ParamCount = SYS_BASE_PARAM_COUNT; } - else if (_MainStatus == MODIFY_PARAM_PROG) + else if (_ParamID == MODIFY_PARAM_PROG) { s_pParamList = ProgParamList; s_ParamCount = PROG_PARAM_COUNT; } - else if (_MainStatus == MODIFY_PARAM_NET) + else if (_ParamID == MODIFY_PARAM_NET) { s_pParamList = NetParamList; s_ParamCount = NET_PARAM_COUNT; diff --git a/User/app/src/status_can_monitor.c b/User/app/src/status_can_monitor.c index 2afb618..70aab5f 100644 --- a/User/app/src/status_can_monitor.c +++ b/User/app/src/status_can_monitor.c @@ -145,7 +145,7 @@ void status_MonitorCan(void) LCD_SetEncode(ENCODE_GBK); - UartMonInitParam(g_MainStatus); + UartMonInitParam(MODIFY_PARAM_UART_MON); UartMonCheckParam(); /* 检查参数 */ fInit = 1; diff --git a/User/app/src/status_lua.c b/User/app/src/status_lua.c index 042e7c0..683e3cc 100644 --- a/User/app/src/status_lua.c +++ b/User/app/src/status_lua.c @@ -95,6 +95,8 @@ CMD_LIST_T tBtnList[16]; char g_OutText[4 * 1024] = {0}; /* 最多支持4K字节文本缓存 */ MEMO_T g_LuaMemo = {0}; +uint8_t g_LuaSubStatus = 0; /* 0表示命令行界面 1表示GUI界面 */ + /* char s_lua_prog_buf[LUA_PROG_LEN_MAX + 1]; uint32_t s_lua_prog_len; @@ -158,181 +160,203 @@ void FindBtnNoteCmd(void) void status_LuaRun(void) { - uint8_t ucKeyCode; /* 按键代码 */ - uint8_t fRefresh; - FONT_T tFontBtn, tFontMemo; - uint8_t cursor = 0; - BUTTON_T btn1, btn2, btn3, btn4, btn5, btn6; - - DispHeader("Lua小程序"); + lua_DownLoadFile(g_tFileList.Path); /* 重新初始化lua环境,并装载lua文件到内存,不执行 */ + /* --GUIMODE=1 --用于识别GUI程序还是print程序 */ + if (memcmp(s_lua_prog_buf, "--GUIMODE=1", 11) == 0) { - g_LuaMemo.Left = MEMO_X; - g_LuaMemo.Top = MEMO_Y; - g_LuaMemo.Height = MEMO_H; - g_LuaMemo.Width = MEMO_W; - g_LuaMemo.Font = &tFontMemo; - //g_LuaMemo.Color = CL_WHITE; - g_LuaMemo.Text = g_OutText; - g_LuaMemo.MaxLen = sizeof(g_OutText); - g_LuaMemo.LineCount = 0; - g_LuaMemo.WordWrap = 0; - g_LuaMemo.LineOffset = 0; - - LCD_InitMemo(&g_LuaMemo); - LCD_DrawMemo(&g_LuaMemo); + g_LuaSubStatus = 1; + } + else + { + g_LuaSubStatus = 0; } - bsp_Idle(); - - /* 设置字体参数 */ + if (g_LuaSubStatus == 1) /* GUI界面 --需要是死循环 */ { - tFontBtn.FontCode = FC_ST_16; /* 字体代码 16点阵 */ - tFontBtn.FrontColor = INFO_NAME_COLOR; /* 字体颜色 */ - tFontBtn.BackColor = CL_MASK; /* 文字背景颜色 */ - tFontBtn.Space = 0; /* 文字间距,单位 = 像素 */ + lua_RunLuaProg(); /* 执行lua -阻塞 */ - tFontMemo.FontCode = FC_ST_16; /* 字体代码 16点阵 */ - tFontMemo.FrontColor = CL_WHITE; /* 字体颜色 */ - tFontMemo.BackColor = CL_MASK; /* 文字背景颜色 */ - tFontMemo.Space = 0; /* 文字间距,单位 = 像素 */ - } - - lua_DownLoadFile(g_tFileList.Path); - GetChipTypeFromLua(g_Lua); /* 从lua中解析芯片类型 */ - - /* 从lua文件中解析按钮名字和程序语句 */ - FindBtnNoteCmd(); - - fRefresh = 1; - while (g_MainStatus == MS_LUA_EXEC_FILE) + while(bsp_GetKey()); + g_MainStatus = MS_LUA_SELECT_FILE; + } + else /* 命令行界面 -必须是非阻塞的 */ { - if (fRefresh) /* 刷新整个界面 */ + uint8_t ucKeyCode; /* 按键代码 */ + uint8_t fRefresh; + FONT_T tFontBtn, tFontMemo; + uint8_t cursor = 0; + BUTTON_T btn1, btn2, btn3, btn4, btn5, btn6; + + DispHeader("Lua小程序"); + { - fRefresh = 0; - - { - btn1.Left = BTN1_X; - btn1.Top = BTN1_Y; - btn1.Height = BTN1_H; - btn1.Width = BTN1_W; - btn1.pCaption = tBtnList[0].Note; - btn1.Font = &tFontBtn; - btn1.Focus = 0; - - btn2.Left = BTN2_X; - btn2.Top = BTN2_Y; - btn2.Height = BTN2_H; - btn2.Width = BTN2_W; - btn2.pCaption = tBtnList[1].Note; - btn2.Font = &tFontBtn; - btn2.Focus = 0; - - btn3.Left = BTN3_X; - btn3.Top = BTN3_Y; - btn3.Height = BTN3_H; - btn3.Width = BTN3_W; - btn3.pCaption = tBtnList[2].Note; - btn3.Font = &tFontBtn; - btn3.Focus = 0; - - btn4.Left = BTN4_X; - btn4.Top = BTN4_Y; - btn4.Height = BTN4_H; - btn4.Width = BTN4_W; - btn4.pCaption = tBtnList[3].Note; - btn4.Font = &tFontBtn; - btn4.Focus = 0; - - btn5.Left = BTN5_X; - btn5.Top = BTN5_Y; - btn5.Height = BTN5_H; - btn5.Width = BTN5_W; - btn5.pCaption = tBtnList[4].Note; - btn5.Font = &tFontBtn; - btn5.Focus = 0; - - btn6.Left = BTN6_X; - btn6.Top = BTN6_Y; - btn6.Height = BTN6_H; - btn6.Width = BTN6_W; - btn6.pCaption = tBtnList[5].Note; - btn6.Font = &tFontBtn; - btn6.Focus = 0; - - if (cursor == 0) btn1.Focus = 1; - else if (cursor == 1) btn2.Focus = 1; - else if (cursor == 2) btn3.Focus = 1; - else if (cursor == 3) btn4.Focus = 1; - else if (cursor == 4) btn5.Focus = 1; - else if (cursor == 5) btn6.Focus = 1; - - LCD_SetEncode(ENCODE_GBK); /* 按钮文字是GBK编码 */ - - LCD_DrawButton(&btn1); - LCD_DrawButton(&btn2); - LCD_DrawButton(&btn3); - LCD_DrawButton(&btn4); - LCD_DrawButton(&btn5); - LCD_DrawButton(&btn6); - - LCD_SetEncode(ENCODE_UTF8); /* 还原UTF8编码 */ - } - } + g_LuaMemo.Left = MEMO_X; + g_LuaMemo.Top = MEMO_Y; + g_LuaMemo.Height = MEMO_H; + g_LuaMemo.Width = MEMO_W; + g_LuaMemo.Font = &tFontMemo; + //g_LuaMemo.Color = CL_WHITE; + g_LuaMemo.Text = g_OutText; + g_LuaMemo.MaxLen = sizeof(g_OutText); + g_LuaMemo.LineCount = 0; + g_LuaMemo.WordWrap = 0; + g_LuaMemo.LineOffset = 0; + + LCD_InitMemo(&g_LuaMemo); + LCD_DrawMemo(&g_LuaMemo); + } bsp_Idle(); - - ucKeyCode = bsp_GetKey(); /* 读取键值, 无键按下时返回 KEY_NONE = 0 */ - if (ucKeyCode != KEY_NONE) + + /* 设置字体参数 */ { - /* 有键按下 */ - switch (ucKeyCode) + tFontBtn.FontCode = FC_ST_16; /* 字体代码 16点阵 */ + tFontBtn.FrontColor = INFO_NAME_COLOR; /* 字体颜色 */ + tFontBtn.BackColor = CL_MASK; /* 文字背景颜色 */ + tFontBtn.Space = 0; /* 文字间距,单位 = 像素 */ + + tFontMemo.FontCode = FC_ST_16; /* 字体代码 16点阵 */ + tFontMemo.FrontColor = CL_WHITE; /* 字体颜色 */ + tFontMemo.BackColor = CL_MASK; /* 文字背景颜色 */ + tFontMemo.Space = 0; /* 文字间距,单位 = 像素 */ + } + + /* 从lua文件中解析按钮名字和程序语句 */ + FindBtnNoteCmd(); + + lua_RunLuaProg(); /* 执行lua */ + GetChipTypeFromLua(g_Lua); /* 从lua中解析芯片类型 */ + + fRefresh = 1; + while (g_MainStatus == MS_LUA_EXEC_FILE) + { + if (fRefresh) /* 刷新整个界面 */ { - case KEY_UP_S: /* S键 上 */ - if (++cursor == BTN_NUM) - { - cursor = 0; - } - fRefresh = 1; - break; + fRefresh = 0; - case KEY_LONG_DOWN_S: /* S键 长按 */ - if (cursor > 0) - { - cursor--; - } - else - { - cursor = BTN_NUM - 1; - } - fRefresh = 1; - break; + { + btn1.Left = BTN1_X; + btn1.Top = BTN1_Y; + btn1.Height = BTN1_H; + btn1.Width = BTN1_W; + btn1.pCaption = tBtnList[0].Note; + btn1.Font = &tFontBtn; + btn1.Focus = 0; - case KEY_UP_C: /* C键 下 */ - if (cursor < 6) - { - if (strlen(tBtnList[cursor].Cmd) > 0) - { - LCD_MemoClear(&g_LuaMemo); - - DispHeaderStr("Lua正在运行..."); - - lua_do(tBtnList[cursor].Cmd); - - DispHeaderStr("Lua小程序"); + btn2.Left = BTN2_X; + btn2.Top = BTN2_Y; + btn2.Height = BTN2_H; + btn2.Width = BTN2_W; + btn2.pCaption = tBtnList[1].Note; + btn2.Font = &tFontBtn; + btn2.Focus = 0; + + btn3.Left = BTN3_X; + btn3.Top = BTN3_Y; + btn3.Height = BTN3_H; + btn3.Width = BTN3_W; + btn3.pCaption = tBtnList[2].Note; + btn3.Font = &tFontBtn; + btn3.Focus = 0; + + btn4.Left = BTN4_X; + btn4.Top = BTN4_Y; + btn4.Height = BTN4_H; + btn4.Width = BTN4_W; + btn4.pCaption = tBtnList[3].Note; + btn4.Font = &tFontBtn; + btn4.Focus = 0; + + btn5.Left = BTN5_X; + btn5.Top = BTN5_Y; + btn5.Height = BTN5_H; + btn5.Width = BTN5_W; + btn5.pCaption = tBtnList[4].Note; + btn5.Font = &tFontBtn; + btn5.Focus = 0; + + btn6.Left = BTN6_X; + btn6.Top = BTN6_Y; + btn6.Height = BTN6_H; + btn6.Width = BTN6_W; + btn6.pCaption = tBtnList[5].Note; + btn6.Font = &tFontBtn; + btn6.Focus = 0; + + if (cursor == 0) btn1.Focus = 1; + else if (cursor == 1) btn2.Focus = 1; + else if (cursor == 2) btn3.Focus = 1; + else if (cursor == 3) btn4.Focus = 1; + else if (cursor == 4) btn5.Focus = 1; + else if (cursor == 5) btn6.Focus = 1; + + LCD_SetEncode(ENCODE_GBK); /* 按钮文字是GBK编码 */ + + LCD_DrawButton(&btn1); + LCD_DrawButton(&btn2); + LCD_DrawButton(&btn3); + LCD_DrawButton(&btn4); + LCD_DrawButton(&btn5); + LCD_DrawButton(&btn6); + + LCD_SetEncode(ENCODE_UTF8); /* 还原UTF8编码 */ + } + } + + bsp_Idle(); + + ucKeyCode = bsp_GetKey(); /* 读取键值, 无键按下时返回 KEY_NONE = 0 */ + if (ucKeyCode != KEY_NONE) + { + /* 有键按下 */ + switch (ucKeyCode) + { + case KEY_UP_S: /* S键 上 */ + if (++cursor == BTN_NUM) + { + cursor = 0; + } + fRefresh = 1; + break; + + case KEY_LONG_DOWN_S: /* S键 长按 */ + if (cursor > 0) + { + cursor--; + } + else + { + cursor = BTN_NUM - 1; } - } - break; + fRefresh = 1; + break; - case KEY_LONG_DOWN_C: /* C键长按 */ - g_MainStatus = MS_LUA_SELECT_FILE; - break; + case KEY_UP_C: /* C键 下 */ + if (cursor < 6) + { + if (strlen(tBtnList[cursor].Cmd) > 0) + { + LCD_MemoClear(&g_LuaMemo); + + DispHeaderStr("Lua正在运行..."); + + lua_do(tBtnList[cursor].Cmd); + + DispHeaderStr("Lua小程序"); + } + } + break; - default: - break; + case KEY_LONG_DOWN_C: /* C键长按 */ + g_MainStatus = MS_LUA_SELECT_FILE; + break; + + default: + break; + } } - } - } + } + } } diff --git a/User/app/src/status_programmer.c b/User/app/src/status_programmer.c index 3af2649..7e0abf1 100755 --- a/User/app/src/status_programmer.c +++ b/User/app/src/status_programmer.c @@ -183,7 +183,8 @@ void status_ProgWork(void) uint16_t len; uint8_t line = 0; - lua_DownLoadFile(g_tProg.FilePath); /* 重新初始化lua环境,并装载lua文件 */ + lua_DownLoadFile(g_tProg.FilePath); /* 重新初始化lua环境,并装载lua文件到内存,不执行 */ + lua_RunLuaProg(); /* 执行lua */ /* 从lua文件中获得注释字符串Note01 */ lua_getglobal(g_Lua, "Note01"); diff --git a/User/app/src/status_uart_monitor.c b/User/app/src/status_uart_monitor.c index f8a0d51..7093686 100644 --- a/User/app/src/status_uart_monitor.c +++ b/User/app/src/status_uart_monitor.c @@ -258,12 +258,11 @@ void status_MonitorUart(void) LCD_InitMemo(&g_RecMemo); LCD_DrawMemo(&g_RecMemo); } - - + LCD_SetEncode(ENCODE_GBK); - /* V1.35, 检查串口参数 */ - UartMonInitParam(g_MainStatus); + /* V1.35, 检查串口参数 1.41 修正升级后串口缺省参数bug */ + UartMonInitParam(MODIFY_PARAM_UART_MON); UartMonCheckParam(); /* 检查参数 */ s_Pause = 0; diff --git a/User/bsp/bsp.c b/User/bsp/bsp.c index 42ebabe..4321646 100755 --- a/User/bsp/bsp.c +++ b/User/bsp/bsp.c @@ -83,7 +83,7 @@ void bsp_Init(void) HC595_InitHard(); /* 配置示波器模块上的GPIO芯片 */ bsp_InitDAC1(); /* 配置DAC引脚 */ - bsp_InitTVCC(); /* TVCC控制引脚 */ + //bsp_InitTVCC(); /* TVCC控制引脚 -- 放到后面读完参数后设置 */ bsp_InitMCP4725(); /* 示波器偏置电压 */ diff --git a/User/bsp/inc/bsp_key.h b/User/bsp/inc/bsp_key.h index 65b6fc1..91528dd 100755 --- a/User/bsp/inc/bsp_key.h +++ b/User/bsp/inc/bsp_key.h @@ -103,6 +103,7 @@ typedef struct uint8_t Read; /* 缓冲区读指针1 */ uint8_t Write; /* 缓冲区写指针 */ uint8_t Read2; /* 缓冲区读指针2 */ + uint8_t Read3; /* 缓冲区读指针3 */ } KEY_FIFO_T; /* 供外部调用的函数声明 */ @@ -111,6 +112,7 @@ void bsp_KeyScan10ms(void); void bsp_PutKey(uint8_t _KeyCode); uint8_t bsp_GetKey(void); uint8_t bsp_GetKey2(void); +uint8_t bsp_GetKey3(void); uint8_t bsp_GetKeyState(KEY_ID_E _ucKeyID); void bsp_SetKeyParam(uint8_t _ucKeyID, uint16_t _LongTime, uint8_t _RepeatSpeed); void bsp_ClearKey(void); diff --git a/User/bsp/inc/bsp_timer.h b/User/bsp/inc/bsp_timer.h index abce7e1..88bd3ce 100755 --- a/User/bsp/inc/bsp_timer.h +++ b/User/bsp/inc/bsp_timer.h @@ -46,7 +46,7 @@ void bsp_StopTimer(uint8_t _id); uint8_t bsp_CheckTimer(uint8_t _id); int32_t bsp_GetRunTime(void); int32_t bsp_CheckRunTime(int32_t _LastTime); - +int32_t bsp_SubRunTime(int32_t _T0, int32_t _T1); uint64_t bsp_GetRunTimeUs(void); int64_t bsp_CheckRunTimeUs(int64_t _LastTime); diff --git a/User/bsp/src/bsp_key.c b/User/bsp/src/bsp_key.c index 17335cb..f2275e2 100755 --- a/User/bsp/src/bsp_key.c +++ b/User/bsp/src/bsp_key.c @@ -343,6 +343,35 @@ uint8_t bsp_GetKey2(void) } } + +/* +********************************************************************************************************* +* 函 数 名: bsp_GetKey3 +* 功能说明: 从按键FIFO缓冲区读取一个键值。独立的读指针。 +* 形 参: 无 +* 返 回 值: 按键代码 +********************************************************************************************************* +*/ +uint8_t bsp_GetKey3(void) +{ + uint8_t ret; + + if (s_tKey.Read3 == s_tKey.Write) + { + return KEY_NONE; + } + else + { + ret = s_tKey.Buf[s_tKey.Read3]; + + if (++s_tKey.Read3 >= KEY_FIFO_SIZE) + { + s_tKey.Read3 = 0; + } + return ret; + } +} + /* ********************************************************************************************************* * 函 数 名: bsp_GetKeyState @@ -386,6 +415,7 @@ void bsp_ClearKey(void) s_tKey.Write = 0; s_tKey.Read = 0; s_tKey.Read2 = 0; + s_tKey.Read3 = 0; } /* diff --git a/User/bsp/src/bsp_power_tvcc.c b/User/bsp/src/bsp_power_tvcc.c index a880e81..d144683 100755 --- a/User/bsp/src/bsp_power_tvcc.c +++ b/User/bsp/src/bsp_power_tvcc.c @@ -319,7 +319,7 @@ void bsp_InitTVCC(void) /* 第1步:打开GPIO时钟 */ ALL_TVCC_GPIO_CLK_ENABLE(); - TVCC_OFF(); + //TVCC_OFF(); gpio_init.Mode = GPIO_MODE_OUTPUT_PP; /* 设置开漏输出 */ gpio_init.Pull = GPIO_NOPULL; /* 上下拉电阻不使能 */ @@ -327,7 +327,7 @@ void bsp_InitTVCC(void) gpio_init.Pin = TVCC_EN_PIN; HAL_GPIO_Init(TVCC_EN_GPIO, &gpio_init); - bsp_InitMCP4018(); /* 初始化数字电位器 */ + //bsp_InitMCP4018(); /* 初始化数字电位器 */ } /* diff --git a/User/bsp/src/bsp_tft_st7789.c b/User/bsp/src/bsp_tft_st7789.c index 111d964..5c44794 100755 --- a/User/bsp/src/bsp_tft_st7789.c +++ b/User/bsp/src/bsp_tft_st7789.c @@ -311,6 +311,21 @@ static void ST7789_ConfigGPIO(void) * 返 回 值: 无 ********************************************************************************************************* */ +void ST7789_DrawScreenHard(void) +{ + ST7789_SetDispWin(0, 0, 240, 240); + + bsp_InitSPI5ParamFast(); + LCD_RS_1(); + LCD_CS_0(); /* 在DMA传输完毕后设置1 */ + + wTransferState = 0; + + HAL_SPI_Transmit_DMA(&hspi5, (uint8_t *)(0x30000000), 240 * 240); + + while (wTransferState == 0){} +} + void ST7789_DrawScreen(void) { #if LCD_DMA_CIRCULE_MODE == 1 @@ -348,17 +363,7 @@ void ST7789_DrawScreen(void) s_DispRefresh = 0; - ST7789_SetDispWin(0, 0, 240, 240); - - bsp_InitSPI5ParamFast(); - LCD_RS_1(); - LCD_CS_0(); /* 在DMA传输完毕后设置1 */ - - wTransferState = 0; - - HAL_SPI_Transmit_DMA(&hspi5, (uint8_t *)(0x30000000), 240 * 240); - - while (wTransferState == 0){} + ST7789_DrawScreenHard(); s_time1 = bsp_GetRunTime(); diff --git a/User/bsp/src/bsp_timer.c b/User/bsp/src/bsp_timer.c index 13c7e30..70537a4 100755 --- a/User/bsp/src/bsp_timer.c +++ b/User/bsp/src/bsp_timer.c @@ -82,7 +82,7 @@ static SOFT_TMR s_tTmr[TMR_COUNT] = {0}; 全局运行时间,单位1ms 最长可以表示 24.85天,如果你的产品连续运行时间超过这个数,则必须考虑溢出问题 */ -__IO int32_t g_iRunTime = 0; + __IO uint64_t g_uiTimeHighWord = 0; static __IO uint8_t g_ucEnableSystickISR = 0; /* 等待变量初始化 */ @@ -410,7 +410,7 @@ uint8_t bsp_CheckTimer(uint8_t _id) /* ********************************************************************************************************* * 函 数 名: bsp_GetRunTime -* 功能说明: 获取CPU运行时间,单位1ms。最长可以表示 24.85天, +* 功能说明: 获取CPU运行时间,单位1ms。最长可以表示 2147483647ms = 24.85天 * 如果你的产品连续运行时间超过这个数,则必须考虑溢出问题 * 形 参: 无 * 返 回 值: CPU运行时间,单位1ms @@ -418,20 +418,13 @@ uint8_t bsp_CheckTimer(uint8_t _id) */ int32_t bsp_GetRunTime(void) { -// int32_t runtime; - -// DISABLE_INT(); /* 关中断 */ - -// runtime = g_iRunTime; /* 这个变量在Systick中断中被改写,因此需要关中断进行保护 */ - -// ENABLE_INT(); /* 开中断 */ - -// return runtime; + uint64_t tus; + int32_t ms; - /* 用硬件定时器计时后,4294秒,约 1.19小时 */ - g_iRunTime = (TIM_HARD->CNT / 1000); + tus = (bsp_GetRunTimeUs() / 1000) & 0x7FFFFFFF; /* 取低4字节 */ + ms = tus; - return g_iRunTime; + return ms; } /* @@ -444,20 +437,45 @@ int32_t bsp_GetRunTime(void) */ int32_t bsp_CheckRunTime(int32_t _LastTime) { + uint64_t tus; int32_t now_time; int32_t time_diff; -// DISABLE_INT(); /* 关中断 */ - now_time = TIM_HARD->CNT / 1000; -// ENABLE_INT(); /* 开中断 */ + tus = bsp_GetRunTimeUs() / 1000; + now_time = tus & 0x7FFFFFFF; /* 取低4字节 */ + if (now_time >= _LastTime) { time_diff = now_time - _LastTime; } else { - time_diff = 0x7FFFFFFF - _LastTime + now_time; + time_diff = 0x7FFFFFFF - _LastTime + now_time + 1; + } + + return time_diff; +} + +/* +********************************************************************************************************* +* 函 数 名: bsp_SubRunTime +* 功能说明: 计算逝去时间, 差值范围 0 - 24.85天. +* 形 参: _T0: 时间1, _T1: 比T0晚的时间 +* 返 回 值: 时间差,单位1ms +********************************************************************************************************* +*/ +int32_t bsp_SubRunTime(int32_t _T0, int32_t _T1) +{ + int32_t time_diff; + + if (_T1 >= _T0) + { + time_diff = _T1 - _T0; + } + else + { + time_diff = 0x7FFFFFFF - _T0 + _T1 + 1; } return time_diff; @@ -466,7 +484,7 @@ int32_t bsp_CheckRunTime(int32_t _LastTime) /* ********************************************************************************************************* * 函 数 名: bsp_GetRunTimeUs -* 功能说明: 获取CPU运行时间,单位1ms。最长可以表示 24.85天, +* 功能说明: 获取CPU运行时间,单位1us。最长可以表示 292471年 * 如果你的产品连续运行时间超过这个数,则必须考虑溢出问题 * 形 参: 无 * 返 回 值: CPU运行时间,单位1us. @@ -474,14 +492,18 @@ int32_t bsp_CheckRunTime(int32_t _LastTime) */ uint64_t bsp_GetRunTimeUs(void) { - return TIM_HARD->CNT + g_uiTimeHighWord;; + /* + 7FFF FFFF FFFF FFFF = 9223372036854775807 us = 9223372036854 秒 + = 2562047788 小时 = 106751991 天 = 292471年 + */ + return TIM_HARD->CNT + (g_uiTimeHighWord * 0x100000000); } /* ********************************************************************************************************* * 函 数 名: bsp_CheckRunTimeUs * 功能说明: 计算当前运行时间和给定时刻之间的差值。处理了计数器循环。 -* 形 参: _LastTime 上个时刻 +* 形 参: _LastTime 过去的某个时刻 * 返 回 值: 当前时间和过去时间的差值,单位1us ********************************************************************************************************* */ @@ -490,7 +512,7 @@ int64_t bsp_CheckRunTimeUs(int64_t _LastTime) int64_t now_time; int64_t time_diff; - now_time = TIM_HARD->CNT + g_uiTimeHighWord; + now_time = bsp_GetRunTimeUs(); if (now_time >= _LastTime) { @@ -498,8 +520,7 @@ int64_t bsp_CheckRunTimeUs(int64_t _LastTime) } else { - /* Windwos计算机将 0xFFFFFFFFFFFFFFFF 做 -1处理 */ - time_diff = 0xFFFFFFFFFFFFFFFE - _LastTime + now_time; + time_diff = now_time - _LastTime; /* 负数 */ } return time_diff; diff --git a/User/lua/if/lua_if.c b/User/lua/if/lua_if.c index 56f0893..a12b3e6 100755 --- a/User/lua/if/lua_if.c +++ b/User/lua/if/lua_if.c @@ -146,6 +146,7 @@ void lua_DeInit(void) // 每行执行的钩子函数,用于终止lua程序 extern MEMO_T g_LuaMemo; extern void PG_PrintText(char *_str); +extern uint8_t g_LuaSubStatus; void LuaYeildHook(lua_State *_L, lua_Debug *ar) { if (s_lua_quit == 1) @@ -160,20 +161,24 @@ void LuaYeildHook(lua_State *_L, lua_Debug *ar) uint8_t ucKeyCode; /* 显示Lua程序print的字符串. 内容在bsp_uart_fif文件 fputc 函数填充的 */ - if (g_LuaMemo.Refresh == 1) + if (g_LuaSubStatus == 0) /* 非GUI界面,才执行如下语句 */ { - LCD_SetEncode(ENCODE_GBK); - LCD_DrawMemo(&g_LuaMemo); - LCD_SetEncode(ENCODE_UTF8); + if (g_LuaMemo.Refresh == 1) + { + LCD_SetEncode(ENCODE_GBK); + LCD_DrawMemo(&g_LuaMemo); + LCD_SetEncode(ENCODE_UTF8); + } } - + ucKeyCode = bsp_GetKey2(); /* 读取键值, 无键按下时返回 KEY_NONE = 0 */ if (ucKeyCode != KEY_NONE) { /* 有键按下 */ switch (ucKeyCode) { - case KEY_LONG_DOWN_C: /* C键长按 - 终止Lua */ + case KEY_LONG_DOWN_C: /* C键长按 - 终止Lua */ + while(bsp_GetKey()); /* 清空lua运行期间的按键消息 */ lua_yield(_L, 0); break; @@ -196,6 +201,8 @@ void LuaYeildHook(lua_State *_L, lua_Debug *ar) case KEY_LONG_DOWN_C: /* C键长按 - 终止Lua */ PG_PrintText("用户终止运行"); g_tProg.AutoStart = 0; + + //while(bsp_GetKey()); /* 清空lua运行期间的按键消息 */ lua_yield(_L, 0); break; @@ -260,8 +267,11 @@ void lua_DownLoadFile(char *_path) if (s_lua_prog_len > 0) { s_lua_prog_buf[s_lua_prog_len] = 0; /* 文件末尾补0 */ - } - + } +} + +void lua_RunLuaProg(void) +{ lua_do(s_lua_prog_buf); } @@ -849,7 +859,7 @@ static int get_key(lua_State* L) { uint8_t key; - key = bsp_GetKey(); + key = bsp_GetKey3(); lua_pushnumber(L, key); return 1; } @@ -1106,6 +1116,7 @@ static int lua_WriteDev(lua_State* L) * 返 回 值: 无 ********************************************************************************************************* */ +extern void lua_lcd_RegisterFun(void); static void lua_RegisterFunc(void) { //将指定的函数注册为Lua的全局函数变量,其中第一个字符串参数为Lua代码 @@ -1149,6 +1160,7 @@ static void lua_RegisterFunc(void) lua_reg_RegisterFun(); lua_extio_RegisterFun(); lua_uart_RegisterFun(); + lua_lcd_RegisterFun(); } /***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/ diff --git a/User/lua/if/lua_if.h b/User/lua/if/lua_if.h index 740187c..dbefd05 100755 --- a/User/lua/if/lua_if.h +++ b/User/lua/if/lua_if.h @@ -50,6 +50,7 @@ void lua_Run(void); int lua_CheckGlobal(const char *name); void lua_do(char *buf); void lua_DownLoadFile(char *_path); +void lua_RunLuaProg(void); uint32_t lua_GetVarUint32(const char *_VarName, uint32_t _Default); diff --git a/User/lua/if/lua_if_disp.c b/User/lua/if/lua_if_disp.c new file mode 100644 index 0000000..cb0a05c --- /dev/null +++ b/User/lua/if/lua_if_disp.c @@ -0,0 +1,719 @@ +/* +********************************************************************************************************* +* +* 模块名称 : lua 显示接口 +* 文件名称 : lua_if_disp.c +* 版 本 : V1.0 +* 说 明 : 提供绘图函数、显示函数 +* 修改记录 : +* 版本号 日期 作者 说明 +* v1.0 2020-11-29 armfly 首发 +* +* Copyright (C), 2019-2030, 安富莱电子 www.armfly.com +* +********************************************************************************************************* +*/ + +#include "lauxlib.h" +#include "lualib.h" +#include "time.h" +#include "lua_if.h" +#include "bsp.h" +#include "param.h" +#include "modbus_reg_addr.h" +#include "modbus_register.h" +#include "disp_lib.h" + +/* + API函数 + + lcd_clr(color) --清屏 + lcd_disp_str(x, y, str, fontzize, front_color, back_color) --显示字符串 + lcd_disp_str(x, y, str, fontzize, front_color, back_color, width, align) --显示字符串 + lcd_fill_rect(x, y, h, w, color) --清矩形窗口 + lcd_draw_rect(x, y, h, w, color) + + lcd_draw_circle(x, y, r, color) + lcd_draw_line(x1, y1, x2, y2, color) + lcd_draw_points(xArray, yArray, size, color) + lcd_disp_label(x, y, h, w, color, str, fontzize, front_color, back_color) + + void DispLabelRound(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth, + uint16_t _usColor, char *_pStr, FONT_T *_tFont) + +void LCD_ClrScr(uint16_t _usColor); +void LCD_DispStr(uint16_t _usX, uint16_t _usY, char *_ptr, FONT_T *_tFont); +void LCD_PutPixel(uint16_t _usX, uint16_t _usY, uint16_t _usColor); +uint16_t LCD_GetPixel(uint16_t _usX, uint16_t _usY); +void LCD_DrawLine(uint16_t _usX1, uint16_t _usY1, uint16_t _usX2, uint16_t _usY2, uint16_t _usColor); +void LCD_DrawPoints(uint16_t *x, uint16_t *y, uint16_t _usSize, uint16_t _usColor); +void LCD_DrawRect(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth, uint16_t _usColor); +void LCD_DrawCircle(uint16_t _usX, uint16_t _usY, uint16_t _usRadius, uint16_t _usColor); +void LCD_DrawBMP(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth, uint16_t *_ptr); +void LCD_SetBackLight(uint8_t _bright); +uint8_t LCD_GetBackLight(void); + +void LCD_Fill_Rect(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth, uint16_t _usColor); +*/ +static int lua_RGB565(lua_State* L); +static int lua_LcdRefresh(lua_State* L); +static int lua_LcdClr(lua_State* L); +static int lua_DispStr(lua_State* L); +static int lua_FillRect(lua_State* L); +static int lua_DrawRect(lua_State* L); +static int lua_DrawCircle(lua_State* L); +static int lua_DrawLine(lua_State* L); +static int lua_DrawPoints(lua_State* L); +static int lua_DrawLabel(lua_State* L); + +/* +********************************************************************************************************* +* 函 数 名: lua_adc_RegisterFun +* 功能说明: 注册lua C语言接口函数 +* 形 参: 无 +* 返 回 值: 无 +********************************************************************************************************* +*/ +void lua_lcd_RegisterFun(void) +{ + //将指定的函数注册为Lua的全局函数变量,其中第一个字符串参数为Lua代码 + //在调用C函数时使用的全局函数名,第二个参数为实际C函数的指针。 + lua_register(g_Lua, "RGB565", lua_RGB565); + lua_register(g_Lua, "lcd_refresh", lua_LcdRefresh); + lua_register(g_Lua, "lcd_clr", lua_LcdClr); + lua_register(g_Lua, "lcd_disp_str", lua_DispStr); + lua_register(g_Lua, "lcd_fill_rect", lua_FillRect); + lua_register(g_Lua, "lcd_draw_rect", lua_DrawRect); + lua_register(g_Lua, "lcd_draw_circle", lua_DrawCircle); + lua_register(g_Lua, "lcd_draw_line", lua_DrawLine); + lua_register(g_Lua, "lcd_draw_points", lua_DrawPoints); + lua_register(g_Lua, "lcd_disp_label", lua_DrawLabel); +} + +/* +********************************************************************************************************* +* 函 数 名: lua_LcdRefresh +* 功能说明: lcd_refresh() +* 形 参: 无 +* 返 回 值: 无 +********************************************************************************************************* +*/ +extern void ST7789_DrawScreenHard(void); +static int lua_LcdRefresh(lua_State* L) +{ + ST7789_DrawScreenHard(); + return 0; +} + +/* +********************************************************************************************************* +* 函 数 名: lua_RGB565 +* 功能说明: RGB565(255,255,255) 颜色转换为565 +* 形 参: R : G : B 红蓝分量(0-255) +* 返 回 值: 无 +********************************************************************************************************* +*/ +static int lua_RGB565(lua_State* L) +{ + uint16_t r,g,b; + uint16_t color = 0; + + if (lua_type(L, 1) == LUA_TNUMBER) + { + r = luaL_checknumber(L, 1); + if (lua_type(L, 2) == LUA_TNUMBER) + { + g = luaL_checknumber(L, 2); + if (lua_type(L, 3) == LUA_TNUMBER) + { + b = luaL_checknumber(L, 3); + + color = RGB(r,g,b); + } + } + } + + lua_pushnumber(L, color); + return 1; +} + +/* +********************************************************************************************************* +* 函 数 名: lua_LcdClr +* 功能说明: lcd_clr(color) --清屏 +* 形 参: color : 颜色 RGB565格式 +* 返 回 值: 无 +********************************************************************************************************* +*/ +static int lua_LcdClr(lua_State* L) +{ + uint16_t color; + + if (lua_type(L, 1) == LUA_TNUMBER) /* 第1个参数 */ + { + color = luaL_checknumber(L, 1); + } + + LCD_ClrScr(color); + + return 0; +} + +/* +********************************************************************************************************* +* 函 数 名: lua_DispStr +* 功能说明: lcd_disp_str(x, y, str, fontzize, front_color, back_color, width, align) --显示字符串 +* 形 参: ... +* 返 回 值: 无 +********************************************************************************************************* +*/ +static int lua_DispStr(lua_State* L) +{ + uint16_t x, y; + const char *str; + size_t len; + uint8_t fontzize; + uint16_t front_color, back_color; + uint16_t width; + uint8_t align; + + /* 第1个参数 */ + if (lua_type(L, 1) == LUA_TNUMBER) + { + x = luaL_checknumber(L, 1); + } + else + { + return 0; + } + + /* 第2个参数 */ + if (lua_type(L, 2) == LUA_TNUMBER) + { + y = luaL_checknumber(L, 2); + } + else + { + return 0; + } + + /* 第3个参数 */ + if (lua_type(L, 3) == LUA_TSTRING) + { + str = luaL_checklstring(L, 3, &len); + } + else + { + return 0; + } + + /* 第4个参数 */ + if (lua_type(L, 4) == LUA_TNUMBER) + { + fontzize = luaL_checknumber(L, 4); + } + else + { + return 0; + } + + /* 第5个参数 */ + if (lua_type(L, 5) == LUA_TNUMBER) + { + front_color = luaL_checknumber(L, 5); + } + else + { + return 0; + } + + /* 第6个参数 */ + if (lua_type(L, 6) == LUA_TNUMBER) + { + back_color = luaL_checknumber(L, 6); + } + else + { + return 0; + } + + /* 第7个参数 */ + if (lua_type(L, 7) == LUA_TNUMBER) + { + width = luaL_checknumber(L, 7); + } + else + { + return 0; + } + + /* 第8个参数 */ + if (lua_type(L, 8) == LUA_TNUMBER) + { + align = luaL_checknumber(L, 8); + } + else + { + return 0; + } + + { + FONT_T tFont; + + if (fontzize == 12) tFont.FontCode = FC_ST_12; + else if (fontzize == 16) tFont.FontCode = FC_ST_16; + else if (fontzize == 24) tFont.FontCode = FC_ST_24; + else if (fontzize == 32) tFont.FontCode = FC_ST_32; + else { + return 0; + } + tFont.FrontColor = front_color; /* 字体颜色 */ + tFont.BackColor = back_color; /* 文字背景颜色 */ + tFont.Space = 0; + + LCD_SetEncode(ENCODE_GBK); + LCD_DispStrEx(x, y, (char *)str, &tFont, width, align); + LCD_SetEncode(ENCODE_UTF8); + } + return 0; +} + +/* +********************************************************************************************************* +* 函 数 名: lua_FillRect +* 功能说明: lcd_fill_rect(x, y, h, w, color) --清矩形窗口 +* 形 参: ... +* 返 回 值: 无 +********************************************************************************************************* +*/ +static int lua_FillRect(lua_State* L) +{ + uint16_t x, y, h, w; + uint16_t color; + + /* 第1个参数 */ + if (lua_type(L, 1) == LUA_TNUMBER) + { + x = luaL_checknumber(L, 1); + } + else + { + return 0; + } + + /* 第2个参数 */ + if (lua_type(L, 2) == LUA_TNUMBER) + { + y = luaL_checknumber(L, 2); + } + else + { + return 0; + } + + /* 第3个参数 */ + if (lua_type(L, 3) == LUA_TNUMBER) + { + h = luaL_checknumber(L, 3); + } + else + { + return 0; + } + + /* 第4个参数 */ + if (lua_type(L, 4) == LUA_TNUMBER) + { + w = luaL_checknumber(L, 4); + } + else + { + return 0; + } + + /* 第5个参数 */ + if (lua_type(L, 5) == LUA_TNUMBER) + { + color = luaL_checknumber(L, 5); + } + else + { + return 0; + } + + LCD_Fill_Rect(x, y, h, w, color); + + return 0; +} + +/* +********************************************************************************************************* +* 函 数 名: lua_DrawRect +* 功能说明: lcd_draw_rect(x, y, h, w, color) --清矩形窗口 +* 形 参: ... +* 返 回 值: 无 +********************************************************************************************************* +*/ +static int lua_DrawRect(lua_State* L) +{ + uint16_t x, y, h, w; + uint16_t color; + + /* 第1个参数 */ + if (lua_type(L, 1) == LUA_TNUMBER) + { + x = luaL_checknumber(L, 1); + } + else + { + return 0; + } + + /* 第2个参数 */ + if (lua_type(L, 2) == LUA_TNUMBER) + { + y = luaL_checknumber(L, 2); + } + else + { + return 0; + } + + /* 第3个参数 */ + if (lua_type(L, 3) == LUA_TNUMBER) + { + h = luaL_checknumber(L, 3); + } + else + { + return 0; + } + + /* 第4个参数 */ + if (lua_type(L, 4) == LUA_TNUMBER) + { + w = luaL_checknumber(L, 4); + } + else + { + return 0; + } + + /* 第5个参数 */ + if (lua_type(L, 5) == LUA_TNUMBER) + { + color = luaL_checknumber(L, 5); + } + else + { + return 0; + } + + LCD_DrawRect(x, y, h, w, color); + + return 0; +} + + +/* +********************************************************************************************************* +* 函 数 名: lua_DrawCircle +* 功能说明: lcd_fill_circle(x, y, r, color) +* 形 参: ... +* 返 回 值: 无 +********************************************************************************************************* +*/ +static int lua_DrawCircle(lua_State* L) +{ + uint16_t x, y, r; + uint16_t color; + + /* 第1个参数 */ + if (lua_type(L, 1) == LUA_TNUMBER) + { + x = luaL_checknumber(L, 1); + } + else + { + return 0; + } + + /* 第2个参数 */ + if (lua_type(L, 2) == LUA_TNUMBER) + { + y = luaL_checknumber(L, 2); + } + else + { + return 0; + } + + /* 第3个参数 */ + if (lua_type(L, 3) == LUA_TNUMBER) + { + r = luaL_checknumber(L, 3); + } + else + { + return 0; + } + + /* 第4个参数 */ + if (lua_type(L, 4) == LUA_TNUMBER) + { + color = luaL_checknumber(L, 4); + } + else + { + return 0; + } + + LCD_DrawCircle(x, y, r, color); + return 0; +} + +/* +********************************************************************************************************* +* 函 数 名: lua_DrawLine +* 功能说明: lcd_draw_line(x1, y1, x2, y2, color) +* 形 参: ... +* 返 回 值: 无 +********************************************************************************************************* +*/ +static int lua_DrawLine(lua_State* L) +{ + uint16_t x1, y1, x2, y2; + uint16_t color; + + /* 第1个参数 */ + if (lua_type(L, 1) == LUA_TNUMBER) + { + x1 = luaL_checknumber(L, 1); + } + else + { + return 0; + } + + /* 第2个参数 */ + if (lua_type(L, 2) == LUA_TNUMBER) + { + y1 = luaL_checknumber(L, 2); + } + else + { + return 0; + } + + /* 第3个参数 */ + if (lua_type(L, 3) == LUA_TNUMBER) + { + x2 = luaL_checknumber(L, 3); + } + else + { + return 0; + } + + /* 第4个参数 */ + if (lua_type(L, 4) == LUA_TNUMBER) + { + y2 = luaL_checknumber(L, 4); + } + else + { + return 0; + } + + /* 第5个参数 */ + if (lua_type(L, 5) == LUA_TNUMBER) + { + color = luaL_checknumber(L, 4); + } + else + { + return 0; + } + + LCD_DrawLine(x1, y1, x2, y2, color); + return 0; +} + +/* +********************************************************************************************************* +* 函 数 名: lua_DrawCircle +* 功能说明: lcd_draw_line(x, y, r, color) +* 形 参: ... +* 返 回 值: 无 +********************************************************************************************************* +*/ +static int lua_DrawPoints(lua_State* L) +{ + const char *pX; + const char *pY; + size_t len; + uint16_t count; + uint16_t color; + + /* 第1个参数 */ + if (lua_type(L, 1) == LUA_TSTRING) + { + pX = luaL_checklstring(L, 1, &len); + } + else + { + return 0; + } + + /* 第2个参数 */ + if (lua_type(L, 2) == LUA_TSTRING) + { + pY = luaL_checklstring(L, 2, &len); + } + else + { + return 0; + } + + /* 第3个参数 */ + if (lua_type(L, 3) == LUA_TNUMBER) + { + count = luaL_checknumber(L, 3); + } + else + { + return 0; + } + + /* 第4个参数 */ + if (lua_type(L, 4) == LUA_TNUMBER) + { + color = luaL_checknumber(L, 4); + } + else + { + return 0; + } + + { + uint16_t i; + uint16_t x1, y1; + uint16_t x2, y2; + + for (i = 0; i < count - 1; i++) + { + x1 = (pX[0] << 8) + pX[1]; + x2 = (pX[2] << 8) + pX[3]; + pX += 2; + + + y1 = (pY[0] << 8) + pY[1]; + y2 = (pY[2] << 8) + pY[3]; + pY += 2; + + LCD_DrawLine(x1, y1, x2, y2, color); + } + } + + return 0; +} + + +/* +********************************************************************************************************* +* 函 数 名: lua_DrawLabel +* 功能说明: lcd_disp_label(x, y, h, w, color, str, fontzize, front_color, back_color) +* 形 参: ... +* 返 回 值: 无 +********************************************************************************************************* +*/ +static int lua_DrawLabel(lua_State* L) +{ + uint16_t x, y, h, w; + uint16_t color; + const char *str; + size_t len; + uint16_t fontzize, front_color, back_color; + + /* 第1个参数 */ + if (lua_type(L, 1) == LUA_TNUMBER) + { + x = luaL_checknumber(L, 1); + } + else + { + return 0; + } + + /* 第2个参数 */ + if (lua_type(L, 2) == LUA_TNUMBER) + { + y = luaL_checknumber(L, 2); + } + else + { + return 0; + } + + /* 第3个参数 */ + if (lua_type(L, 3) == LUA_TNUMBER) + { + h = luaL_checknumber(L, 3); + } + else + { + return 0; + } + + /* 第4个参数 */ + if (lua_type(L, 4) == LUA_TNUMBER) + { + w = luaL_checknumber(L, 4); + } + else + { + return 0; + } + + /* 第5个参数 */ + if (lua_type(L, 5) == LUA_TNUMBER) + { + color = luaL_checknumber(L, 5); + } + else + { + return 0; + } + + /* 第6个参数 */ + if (lua_type(L, 6) == LUA_TSTRING) + { + str = luaL_checklstring(L, 6, &len); + } + else + { + return 0; + } + + { + FONT_T tFont; + + if (fontzize == 12) tFont.FontCode = FC_ST_12; + else if (fontzize == 16) tFont.FontCode = FC_ST_16; + else if (fontzize == 24) tFont.FontCode = FC_ST_24; + else if (fontzize == 32) tFont.FontCode = FC_ST_32; + else { + return 0; + } + tFont.FrontColor = front_color; /* 字体颜色 */ + tFont.BackColor = back_color; /* 文字背景颜色 */ + tFont.Space = 0; + + DispLabelRound(x, y, h, w, color, (char *)str, &tFont); + } + + return 0; +} + + +/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/