陳 帥,束仁義,張水鋒
在數據采集系統的液晶屏上需要繪制不同測點數據水平變化曲線,同時又要疊加繪制數據大小的柱狀圖形.例如要繪制N個測量點數據的柱狀圖,表示數據的相對大小,同時又要疊加繪制這N個測量點數據的水平方向動態變化,即連接柱狀圖頂點的連線,表示不同測點水平方向的變化趨勢.運用工業串口液晶屏[1-2]可以繪制基本圖形以及多條連續水平動態曲線[3],無法滿足需求.本文研究實現了基于STM32控制在迪文串口液晶屏上的動態疊加曲線顯示過程.
迪文 DGUS[4]液晶屏 DMT80480T050_01WN如圖1所示,組成包括驅動基板和液晶面.與外界通信有RS485和RS232接口,同時兼供電線路.這里采用單片機STM32通過RS232串口與液晶屏連接,連接示意圖如圖2所示.
通過STM32控制液晶工作只需在程序中向串口發送數據幀.發送的串口數據幀必須按照一定的格式,數據幀格式如表1所示.其中數據幀的幀頭占2字節,數據長度占1字節,指令占1字節,然后是數據字節,根據系統參數配置選項最后可有2字節的檢驗碼.

表1 迪文液晶屏的串口幀格式
幀頭可以通過系統參數配置指定.數據長度字節值是指從指令字節開始至CRC校驗的字節數.指令字節內容為0x80~0x84之一.也可以通過配置文件決定是否需要CRC校驗字節.

圖1 迪文液晶屏

圖2 實驗連接圖
迪文液晶的串口屏有五條指令,分別是寄存器寫、寄存器讀、數據存儲器寫、數據存儲器讀、曲線控制緩沖區寫,對應的指令分別為80~84指令.
例如,如果通過配置文件設定不需要CRC校驗,則STM32通過RS232串口向液晶屏發送十六進制幀:unsigned char Frame_pwd[8]={A5 5A 05 82 00 50 00 2A};則該幀表示在0050地址顯示字符"*".其中幀頭為A5和5A兩字節;第三字節05表示數據長度為5,也就是幀的第3字節后面還有5個字節;第4字節82為指令,表示寫數據存儲器;第5~6字節00、50表示數據存儲地址,該地址是在組態軟件中設定的顯示區地址,即決定了顯示位置;第7~8字節00、2A表示ASCII碼數值2A,對應字符"*".
迪文液晶屏支持繪制多個曲線數據連續變化的84指令,但靠這個指令難以滿足我們的要求.而82指令有基本圖形繪制功能,可以繪制點、圓、線、矩形等基本圖形.
例如串口發送幀:{A5 5A 0F 82 00 10 00 01 00 01 00 10 00 10 F8 00 FF 00}
其中:
A5 5A:為幀頭;
0F:是發送的數據長度(不含幀頭和長度字節,即從82開始總共15字節);
82:曲線控制指令;
00 10:為變量(VP)地址;
00 01:寫入VP地址的數據(作為繪圖指令);(此處VP地址由于在DGUS配置軟件中已經做成基本繪圖的控件,因此存儲的數據被DGUS默認為繪圖指令,例如0001便是置點指令,0002為連線指令,0003畫矩形,0004矩形填充,0005為畫圓,0006為圖片剪切,0008為區域填充,0009畫垂直線)[曲線控制82向VP地址寫入的數據(作為繪圖指令)時發送數據的長度也相應不同];
00 01:寫入數據0001(此處VP+1地址里存儲的數據表示最大數據包數目.例如置點,0001表示置一個點);
00 10 00 10:往VP+2開始的地址里寫入第一個頂點的坐標(這里分別是X,Y坐標(0010,0010));
F8 00:往VP+3地址寫入的數,表示點的顏色(F800表示紅色);
FF 00:表示繪圖操作結束.
迪文液晶屏通過組態軟件DGUS進行液晶界面配置設置.先在個人計算機上利用Photoshop等軟件設計需要的圖形界面,然后導入組態軟件DGUS,再進行配置,包括系統參數配置、觸控配置,最后生成配置文件.將配置文件復制到SD卡上,將SD卡插入液晶的插口,在液晶上電時就把SD卡上的配置文件下載到液晶屏中.
在組態軟件DGUS下引入背景圖,設置好屏幕分辨率800*640,系統參數配置串口波特率為115200,幀頭字節為:0xA5,0x5A.
以N取6點為例.
引入12個基本圖形控件,放置在要繪制圖形的恰當位置,如圖3所示,它們是疊加在一起的.其中6個用于顯示6點動態數據的柱狀圖,變量地址分別為0x2000、0x2020、0x2040、0x2060、0x2080、0x20a0;5個用于顯示這6點動態數據的水平連線(柱狀圖頂點連線),變量地址分別為0x2410、0x2420、0x2430、0x2440、0x2450;1個用于顯示水平參考坐標,變量地址設為0x2400.

