lua接口增加LCD显示函数,DAP固件修改硬件复位缺陷

This commit is contained in:
armfly 2020-12-04 02:49:54 +08:00
parent 0ab5e357af
commit 8e9cc9e242
24 changed files with 1121 additions and 283 deletions

View File

@ -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 【重大更新】
新增功能:

View File

@ -256,7 +256,7 @@
<Group>
<GroupName>App</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@ -552,7 +552,7 @@
<Group>
<GroupName>BSP</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@ -1016,7 +1016,7 @@
<Group>
<GroupName>MDK-ARM</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@ -1708,7 +1708,7 @@
<Group>
<GroupName>Doc</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@ -3632,6 +3632,18 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>19</GroupNumber>
<FileNumber>270</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\User\lua\if\lua_if_disp.c</PathWithFileName>
<FilenameWithoutPath>lua_if_disp.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
@ -3642,7 +3654,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>20</GroupNumber>
<FileNumber>270</FileNumber>
<FileNumber>271</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3654,7 +3666,7 @@
</File>
<File>
<GroupNumber>20</GroupNumber>
<FileNumber>271</FileNumber>
<FileNumber>272</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3666,7 +3678,7 @@
</File>
<File>
<GroupNumber>20</GroupNumber>
<FileNumber>272</FileNumber>
<FileNumber>273</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3678,7 +3690,7 @@
</File>
<File>
<GroupNumber>20</GroupNumber>
<FileNumber>273</FileNumber>
<FileNumber>274</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3690,7 +3702,7 @@
</File>
<File>
<GroupNumber>20</GroupNumber>
<FileNumber>274</FileNumber>
<FileNumber>275</FileNumber>
<FileType>1</FileType>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3702,7 +3714,7 @@
</File>
<File>
<GroupNumber>20</GroupNumber>
<FileNumber>275</FileNumber>
<FileNumber>276</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3714,7 +3726,7 @@
</File>
<File>
<GroupNumber>20</GroupNumber>
<FileNumber>276</FileNumber>
<FileNumber>277</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3734,7 +3746,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>21</GroupNumber>
<FileNumber>277</FileNumber>
<FileNumber>278</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3746,7 +3758,7 @@
</File>
<File>
<GroupNumber>21</GroupNumber>
<FileNumber>278</FileNumber>
<FileNumber>279</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3758,7 +3770,7 @@
</File>
<File>
<GroupNumber>21</GroupNumber>
<FileNumber>279</FileNumber>
<FileNumber>280</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3770,7 +3782,7 @@
</File>
<File>
<GroupNumber>21</GroupNumber>
<FileNumber>280</FileNumber>
<FileNumber>281</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3782,7 +3794,7 @@
</File>
<File>
<GroupNumber>21</GroupNumber>
<FileNumber>281</FileNumber>
<FileNumber>282</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3794,7 +3806,7 @@
</File>
<File>
<GroupNumber>21</GroupNumber>
<FileNumber>282</FileNumber>
<FileNumber>283</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3814,7 +3826,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>22</GroupNumber>
<FileNumber>283</FileNumber>
<FileNumber>284</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3826,7 +3838,7 @@
</File>
<File>
<GroupNumber>22</GroupNumber>
<FileNumber>284</FileNumber>
<FileNumber>285</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3838,7 +3850,7 @@
</File>
<File>
<GroupNumber>22</GroupNumber>
<FileNumber>285</FileNumber>
<FileNumber>286</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3858,7 +3870,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>23</GroupNumber>
<FileNumber>286</FileNumber>
<FileNumber>287</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3870,7 +3882,7 @@
</File>
<File>
<GroupNumber>23</GroupNumber>
<FileNumber>287</FileNumber>
<FileNumber>288</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3882,7 +3894,7 @@
</File>
<File>
<GroupNumber>23</GroupNumber>
<FileNumber>288</FileNumber>
<FileNumber>289</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3894,7 +3906,7 @@
</File>
<File>
<GroupNumber>23</GroupNumber>
<FileNumber>289</FileNumber>
<FileNumber>290</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3906,7 +3918,7 @@
</File>
<File>
<GroupNumber>23</GroupNumber>
<FileNumber>290</FileNumber>
<FileNumber>291</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3926,7 +3938,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>24</GroupNumber>
<FileNumber>291</FileNumber>
<FileNumber>292</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3938,7 +3950,7 @@
</File>
<File>
<GroupNumber>24</GroupNumber>
<FileNumber>292</FileNumber>
<FileNumber>293</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3950,7 +3962,7 @@
</File>
<File>
<GroupNumber>24</GroupNumber>
<FileNumber>293</FileNumber>
<FileNumber>294</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3962,7 +3974,7 @@
</File>
<File>
<GroupNumber>24</GroupNumber>
<FileNumber>294</FileNumber>
<FileNumber>295</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3974,7 +3986,7 @@
</File>
<File>
<GroupNumber>24</GroupNumber>
<FileNumber>295</FileNumber>
<FileNumber>296</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3986,7 +3998,7 @@
</File>
<File>
<GroupNumber>24</GroupNumber>
<FileNumber>296</FileNumber>
<FileNumber>297</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -3998,7 +4010,7 @@
</File>
<File>
<GroupNumber>24</GroupNumber>
<FileNumber>297</FileNumber>
<FileNumber>298</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -4018,7 +4030,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>25</GroupNumber>
<FileNumber>298</FileNumber>
<FileNumber>299</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -4030,7 +4042,7 @@
</File>
<File>
<GroupNumber>25</GroupNumber>
<FileNumber>299</FileNumber>
<FileNumber>300</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -4050,7 +4062,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>26</GroupNumber>
<FileNumber>300</FileNumber>
<FileNumber>301</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -4062,7 +4074,7 @@
</File>
<File>
<GroupNumber>26</GroupNumber>
<FileNumber>301</FileNumber>
<FileNumber>302</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -4074,7 +4086,7 @@
</File>
<File>
<GroupNumber>26</GroupNumber>
<FileNumber>302</FileNumber>
<FileNumber>303</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -4086,7 +4098,7 @@
</File>
<File>
<GroupNumber>26</GroupNumber>
<FileNumber>303</FileNumber>
<FileNumber>304</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -4098,7 +4110,7 @@
</File>
<File>
<GroupNumber>26</GroupNumber>
<FileNumber>304</FileNumber>
<FileNumber>305</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -4110,7 +4122,7 @@
</File>
<File>
<GroupNumber>26</GroupNumber>
<FileNumber>305</FileNumber>
<FileNumber>306</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -4122,7 +4134,7 @@
</File>
<File>
<GroupNumber>26</GroupNumber>
<FileNumber>306</FileNumber>
<FileNumber>307</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -4142,7 +4154,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>27</GroupNumber>
<FileNumber>307</FileNumber>
<FileNumber>308</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -4154,7 +4166,7 @@
</File>
<File>
<GroupNumber>27</GroupNumber>
<FileNumber>308</FileNumber>
<FileNumber>309</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -4166,7 +4178,7 @@
</File>
<File>
<GroupNumber>27</GroupNumber>
<FileNumber>309</FileNumber>
<FileNumber>310</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -4178,7 +4190,7 @@
</File>
<File>
<GroupNumber>27</GroupNumber>
<FileNumber>310</FileNumber>
<FileNumber>311</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -4190,7 +4202,7 @@
</File>
<File>
<GroupNumber>27</GroupNumber>
<FileNumber>311</FileNumber>
<FileNumber>312</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -4202,7 +4214,7 @@
</File>
<File>
<GroupNumber>27</GroupNumber>
<FileNumber>312</FileNumber>
<FileNumber>313</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -4222,7 +4234,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>28</GroupNumber>
<FileNumber>313</FileNumber>
<FileNumber>314</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -4234,7 +4246,7 @@
</File>
<File>
<GroupNumber>28</GroupNumber>
<FileNumber>314</FileNumber>
<FileNumber>315</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -4246,7 +4258,7 @@
</File>
<File>
<GroupNumber>28</GroupNumber>
<FileNumber>315</FileNumber>
<FileNumber>316</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -4258,7 +4270,7 @@
</File>
<File>
<GroupNumber>28</GroupNumber>
<FileNumber>316</FileNumber>
<FileNumber>317</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -4278,7 +4290,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>29</GroupNumber>
<FileNumber>317</FileNumber>
<FileNumber>318</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -4290,7 +4302,7 @@
</File>
<File>
<GroupNumber>29</GroupNumber>
<FileNumber>318</FileNumber>
<FileNumber>319</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>

