在工業(yè)自動(dòng)化領(lǐng)域,用戶(hù)產(chǎn)品經(jīng)常會(huì)有密碼登錄的需求,通過(guò)單片機(jī)編程實(shí)現(xiàn)設(shè)置及修改密碼程序。一說(shuō)到密碼,我們首先可能想到的是,先在單片機(jī)里面存儲(chǔ)一個(gè)初始密碼,然后在觸摸屏輸入一個(gè)密碼數(shù)字,通過(guò)串口下發(fā)給單片機(jī),單片機(jī)判斷這個(gè)數(shù)字是否跟初始密碼一致,來(lái)判斷密碼的正確的,然后可以進(jìn)行一些修改或其他的操作。當(dāng)然,這種原始的方法也不是不可行,但是,隨著觸摸屏組態(tài)軟件的強(qiáng)大,很多操作都不需要單片機(jī)來(lái)直接參與,就能實(shí)現(xiàn)密碼登錄、密碼修改等。市面上很多人機(jī)界面都有這個(gè)功能,迪文DGUS屏自然也不例外。
迪文DGUS屏通過(guò)自身二次開(kāi)發(fā)平臺(tái)(DWIN_OS)便可以輕松實(shí)現(xiàn)密碼功能,省去了單片機(jī)編程,為我們的開(kāi)發(fā)帶來(lái)了極大的方便。本文在迪文官方提供的例程上做了一些修改,詳細(xì)介紹了通過(guò)組態(tài)軟件和OS程序來(lái)設(shè)置修改密碼的方法,關(guān)于OS指令的詳細(xì)說(shuō)明請(qǐng)參考官方提供的資料《基于DWIN_OS指令的理解與應(yīng)用(os詳細(xì)文檔指導(dǎo)資料)》。
首先,我們把需要用到的界面圖片準(zhǔn)備好,大致如下所示:
然后,建立一個(gè)新的工程,由于建立工程的步驟,前面的例程已經(jīng)詳細(xì)介紹過(guò)了,在此就不再贅述,不清楚如何建立工程的讀者,請(qǐng)仔細(xì)閱讀前面的章節(jié)。如有需要源碼,可以站內(nèi)私信筆者。
這里需要特別提醒一下讀者,因?yàn)楸纠行枰玫絆S,所以在工程配置的時(shí)候,需要勾選“啟用OS”選項(xiàng);
本例中,主要演示了如下功能:
1.????? 在“自動(dòng)模式”界面,按下“手動(dòng)模式”按鍵,會(huì)出現(xiàn)密碼輸入框,只有密碼輸入正確,才能跳轉(zhuǎn)到“手動(dòng)模式”;
2.????? 在“自動(dòng)模式”或“手動(dòng)模式”界面,按“密碼管理”按鍵,密碼輸入正確后可進(jìn)入到“密碼管理”界面,在此界面,用戶(hù)可以修改密碼;
3.????? 在官方給的“密碼登陸與改寫(xiě)”例程基礎(chǔ)上,增加了按鍵判斷,即:通過(guò)判斷觸摸屏上的“手動(dòng)模式”按鍵和“密碼管理”按鍵的返回值,來(lái)確定在密碼輸入正確后,是跳轉(zhuǎn)“手動(dòng)模式”界面,還是“密碼管理”界面。這個(gè)功能,在某些場(chǎng)合下是非常有用的。
4.????? 本例中的密碼有兩種,一種是“普通密碼”,用戶(hù)可以任意修改;另外一種則是“超級(jí)密碼”,用戶(hù)不能更改?!俺?jí)密碼”的作用就是為了防止用戶(hù)忘記了自己設(shè)置的密碼,而作為一把萬(wàn)能鑰匙來(lái)重置密碼。
為了照顧新手,筆者在這里,還是給大家簡(jiǎn)單分享一下每個(gè)界面的變量的配置,讀者可以參考該設(shè)置,配置自己的工程。
首先,是“自動(dòng)模式”界面的兩個(gè)“按鍵返回”控件的配置:
接下來(lái)就是“手動(dòng)模式”界面的兩個(gè)“按鍵返回”變量的配置:
然后,就是“密碼管理”界面的變量的配置,這里需要注意的就是,在“新建密碼”輸入框和“再次輸入密碼”輸入框中,均有兩個(gè)變量,一個(gè)是“數(shù)據(jù)變量顯示”控件,另一個(gè)則是“數(shù)據(jù)變量輸入”控件,尤其是需要注意這兩個(gè)變量的地址要一致,并且,由于寫(xiě)變量是用的四個(gè)字節(jié),需要用到兩個(gè)地址控件來(lái)存儲(chǔ),所以,在設(shè)置下一個(gè)變量的地址的時(shí)候,需要加“2”,即,“新建密碼”的變量地址只0x0052,那么“再次輸入”的變量地址就應(yīng)該為0x0054,其他的,大家參考筆者的配置即可。
?
接下來(lái),就是密碼輸入框的配置了,這個(gè)地方之前在將數(shù)字鍵盤(pán)設(shè)計(jì)的時(shí)候也有講過(guò),參考之前的設(shè)計(jì)即可,不過(guò)這里需要記住這個(gè)密碼輸入框的地址是0x0050,因?yàn)樵贠S程序中需要用到。
接下來(lái),就是“密碼錯(cuò)誤”界面的兩個(gè)按鍵的配置,當(dāng)我們密碼輸錯(cuò)的時(shí)候,我們一般會(huì)選擇重新輸入密碼或者不想要輸密碼進(jìn)行后續(xù)操作了,直接返回到主頁(yè)。這個(gè)功能很容易實(shí)現(xiàn),我們只需要添加兩個(gè)“基本觸控”變量即可。
然后,就是我們的密碼修改過(guò)程中可能遇到的情況了,我們一般修改新密碼的時(shí)候,需要輸入兩次新密碼,以確保用戶(hù)輸入的準(zhǔn)確性,反正用戶(hù)誤操作,改了一個(gè)自己都不知道的新密碼。那么,檢查這兩次輸入的密碼是否一致,就顯得很有必要了。當(dāng)密碼輸入正確后,我們跳轉(zhuǎn)到一個(gè)“密碼修改成功”的界面:
然而,并不是每次用戶(hù)都能講兩次密碼輸入成一致,有時(shí)候不小心多點(diǎn)了個(gè)數(shù),或者中間某個(gè)數(shù)輸入錯(cuò)了,這時(shí)候,我們就可以跳轉(zhuǎn)到另外一個(gè)界面來(lái)提示用戶(hù),讓用戶(hù)選擇是繼續(xù)重置密碼呢還是直接退出。
至此,DGUS界面部分設(shè)計(jì)就大功告成了,接下來(lái)的重頭戲,就是OS程序部分了。首先,我們?yōu)榱朔奖?,先把DGUS屏中用到的一些變量的信息,直接以注釋的形式添加到OS程序中,這樣就可以不用去DGUS工程中去一一查看每個(gè)變量的含義了。接下來(lái),就是兩個(gè)CALL指令,即:調(diào)用子程序指令。調(diào)用完成后,以END結(jié)束,在下一個(gè)DGUS屏的周期到來(lái),再開(kāi)始調(diào)用子程序。
在每次一次調(diào)用子程序后,都會(huì)執(zhí)行一個(gè)RET—子程序調(diào)用返回指令。
接下來(lái),我們看下密碼校驗(yàn)部分,在我們輸入完密碼,按下“OK”鍵后,OS程序就會(huì)自動(dòng)來(lái)判斷密碼的正確性,前面說(shuō)到了,在本例中,有兩種密碼,一種是普通密碼,另外一種就是超級(jí)密碼了。在新的工程時(shí),本身是沒(méi)有設(shè)置普通密碼的,所以在第一次使用的時(shí)候,需要用超級(jí)密碼權(quán)限在“密碼管理”界面,設(shè)置一個(gè)8位數(shù)以下(含8位數(shù))的非0密碼。OS程序在判斷密碼的時(shí)候,會(huì)首先識(shí)別是不是普通密碼,如果是普通密碼,則直接跳轉(zhuǎn)到“MA_OK”執(zhí)行相關(guān)動(dòng)作;若用戶(hù)輸入的密碼不是普通密碼,則再來(lái)判斷是不是超級(jí)密碼,如果是超級(jí)密碼,同樣跳轉(zhuǎn)到“MA_OK”執(zhí)行相關(guān)動(dòng)作。若兩者都不是,則跳轉(zhuǎn)到“MA_ERR”,執(zhí)行相關(guān)動(dòng)作。這一部分的完整代碼如下圖所示:
在密碼輸入正確后,我們?cè)賮?lái)識(shí)別此時(shí)是應(yīng)該跳轉(zhuǎn)到“手動(dòng)模式”界面,還是“密碼管理”界面呢?這里主要是通過(guò)按鍵返回值來(lái)識(shí)別:
l? 當(dāng)變量地址0x1000的返回值是0x0001的時(shí)候,跳轉(zhuǎn)到“手動(dòng)模式”界面;
l? 當(dāng)變量地址0x1000的返回值是0x0003的時(shí)候,跳轉(zhuǎn)到“密碼管理”界面;
當(dāng)然,其中本來(lái)還有一個(gè)返回0x0002的值,跳轉(zhuǎn)到“參數(shù)設(shè)置”界面,筆者故意在本例中刪去了,留個(gè)讀者來(lái)做驗(yàn)證。
接下來(lái)就是“修改密碼”的子程序了,這個(gè)子程序會(huì)判斷“修改完成”按鍵是否按下,然后再來(lái)判斷兩次密碼輸入框里面的數(shù)據(jù)是否一致,如果一致的話(huà),則可以成功修改并保存密碼,若不一致,則跳到錯(cuò)誤界面。
????
關(guān)于迪文DGUS屏密碼的設(shè)計(jì)就簡(jiǎn)單介紹到這了,有關(guān)OS指令部分如有不明白之處,請(qǐng)參考《基于DWIN_OS指令的理解與應(yīng)用(os詳細(xì)文檔指導(dǎo)資料)》,里面有每條指令的詳細(xì)說(shuō)明。更多例程請(qǐng)參考:【跟我學(xué)】基于51單片機(jī)的工業(yè)自動(dòng)化控制系列教程
評(píng)論