日期作者版本說明
2020.12.02
mr.zheng
v1.1
lua簡單倒計時的實現
備註在儀器設計開發過程中,經常涉及到工控屏的ui介面設計與儀器功能的邏輯控制實現,lua語言就是乙個非常適合工控屏的程式語言
下面就要細緻講解一下lua語言如何實現倒計時
首先給自己提出乙個問題:如何才能實現倒著計數這一過程,如果有經驗的話就會想到給時分秒整合成總秒數然後令這個總秒數自減實現倒著計數這一邏輯,可以跳過這段話,沒有經驗的繼續往下看:
整合成總秒數設為乙個計數變數,令這個數按照每一秒時間自減,然後把這個每秒都會減一的計數變數還原成時分秒,這樣就可以實現時分秒的倒計時顯示了,邏輯成立,實踐開始。
我所用的與晶元通訊的協議為modbus協議,需要根據modbus協議進行變數呼叫。
乙個最簡單的倒計時需要如下幾個變數:
1.時、2.分、3.秒、4、總時間、5、計數
注:後續增加變數與功能會明確提出的
注:為了簡化過程,後續倒計時只使用分與秒,時分秒與分秒同理,不做贅述。
**如下:
--這是分與秒的計算與顯示
min=count /
60 sec=math.fmod (count,60)
set_variant
("min"
,min)
set_variant
("sec"
,sec)
print
(min)
print
(sec)
兩種常見的啟用倒計時的方式:一種為if語句控制,一種為tft工控屏按鈕控制,均很常用。
if語句控制**如下:
if stt ==
1 then
get_value(4
,29) local ms=
get_value(4
,29)print
(ms)
set_variant
("ms"
,ms)
start_timer(0
, ms,1,
0)set_variant
("stt",0
) end
工控屏按鈕控制**如下:
function on_control_notify
(screen,control,value)
if screen ==
0 then
if control ==
2 and value ==
1 then
get_value(4
,29) local ms=
get_value(4
,29)print
(ms)
set_variant
("ms"
,ms)
start_timer(0
, ms,1,
0) end
endend
倒計時啟動後,就該進行計數的自減過程了
**如下:
function on_timer
(timer_id)
if timer_id ==
0 then
--這裡是定時開始
--這是倒計時功能中的總數字倒計時
get_value(0
,31)--獲取到count值
local count=
get_value(0
,31)--賦值count
count=count-
1--自減
print
(count)
--列印count值
set_variant
("count"
,count)
--賦值給變數
--這是分與秒的計算與顯示
min=count /
60 sec=math.fmod (count,60)
set_variant
("min"
,min)
set_variant
("sec"
,sec)
--set_variant
("mjis"
,mjis)
print
(min)
print
(sec)
--print
(mjis)
endend
倒計時結束後停止計時,可以根據需求增設其他功能
**如下:
if count ==
0 then
--停止定時器0
stop_timer(0
)set_variant
("stp",1
)print
(stp)
下篇博文將講解倒計時複雜過程實現、週期性倒計時功能、倒計時誤差比例修正。
lua 計算倒計時,天 周 月倒計時
通過伺服器時間 獲得明天零點的時間戳 function getnextdayzerotime timenum 獲得當前伺服器的時間 local t1 timenum if not t1 then t1 systemtime end 獲得時間格式 local tab os.date t t1 tab....
Lua 實現倒計時功能
lua 實現倒計時功能 local size ccdirector shareddirector getwinsize local scheduler ccdirector shareddirector getscheduler local run logic nil 時 分 秒 數值 local ...
倒計時本機當前時間與開始時間對比 倒計時實時重新整理
功能 獲取當前時間,獲取開始時間,計算兩者時間差,轉為天時分秒,兩者的時間差為毫秒數,除以1000得到秒數,除以60得到分鐘數。小於15分大於0分開始倒計時,小於0分變為00 00.倒計時 var lefttime var timeinterval timeinterval setinterval ...