View File

@ -1920,6 +1920,11 @@
<FileType>1</FileType>
<FilePath>..\..\User\lua\if\lua_if_swim.c</FilePath>
</File>
<File>
<FileName>lua_if_disp.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\User\lua\if\lua_if_disp.c</FilePath>
</File>
</Files>
</Group>
<Group>

View File

@ -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

Binary file not shown.

View File

@ -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);

View File

@ -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();

View File

@ -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);

View File

@ -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;

View File

@ -145,7 +145,7 @@ void status_MonitorCan(void)
LCD_SetEncode(ENCODE_GBK);
UartMonInitParam(g_MainStatus);
UartMonInitParam(MODIFY_PARAM_UART_MON);
UartMonCheckParam(); /* 检查参数 */
fInit = 1;

View File

@ -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;
}
}
}
}
}
}
}

View File

@ -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");

View File

@ -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;

View File

@ -83,7 +83,7 @@ void bsp_Init(void)
HC595_InitHard(); /* 配置示波器模块上的GPIO芯片 */
bsp_InitDAC1(); /* 配置DAC引脚 */
bsp_InitTVCC(); /* TVCC控制引脚 */
//bsp_InitTVCC(); /* TVCC控制引脚 -- 放到后面读完参数后设置 */
bsp_InitMCP4725(); /* 示波器偏置电压 */

View File

@ -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);

View File

@ -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);

View File

@ -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;
}
/*

View File

@ -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(); /* 初始化数字电位器 */
}
/*

View File

@ -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();

View File

@ -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;

View File

@ -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) *********************************/

View File

@ -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);

719
User/lua/if/lua_if_disp.c Normal file
View File

@ -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) *********************************/