圖3 在液晶設計中引入12個基本圖形控件
圖3中的加括號的數據表示圖形中相應點的坐標值.生成配置文件,導出變量.同時還可以查看變量.
在設計的每個基本圖形控件上進行連線的操作功能:柱狀線、水平坐標線、動態連線,都具有相同的點與點之間的連接操作.故在STM32中設計兩點間連線函數以供調用,函數形式如下.void self_line(addr,X1,Y1,X2,Y2,color);
其中:函數參數都為無符號的整數.地址為基本圖形控件的變量地址值,X1、X2和Y1、Y2分別為連線的起止兩點的橫、縱坐標,color為連線的顏色.函數無返回值.該函數實現比較簡單:定義一個無符號字符數組作為串口準備發送的幀,使用82命令按照表1格式填充幀字節,調用串口發送函數把幀字節發送給工業液晶屏顯示.有了連線函數,就可以通過參數改變進行曲線繪制.連線函數實現代碼如下.
void self_line(u16 addr,u16 X1,u16 Y1,u16 X2,u16 Y2,u16 col
or)//連線函數
{
u8 frame_line[22]={0xa5,0x5a,0x13,0x82,0x21,0x10,0x00,
0x02,0x00,0x01,0xff,0xe0,0x00,0x10,0x00,
0x10,0x00,0x50,0x00,0x50,0xff,0x00};//19字節
frame_line[4]=(addr>>8)&(0xff);
frame_line[5]=(addr>>0)&(0xff);
frame_line[10]=(color>>8)&(0xff);//顏色
frame_line[11]=(color>>8)&(0xff);
frame_line[12]=(X1>>8)&(0xff);//起點
frame_line[13]=(X1>>0)&(0xff);
frame_line[14]=(Y1>>8)&(0xff);
frame_line[15]=(Y1>>0)&(0xff);
frame_line[16]=(X2>>8)&(0xff);//終點
frame_line[17]=(X2>>0)&(0xff);
frame_line[18]=(Y2>>8)&(0xff);
frame_line[19]=(Y2>>0)&(0xff);
uart3_sendbuf(frame_line,22);//STM32的uart3發送22字節,送液晶顯示
}
在連線函數self_line中,只要保持Y1=Y2,X1≠ X2即可繪出水平線.同樣,保持X1=X2,Y1≠Y2即可繪出垂直線.
設數據保存在浮點數組strain中,則繪制疊加曲線過程為:
float strain_pos[7];//6個動態測量數據
int j; //變量
int px[7],y1[7],y2[7];//坐標變量數組
float scale=10;//坐標比例系數
for(j=1;j<=6;j++) //繪6測點疊加曲線圖
{
px[j]=150+(j-1)*100; //水平方向x位置
y1[j]=135; //垂直方向 y起點
y2[j]=135-(strain_pos[j])/scale*90;//垂直方向y終點
self_line(0x2110+(j-1)*16,px[j],y1[j],px[j],y2[j],
0xffe0);//調用連線函數繪柱狀圖
if(j>=2)//從第2點開始
self_line(0x2400+(j-1)*16,px[j-1],y2[j-1],px[j],
y2[j],0xf800);//調用連線函數繪制連線圖
}
數據采集系統連接如圖2所示.Stm32f103通過串口與迪文工業液晶屏連接.傳感器采集使用zigbee無線模塊采集.采集的壓力通過stm32f103處理后,發送給迪文液晶屏進行動態顯示,即要顯示柱狀圖,又要疊加顯示水平曲線.實驗裝置如圖4.

圖4 實驗裝置

圖5 工業液晶屏顯示的動態疊加曲線
實驗結果如圖5(a)(b)(c),分別是三個不同時間顯示曲線的液晶屏顯示照片.由圖5(a)(b)(c)可見,工業液晶屏可以同時疊加顯示柱狀圖和水平變化曲線圖.當數據發生動態變化時,疊加柱狀圖和水平變化曲線隨之改變.
為了在工業液晶串口屏上同時疊加顯示柱狀圖和水平曲線,采用組態軟件設計了液晶顯示界面,并進行了液晶配置.在STM32F103上設計了連線控制函數,在實驗裝置上進行了實驗.結果驗證了在STM32控制下,設計的方法可以在串口液晶屏上實現動態疊加曲線的顯示.