——來(lái)自湖南工業(yè)大學(xué)&南華大學(xué)
陳柱老師團(tuán)隊(duì)
本期為大家推送迪文科技校企合作案例——全自動(dòng)智能核酸提取儀。該方案具有直觀的操作界面,通過(guò)屏幕實(shí)時(shí)監(jiān)控設(shè)備狀態(tài)、溫度、時(shí)間等信息,可通過(guò)調(diào)整參數(shù),并集成了紫外消毒、密碼修改等實(shí)用功能,增強(qiáng)了實(shí)驗(yàn)操作的便捷性與數(shù)據(jù)的安全性。同時(shí),設(shè)備還支持實(shí)驗(yàn)啟動(dòng)、暫停及結(jié)束操作,以及HEAP和LED燈光控制,進(jìn)一步確保了實(shí)驗(yàn)的精確性與可靠性。
【演示視頻】
完整開(kāi)發(fā)資料含迪文屏DGUS工程資料與C51代碼,獲取方式:
郵箱:chenzhu220@163.com
【UI素材展示】
【GUI工程設(shè)計(jì)】
圖1
圖2
圖3
圖4
圖5
圖6
<主界面>:主要包括儀器主菜單選擇,HEAP系統(tǒng)(減少氣溶膠污染)、LED(照明)和實(shí)驗(yàn)選擇等。(圖1)
<設(shè)置>:核酸提取儀具體的儀器調(diào)試、參數(shù)設(shè)置等。(圖2)
<新建實(shí)驗(yàn)>:核酸提取儀工作運(yùn)行與工作參數(shù)配置。(圖3)
<紫外消毒>:核酸提取儀開(kāi)啟關(guān)閉紫外線燈滅菌及開(kāi)啟時(shí)間的設(shè)置等。(圖4)
< 登錄界面 >:通過(guò)輸入密碼解鎖使用權(quán)限。(圖5)
< 密碼修改界面 >:通過(guò)輸入舊密碼來(lái)更換成新密碼。(圖6)
【UI開(kāi)發(fā)示例】
【C51工程設(shè)計(jì)】
C51的代碼量較大,這里以主函數(shù)代碼及各種控件的處理代碼為例。
主函數(shù):
#include "sys.h"
#include "uart4.h"
#include "uart5.h"
#include "touch.h"
#include "tim0.h"
#include "norflash.h"
#include "lab.h"
void main(void)
{
sys_init();
uart4_init(9600);
uart5_init(9600);
timer0_cnt_init();
page_change(25);
touch_init();
while(1)
{
val_addr_handler();
lab_time_handler();
Uart4_Rx_handler();
}
}
控件處理代碼:
void val_addr_handler(void)
{
#define VAL_START_ADDR 0x5000
u8 n;
if(is_addr_scan==0)
{
return;
}
is_addr_scan=0;
if(dwkey_show_scan==1)
{
keyshow_scan(DW_KEY_ADDR,DW_KEYSHOW_ADDR);
keyshow_scan(DW_OLDKEY_ADDR,DW_OLDKEYSHOW_ADDR);
keyshow_scan(DW_CHANGEKEY1_ADDR,DW_CHANGEKEY1SHOW_ADDR);
keyshow_scan(DW_CHANGEKEY2_ADDR,DW_CHANGEKEY2SHOW_ADDR);
}
dwkey_show_scan=0;
sys_read_vp(VAL_START_ADDR,(u8*)&cur_scan_val,SCANLEN); for(n=0;n<SCANLEN;n++)
for(n=0;n<SCANLEN;n++)
{
if(n<=0x05)
{
if(cur_scan_val[n]>0)
{
lab_data_run_view(n);
lab_pop_clear(n,0);
}
}
else if(n==0x06)
{
if(cur_scan_val[n]>0)
{
page_id_update(cur_scan_val[n]);
lab_pop_clear(n,0);
}
}
else if(n==0x07)
{
if(cur_scan_val[n]!=last_scan_val[n])
{
lab_led_con(cur_scan_val[n]);
last_scan_val[n] = cur_scan_val[n];
}
}
else if(n==0x08)
{
if(cur_scan_val[n]>0)
{
lab_uv_con(cur_scan_val[n]);
lab_pop_clear(n,0);
}
}
else if(n==0x09)
{
if(cur_scan_val[n]!=last_scan_val[n])
{
lab_heap_con(cur_scan_val[n]);
last_scan_val[n] = cur_scan_val[n];
}
}
else if(n==0x0A)
{
if(cur_scan_val[n]>0)
{
lab_data_save();
lab_pop_clear(n,0);
}
}
else if(n==0x0B)
{
if(cur_scan_val[n]>0)
{
lab_data_default(n);
lab_pop_clear(n,0);
}
}
else if(n==0x0C)
{
if(cur_scan_val[n]>0)
{
lab_data_modify();
lab_pop_clear(n,0);
}
}
else if(n==0x0D)
{
if(cur_scan_val[n]>0)
{
lab_data_detele();
lab_pop_clear(n,0);
}
}
else if(n==0x0E)
{
if(cur_scan_val[n]>0)
{
lab_start();
lab_pop_clear(n,0);
}
}
else if(n==0x0F)
{
if(cur_scan_val[n]>0)
{
lab_end(1);
lab_pop_clear(n,0);
}
}
else if(n==0x10)
{
if(cur_scan_val[n]!=last_scan_val[n])
{
lab_pause_cont(cur_scan_val[n]);
last_scan_val[n] = cur_scan_val[n];
}
}
else if(n==0x11)
{
if(cur_scan_val[n]>0)
{
lab_page_status(n);
lab_pop_clear(n,0);
}
lab_wash_chooose();
}
else if(n==0x12)
{
if(cur_scan_val[n]>0)
{
lab_data_clear();
lab_pop_clear(n,0);
}
}
else if(n==0x13)
{
if(cur_scan_val[n]>0)
{
cur_scan_val[n] = 0;
sys_write_vp(0x5013,(u8*)&cur_scan_val,1);
touch_lock();
}
}
else if(n==0x14)
{
if(cur_scan_val[n]>0)
{
cur_scan_val[n] = 0;
sys_write_vp(0x5014,(u8*)&cur_scan_val,1);
touch_changekey();
}
}
}
}