c语言开发虚拟仪器,基于C语言的虚拟仪器图形化面板设计方法与实现_熊建云

科技创新与应用

2013年第25期

信息技术

基于C语言的虚拟仪器图形化面板设计方法与实现

熊建云

(四川信息职业技术学院,四川广元628017)

要:用菜单方式表达虚拟仪器功能与实现对仪器功能的操作,具有简单直观的优点,用图形化技术的方法把虚拟仪器的功

能与内函设计成一个“图形面板”显示在计算机的屏幕上,能使虚拟仪器的操作功能像常规仪器一样一目了然。文章基于C语言

从图形方式初始化、点醒图形色块、键盘检测与响应、图形视窗设计等实例介绍了虚拟仪器图形化面板的设计方法。关键词:虚拟仪器;C语言;面板设计引言

虚拟仪器是电子仪器与计算机技术相结合而产生的一种新的仪器模式,它是PC机、功能仪器卡及相应软件的有机结合。由于虚拟仪器充分利用了计算机的软硬件资源,构成的测试系统具有灵

高效、成本低的优点,成为测试系统发展的主流。虚拟仪器没有活、

常规仪器的控制面板,而是利用软件在计算机屏幕上生成各种图形化的仪器面板来代替常规仪器的控制面板,如万用表、信号发生器、示波器、逻辑分析仪等,只要功能仪器卡的测试功能及其功能软件不同,同一台PC机既可以有多功能数字万用表的功能,用来测量各种电压、电流、电阻等电量参数,也可以具有程控信号源、智能示波

逻辑分析仪等仪器功能,用于各种信号波形参数的测试或进行器、

数字逻辑分析等。

图形化面板设计的主要思想可以从下面的程序设计实例中得到体现。

1图形方式初始化方法对VGA显示器,640×480图形方式初始化函数可以按以下方法设计:

voidinitdriver(void){intgdriver,gmode;gdriver=VGA;gmode=VGAHI;

intgraph(&gdriver,&gmode,“c:\\tc”);}

2可唤醒图形色块

图形色块是图形面板中说明仪器操作功能的主要形式,最常采用的是二维长方形色块或三维立体色块。下面程序可对在BCOLOR背景下设置一个(x1,y1,x2,y2)范围CCOLOR色的长方形块,色块内写有CHCOLOR色的“电压测量”字样。

voidwclvolt(intx1,inty1,intx2,inty2){

,“…”,…};char*s[]={“voltmeter”

setbkcolor(BCOLOR);/*背景色*/setlinestyle(0,0,1);/*在背景色上用1点宽实线画图*/rectangle(30,30,610,450);/*画一个图形面板框*/setcolor(PCOLOR);/*画笔色*/setfillstyle(0,CCOLOR);/*设置色块填充色*/bar(x1,y1,x2,y2);/*画一个长方形色块*/settextstyle(1,0,2);/*三重字体从左到右2号字*/setcolor(CHCOLOR);moveto(wx,wy);/*将光标移到适当位置*/outtext(s[0]);/*输出字符到色块中*/}

3键盘检测与响应

虚拟仪器操作是通过键盘实现的,我们可以通过bioskey函数对键盘状态进行测试分析,以便确定操作者选择内容。也可通过BIOS中断0x16的0x00号功能实现对键盘的检测,按具体按键的返回值实现仪器操作程序的转移。这种方法比较简单,下面程序中就用这种方法进行键盘测试并进行程序转移控制。如果按“Up”键(上移)或“Down”键(下移),就对选中色块增亮变色处理并用count对色块进行定位计数;若按回车“Enter”键,就转向执行由count内容指定的仪器功能函数。

……/*主程序各种设置与图形面板初始化*/waitkey();/*等待击键并进行conut计数*/switch(count){/*击“Enter”键后*/case0:timemeter();break;……

casen:voltmeter();break;default:break;}……/*后续程序*/voidwaitkey(){get_key();if(r.h.al==0){if(r.h.ah==Up){……/*对选中色块增亮或变色处理*/count=(count==0)?0:count+1;}if(r.h.ah==Down){……/*对选中色块增亮或变色处理*/count=(count==M)?M:count-1;}

}while((r.h.al!=Enter)|(r.h.ah!=28));}

voidget_key(){r.h.ah=0;

int86(0x16,&r,&r);}

我们注意到get_key()函数用于等待按键的发生,一旦有击键时,al中返回的是键入字符的ASCII码,ah中返回的是键盘的扩充码。例如,若按了回车键“Enter”时,ah=28,al=13;按“Esc”键时返回ah=1;按“Up”键(上移)时ah=72;按“Down”键(下移)时ah=80;按“Left”键(左移)时ah=77;按“Right”键(右移)时ah=75等等。这样我们可以根据按键的返回值确定对应的操作内容。

4图形下拉视窗的生成与恢复

图形面板操作过程中常需要临时下拉参数设置或其它选择项菜单,甚至要以某种窗口图形的形式显示其测试结果数据或波形。一旦选择结束或要进行其它项目测试时就要将窗口图形范围内的

这种使用情况与文本方式下弹出菜单设计是类原有内容进行恢复。

似的,实现这种处理的程序设计主要内容是进行图形窗口内容的存储与恢复。

一个图形窗口内容的存储过程分两步进行,首先用malloc测出

)图形窗口的大小,并在内存中开辟一个图形内容的存(x1,y1,x2,y2

储区,首址为graphmem,然后用getimage()函数将窗口内的图形内容读入grapmem中。具体的图形窗存储函数可以设计如下:

voidsavewindow(x1,y1,x2,xy2){

graphmem=malloc(imagesize(x1,y1,x2,y2));getimage(x1,y1,x2,y2,graphmem);}与此对应,图形窗口内容的恢复可用以下函数实现:voidloadwindow(x1,y1){

putimage(x1,y1,graphmem,COPY_PUT);free(graphmem);}

下面程序是一个用下拉法在图形面板中弹出一个电压量程选择菜单,选择完成后恢复图形面板画图程序。

……

char*disp_vdn[5]={“0.01v/div”“,0.05v/div”,…};……;

voidvoltselect(){chs1=“SelectVolt/div”;chs2=“Use'+'or'-'keyforSelecting”;savewindow(x1,y1,x2,y2);disp_chs();setcolor(1);/*用蓝色笔*/

从左到右写4字*/settextstyle(2,0,4);/*用小型字笔画方式,

outtextxy(vx,vy,disp_vdn[vdn]);

-

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值