白林鋒,朱 軍,雷浩博,陳鞏超,閆森林
(河南科技學(xué)院 信息工程學(xué)院,河南 新鄉(xiāng) 453003)
人機(jī)接口(Human Machine Interface,HMI)串口觸摸屏是近年來單片機(jī)系統(tǒng)常用的輸入輸出外部器件[1],內(nèi)部集成高速微處理器和存儲(chǔ)器。對串口觸摸屏程序進(jìn)行合理開發(fā)后,只需配合接收單片機(jī)串口指令就能實(shí)現(xiàn)文本顯示、圖案顯示、曲線顯示和繪制等功能。由于HMI串口觸摸屏的程序復(fù)雜,對單片機(jī)開發(fā)者要求較高,動(dòng)態(tài)圖像、曲線繪制和動(dòng)態(tài)文本等仍是單片機(jī)系統(tǒng)開發(fā)的難點(diǎn)。
HMI串口觸摸屏一般采用5V直流電壓供電,其背部預(yù)留有電源接口,由于自身搭載處理器,HMI串口觸摸屏可獨(dú)立工作,也可以與單片機(jī)連接實(shí)現(xiàn)串口通信[1]。觸摸屏電路結(jié)構(gòu)如圖1所示,包括處理器、顯示模塊、觸摸點(diǎn)檢測模塊、串口通信模塊和存儲(chǔ)模塊等。應(yīng)用開發(fā)過程中,HMI串口觸摸屏將控制信息以16進(jìn)制的數(shù)據(jù)形式通過串口向單片機(jī)發(fā)送,開發(fā)工作完成后,編譯軟件會(huì)生成可下載的代碼對其燒錄。
圖1 HMI串口觸摸屏電路結(jié)構(gòu)
HMI串口觸摸屏分為X5、X3、K0、T1和T0幾個(gè)系列,其中X5系列功能最多。觸摸屏運(yùn)行時(shí)需要接收單片機(jī)通過串口發(fā)送的控制指令和數(shù)據(jù),數(shù)據(jù)保存在相應(yīng)的寄存器中。
1.2.1 HMI串口觸摸屏通信協(xié)議
單片機(jī)每次通信只能向HMI串口觸摸屏發(fā)送一個(gè)字節(jié)的指令或數(shù)據(jù),并以三個(gè)連續(xù)的“0xff”為結(jié)束標(biāo)志。由于觸摸屏接收的指令為文本形式,單片機(jī)向觸摸屏發(fā)送數(shù)據(jù)時(shí),需要先將指令轉(zhuǎn)換為ASCII碼。
發(fā)送顯示數(shù)據(jù)也可以通過指令加數(shù)據(jù)的方式進(jìn)行,如“prints”和“printh”指令。prints可以發(fā)送變量的數(shù)值,例如某個(gè)控件的數(shù)值可以直接編寫為控件的名稱加上控件屬性;printh直接發(fā)送指定字符,在其后面加入需要發(fā)送的HEX數(shù)據(jù),每個(gè)字節(jié)的數(shù)據(jù)用空格隔開,在發(fā)送指令時(shí)兩者都不會(huì)發(fā)送起始符、空格和終止符。例如發(fā)送數(shù)據(jù)0x01和0x02這兩個(gè)字節(jié)的數(shù)據(jù)時(shí),程序的指令為“printh 01 02”。
1.2.2 波特率設(shè)置
HMI串口觸摸屏的通信方式為串行通信,接口分別為RX和TX,與單片機(jī)通信時(shí)要求有相同的波特率[3]。觸摸屏的波特率在系統(tǒng)運(yùn)行過程中可以進(jìn)行在線設(shè)置,指令有“baud”和“bauds”。baud為當(dāng)前波特率值,在設(shè)備斷電后設(shè)置的波特率丟失;bauds為上電默認(rèn)波特率值,具有斷電保存功能,例如設(shè)置上電默認(rèn)波特率值為9600的指令為“bauds=9600”。表1所示為關(guān)鍵字對應(yīng)的功能。
表1 關(guān)鍵字及其對應(yīng)的功能
HMI串口觸摸屏的上位機(jī)編程軟件為USART HMI,觸摸屏程序保存在Program.s中,在上電時(shí)只執(zhí)行一次[4]。觸摸屏的程序也可以在每個(gè)控件的觸發(fā)事件中編寫,也可以在定時(shí)器之類的工具中編寫。觸摸屏在檢測到控件滿足觸發(fā)條件時(shí)執(zhí)行相應(yīng)的程序,例如定時(shí)器計(jì)時(shí)達(dá)到設(shè)置的時(shí)間就會(huì)觸發(fā)事件。在程序的編寫過程中,每個(gè)語句不是以“;”結(jié)束,而是“回車”另起一行,指令與數(shù)據(jù)之間需要加入空格,編程語法與C語言類似。
HMI串口觸摸屏是以頁面為模塊,每個(gè)頁面下可以添加不同的控件。圖2為HMI串口觸摸屏開發(fā)軟件界面,(a)為控件工具欄,(b)為控件設(shè)計(jì)區(qū)域,區(qū)域的大小與觸摸屏相同。圖3為頁面和字庫的屬性設(shè)置,(a)為添加完成的圖片和字庫,(b)為界面選擇區(qū)域,(c)為控件的屬性設(shè)置區(qū)域,可以在屬性中設(shè)置控件的大小、位置、背景顏色、字體顏色等。
(a)控件工具欄 (b)控件設(shè)計(jì)區(qū)域
(a)圖和字庫 (b)界面選擇區(qū)域 (c)控件屬性
2.1.1 添加字庫
在設(shè)計(jì)界面之前需要向軟件中加入字庫,頁面中顯示文本的大小、形狀和粗細(xì)都需要不同的字庫。軟件中集成了字庫制作工具,設(shè)置完成后,輸入所生成字庫的名字,最后保存至文件夾即可。生成需要使用的字庫后,將其導(dǎo)入軟件中,字庫導(dǎo)入成功后,會(huì)生成字庫的編號(hào),在文本控件的屬性中可以通過修改對應(yīng)的編號(hào)來達(dá)到選擇不同字庫的目的。在編寫程序的過程中可以根據(jù)需要加入圖片、視頻、音樂和動(dòng)畫等,加入的方式與字庫類似。
2.1.2 添加控件
頁面設(shè)計(jì)的過程中,可以根據(jù)需求添加控件。在圖3(b)的頁面中,背景是添加的一個(gè)圖片,其中n0、t0和j0為該頁面中的三個(gè)控件,控件的類型分別為數(shù)值、文本和進(jìn)度條,三個(gè)控件可以放在頁面中的任何位置。
HMI串口觸摸屏可以根據(jù)單片機(jī)發(fā)送的數(shù)據(jù)來繪制曲線,可以結(jié)合單片機(jī)對電壓的模數(shù)轉(zhuǎn)換功能,將被檢測點(diǎn)電壓以曲線的形式展現(xiàn)出來,從而更加直觀地顯示電壓走勢。
2.2.1 設(shè)置曲線控件參數(shù)
圖4為曲線繪制界面,曲線控件的名稱為“s0”,為了更加精確地顯示曲線的走勢,曲線控件設(shè)置為滿屏顯示。圖中“t6”在曲線控件的上方,背景設(shè)置為透明,文本內(nèi)容為曲線的基本信息。
圖4 曲線繪制界面
2.2.2 曲線繪制原理
曲線控件有多個(gè)曲線繪制通道,每個(gè)通道繪制曲線的顏色可以改變。單片機(jī)內(nèi)部有多路模數(shù)轉(zhuǎn)換,可以根據(jù)曲線的顏色,在有限的顯示區(qū)域內(nèi),顯示多個(gè)檢測點(diǎn)電壓走勢,以便對不同的電壓趨勢作對比。曲線以點(diǎn)進(jìn)行繪制,點(diǎn)連續(xù)顯示就形成曲線。曲線的點(diǎn)垂直方向位置值為0—255,如果設(shè)置值大小超出此范圍時(shí),點(diǎn)將會(huì)隨機(jī)出現(xiàn)。在12位模數(shù)轉(zhuǎn)換時(shí)(取值范圍為0—1024),需要對輸出的結(jié)果對4取整后,再發(fā)送給觸摸屏。
打點(diǎn)的過程中,控件會(huì)先從屏幕的最左側(cè)開始,當(dāng)新的點(diǎn)需要繪制時(shí),會(huì)將所有已經(jīng)打過的點(diǎn)向后移動(dòng)一個(gè)位置。以TJC4827X543-011R型號(hào)的觸摸屏為例,觸摸屏的分辨率為480×272,橫向上屏幕只有480個(gè)點(diǎn),超過這個(gè)數(shù)字時(shí),曲線會(huì)將最早繪制的點(diǎn)清除掉,給新來的點(diǎn)留出顯示位置。單片機(jī)在發(fā)送數(shù)據(jù)時(shí),需要注意數(shù)據(jù)的個(gè)數(shù),每一個(gè)數(shù)據(jù)相當(dāng)于一個(gè)點(diǎn),單個(gè)曲線保證480個(gè)數(shù)據(jù)。
2.2.3 曲線繪制指令
新的曲線開始繪制時(shí),為了防止舊曲線對顯示界面的干擾,應(yīng)先清屏,其指令為“cle 1,255”。曲線控件中打點(diǎn)的指令為“add 1,0,212”,add為打點(diǎn)指令,后面的第一個(gè)數(shù)字為頁面的ID編號(hào),第二個(gè)數(shù)字為曲線控件通道的編號(hào),第三個(gè)數(shù)字為打點(diǎn)的數(shù)值。
文本是HMI串口觸摸屏最常用的控件之一,文本屬性可以通過指令進(jìn)行修改。
2.3.1 動(dòng)態(tài)文本設(shè)置原理
在不同位置動(dòng)態(tài)文本是指根據(jù)實(shí)際需求,在屏幕的不同位置顯示不同的內(nèi)容,不顯示內(nèi)容時(shí)文本自動(dòng)隱藏,不占用屏幕空間。圖5為文本屬性界面,文本在界面中相當(dāng)于一個(gè)長方形控件,屬性中的x和y代表長方形中左上角顯示的位置,控制x和y的指令分別為“cau.t0.x=1”和“cau.t0.y=1”,可以根據(jù)實(shí)際的要求來改變指令中“=”后面的數(shù)字。屏幕的分辨率對應(yīng)著“=”后面數(shù)值的大小,屏幕的左上方為原點(diǎn)坐標(biāo)(0,0),往下垂直坐標(biāo)值增加,往右水平坐標(biāo)值增加,每次坐標(biāo)增加的值以1為最小單位。
圖5 文本屬性
以頻率數(shù)值動(dòng)態(tài)顯示為例,屏幕的最左側(cè)表示20kHz,最右側(cè)表示60kHz,屏幕從左到右表示頻率線性遞增,顯示頻率的數(shù)值與文本的位置需要保持一致??梢愿鶕?jù)式(1)進(jìn)行計(jì)算,其中F為顯示的頻率,C為文本的寬度,L為單片機(jī)發(fā)送的數(shù)值。
(1)
2.3.2 動(dòng)態(tài)文本屬性指令
文本中顯示的內(nèi)容、字體的形狀和字體的顏色也可以通過指令進(jìn)行控制。控制文本顯示內(nèi)容的指令為“cau.t0.txt=”,其中引號(hào)中輸入文本顯示的內(nèi)容。控制文本顯示長度的屬性為“txt-maxl”,該屬性無法通過單片機(jī)發(fā)送的指令進(jìn)行控制,只能在設(shè)計(jì)程序時(shí)進(jìn)行設(shè)置。在對文本寬度的屬性進(jìn)行設(shè)置時(shí),將文本的寬度設(shè)置為顯示數(shù)據(jù)內(nèi)容的最大寬度,并將文本的背景和邊框選為透明,這樣文本即可達(dá)到“動(dòng)”的目的。文本字體的形狀是通過修改字庫的編號(hào)來改變的,字體顏色的指令為“cau.t0.pco=65535”,其中“=”后面的數(shù)值對應(yīng)顏色的編號(hào),觸摸屏理論上能夠顯示65,536種顏色。
圖6為超聲波篩分用換能器多諧振點(diǎn)參數(shù)測試顯示的部分界面[5]。當(dāng)“開始”按鍵按下后,單片機(jī)向觸摸屏發(fā)送電壓打點(diǎn)數(shù)據(jù),屏幕開始繪制電壓曲線。曲線繪制完成后,在圖形中三個(gè)最小的“波谷”下顯示對應(yīng)的頻率與阻抗,顯示的文本均屬于動(dòng)態(tài)文本。
圖6 測量系統(tǒng)顯示界面
單片機(jī)使用定時(shí)器作為波特率發(fā)生器,串口波特率設(shè)置為9600,與觸摸屏的波特率設(shè)置相同。單片機(jī)向觸摸屏發(fā)送指令時(shí),先把指令轉(zhuǎn)換為HEX格式,并且每個(gè)指令結(jié)束時(shí)發(fā)送三個(gè)連續(xù)的“0xff”作為結(jié)束標(biāo)志。觸摸屏向單片機(jī)發(fā)送“開始”按鍵按下的指令,單片機(jī)收到指令后會(huì)立刻對換能器進(jìn)行測量。在按鍵觸發(fā)的事件里向單片機(jī)發(fā)送的數(shù)據(jù)如表2所示,一共四個(gè)字節(jié),第二位為按鍵被按下的信息位。
表2 按鍵按下發(fā)送的數(shù)據(jù)
HMI串口觸摸屏集顯示和按鍵為一體,顯示的內(nèi)容多樣。動(dòng)態(tài)圖像設(shè)計(jì)、曲線繪制以及文本動(dòng)態(tài)定位的開發(fā)過程表明,利用HMI串口觸摸屏自帶的處理器,無需單片機(jī)進(jìn)行基本的顯示程序處理,只需通過單片機(jī)串口發(fā)送指令控制觸摸屏顯示復(fù)雜的圖形,這降低了單片機(jī)系統(tǒng)資源占用率[6]。同時(shí),HMI串口觸摸屏可利用觸摸控件實(shí)現(xiàn)單片機(jī)的按鍵輸入,節(jié)省了單片機(jī)寶貴的I/O資源。