用JoyStick游戏手柄控制LED显示屏视频处理器及专用播放软件
用JoyStick游戏手柄控制LED显示屏视频
处理器及专用播放软件
曹恒林:用JoyStick游戏手柄控制LED显示屏视频处理器及专用播放软件
文章编号:1006—6268(2010)11-0046—05
用JoyStick游戏手柄控制LED显
示屏视频处理器及专用播放软件
曹恒林
(苏州汤威电子科技有限公司,江苏苏州215228)
摘要:利用Windows消息编程的原理编写软件来获取JoySdck游戏手柄的按键消息,并且按照
相应的消息执行操作来控制LED视频处理器和LED播放软件,最终满足复杂的播放操作要求.
关键词:LED显示屏;LED视频处理器;JoyStick游戏手柄;Delphi消息编程;串口通信;
SPCoMM控件
中图分类号:TN312+.8文献标识码:B
UseJoyStickGameControllerControlLEDVideoProcessorand
LEDPlayerSoftware
CAOHeng-lin
(SuzhuTonvyElectronicTechnologyCo.,Ltd.,SuzhouJiangsu215228,China)
Abstract:Windowsprogrammingusingtheprincipleofmessages,writingsoftwaretoget
keymessagesofJoyStickgamecontroller,andperformoperationsinaccordancewiththe
appropriatemessagetothecontrolLEDvideoprocessorandLEDplayersoftware,and
ultimatelytomeetthecomplexrequirementsoftheplayoperation.
Keywords:LEDdisplay;LEDvideoprocessor;joystick;delphimessage;serialport
communication;SPCOMM
引言
全彩LED显示屏在大型活动现场的使用中常
常要面对复杂的播放要求,常见的是以专用LED视
频处理器为核心,将多个视频信号输入视频处理器,
经过选择输出其中一路视频信号给同步系统的发送
卡传送至接收卡,最终将图像视频显示在LED显示
屏上.在通过视频处理器选择输出信号的同时,还要
将对应的播放内容及时处理并且准备好,这个过程
看似简单,但是操作繁琐,需要多个人配合完成操
作,而且很容易出错.本文针对这一情况,从实际出
发,利用消息编程的原理编写应用软件,暂且称为
(LED显示屏特殊功能播放器》,该软件通过获取游
戏手柄的按键消息并进行处理,来控制LED视频处
理器与播放电脑上的LED播放软件完成复杂的操
作过程,减少了工作量,提高了效率.
1LED显示屏现场播放系统组成
图1所示的播放系统采用3台电脑,其中1台
46现代显示AdvancedDisplayNov.2010,总第118期收稿日期:2O10
一O9—29
曹恒林:用JoyStick游戏手柄控制LED显示屏视频处理器及专用播
放软件
为主控电脑,绝大多数的厂家和工程商在安装LED
电子显示屏时都为客户配备了1台主控电脑(包含
同步系统发送卡).另外还有2台高性能笔记本电脑
(其中1台备用)辅助播放,因为大型活动现场用笔
记本电脑方便携带,便于活动结束后设备的搬移.图
1中所有的播放电脑都以显卡双显示复制模式对外
输出视频信号.
2特殊功能播放器软件实现原理
((LED显示屏特殊功能播放器》软件各功能块组
成如图2所示,软件的用户界面如图3所示,软件分
别为JoyStick按键消息获取及处理,LED视频处理
器串口通讯,多媒体播放,外部程序控制等.其中多
媒体播放图片显示需要将DoubIeBuffered设置为
True,就是所谓的双缓冲.另外音视频播放采用
WindowsMediaPlayer控件,这部分内容资料很
多,这里不再详细叙述.以((LED显示屏特殊功能播
放器》为核心,JoyStick游戏手柄作为输入控制端,
手柄的按键分别有不同的按键消息数值,特殊功能
播放器获取消息并且提取出消息数值,从而有选择
地产生相应执行程序.这样可以通断LED视频处理
器,选择视频处理器的输入信号源,也可以向其它播
图1LED播放系统组成框图
剐——LED视频处理器LED视频处理器
RS232通讯控制指令收发
图片播放LED专用播放软件J
oyStick
——
?视频播放_-.(例如灵星雨公司的
涎音频播放LED演播室)
0.
?外部程序控制其它多媒体软件
——
(发送Windows消息)(例如暴风影音)
图2(LED显示屏特殊功能播放器》输入输出控制示意图
Nov.2010,总第118期现代显示AdvancedDisplay47
曹恒林:用JoyStick游戏手柄控制LED显示屏视频处理器及专用播放软件
cl擘豳片播放5音频播救}视频摇敞舛帮程序窗口专业视频处理嚣游戏手柄熬律使用说明圜r蚕
盥幽口
擞摊潮攘0罐啦.嘲斌?9漩密鞠簦撬貘娃理嚣
:回圆圈固;到[堡型巨逸L曼J;遮到隧到谚簪9旺面西==)
3匡豳国回围3l鬻侉}I孵止l习_Immll暂停l划WI9l播敲I量止嵌吲厂西r1囊
?lVGAl
誊绷控制?i融
翌壁l网
?r
?:0:0?l{el
謦:巨习[巫口圜匪I[口团旺:i豳涸}耆一
-i
f
lShowMaind,ctufe{0--
日】D-D9—29lfi蝴日58糟佯墨罩曩碍环单惯:15g凸Z5g珏ll60口{g翱106
图3《LED显示屏特殊功能播放器》用户界面
放软件(例如灵星雨LED演播室)的某个按钮发送
消息代替鼠标单击等操作.
选择视频处理器的信号源和按下播放软件的某
个按键甚至多个按键,都可以按照顺序连贯进行,这
个过程时间短暂,使得LED显示屏中显示的画面完美
切换.
2.1JoyStick游戏手柄及消息编程
用JoyStick就要熟悉一下相关的API函数,查看
WindowsSDK,JoyStick相关的重要函数和消息有:
(1)函数ioySetCapture(HWNDhwnd,UINT
uJoylD,UINTuPeriod,BOOLfChanged)的功能是捕
获相应的JoyStick动作,并且将对应的消息发送到
指定的窗口,再由指定的消息处理程序进行处理;
(2)消息MM_JOY1BUTTONDOWN是指JOY1
有按键按下:
(3)其它的API函数和消息这里不再叙述请读
者自行查阅.
在Delphi中开发JoyStick相关的应用软件需
要在单元的Uses部分加入MMsystem,并且查看
是否包含了JoyStick相关的消息常量,如果没有就
自行添加,参照如下:
censt{joystick)
{$EXTERNALSYMMMJOY1MOVE)
MM_JOY1MeVE=$3A0;
{$EXTERNALSYMMMJOY2MOVE)
MMJOY2MOVE=$3A1:
{$EXTERNALSYMMM—JOY1ZMOVE)
MMJOY1ZMOVE=$3A2:
{$EXTERNALSYMMMJOY2ZMOVE)
MMJOY2ZMOVE=$3A3;
{$EXTERNALSYMMMJOY1BUTTONDOWN)
MMJOY1BUT1-ONDOWN=$3B5;
{$E>(1_ERNALSYMMM—JOY2BUTTONDOWN)
MMJOY2BUT1_ONDOWN=$3B6;
{$EXTERNALSYMMMOY1BU不ONUP)
MMJOY1BU1_rONUP=$3B7:
{$EXTERNALSYMMMOY2BUTTONUP)
MMJOY2BU]q-ONUP=$3B8;
然后按照消息编程的开发步骤写声明:
procedureMMJOY1BUTTONDOWN(varMsg:
TMessage);messageMMOY1BUTTONDOWN:
初始化JoyStick,使得产生的按键消息送给指
定的窗口:
procedureTFormmain.ButtOn20ClickfSender:
TObject):
begin
joySetCapture(Form—main.Handle,JOYSTICKI
—
D1,3O,TRUE);//按键消息发到Form—main
end;
具体的消息执行过程如下:
procedureTFOrmmain.MMJOY1BU不ONDOWN
(varMsg:TMessage);
Var
aKeyVakinteger;
begin
aKeyVal:=MSG.WParam;//消息中的按键数值
caseaKeyValof
257:Button6.Click;//KEY1
385:ButtonVMVGA.Click;?VMVGA
514:Button7.Click;?KEY2
642:ButtonVMDVI.Click;/MDVI
1028:RzButton1.Click;//KEY3
1156:ButtonVMVedio.Click;?VMDVl
2056:RzButton2.Click;?KEY4
else
48现代显示AdvancedDisplayNov.2010,总第118期
曹恒林:用JoyStick游戏手柄控制LED显示屏视频处理器及专用播
放软件
showmessage(‘按键消息值:’+inttostr
(aKeyVaI)+}}10+}}13+’找不到对应的按键指令!’):
end;
end;
2.2通过RS232串口通讯控制LED视频处
理器
本文以上海均显科技有限公司的LED视频处
理器举例,其主画面输入信号选择的发送命令为:
【BEEF】【19】【0300】【56AC】【5AA5】【SOURCE—SEL
(1byte)].SOURCE—SEL:一个字节,选择主画面输入
信号,信号意义如下:
0O:VGA
01:AV1
02:S—VIDEO
O3:HDM1
04:YPbPrl
FF:非法信号
返回字符:成功返回06,不成功返回15
procedureTFOm1main.BtnVMCommConnectClick
(Sender:TObject);
begin
try
ifButtonVMCommConnectCaption=‘Connect’
then
begin
COmm.StopComm;
COmm.CommName:=‘COM1’:
Comm.BaudRate:=19200;
COmm.ByteSize:=一8
COmm.Parity:=None;
COmm.ParityCheck:=false;
Comm.StopBits::一
1:
Comm.StartComm;
BtnVMCommConnect.Caption:=‘DisConnect’:
MemoVMCommlnfo.Clear;
MemoVMCommlnfo.Lines.Add(‘串口打开成
功!’):
end
else
begin
Comm.StopComm;
BtnVMCommConnect.Caption:=‘Connect’:
MemoVMCommlnfo.Lines.Add(‘串口已经关
闭!’):
end;
except
MemoVMCommlnfo.Lines.Add(‘串口打开失
败,请检查串口号及通信线路!’):
end;
?向LED视频处理器发送命令
procedureTForm—
main.CommSend(Cmd:integer);
Var
aSendBuf:arrav【0..9】ofbyte;
begin
aSendBuf
aSendBuf
aSendBuf
aSendBuf
aSendBuf
=
$BEaSendBuf【1】:=$EF:
=
$19:aSendBuf[3】:=$03:
=
$O0aSendBuf[5】:=$56:
=
$ACaSendBuf[7】:=$5A:
=
$A5;aSendBuf[9]:=Byte(Cmd);
Comm.WriteCommData(@aSendBuf,1O):
end;
?从LED视频处理器返回的字符
ProcedureTFormmain.CommReceiveData(Se—nder.
TObject;Buffer:PointerBufferLength:Word);
Var
i:DWORD:
ReceiveBu什er:PChar;
aStr:string;
begin
Try
ReceveBuffer:=Buffer;Dec(ReceiveBuffer):
fori:=0toBufferLength一1dO
begin
inc(ReceiveBuffer):aStr:=aStr+IntToHEX
(Ord(Bvte(ReceiveBuffer)),2):
MemoVMCommlnfo.Lines.Add(‘接收到设备
应答:’+aStr);
end;
Except
onE:Exceptiondo
begin
//异常处理
end;
end;
end:
Nov.2010,总第118期现代显示AdvancedDisplay49
O2468
曹恒林:用JoyStick游戏手柄控制LED显示屏视频处理器及专用播放软件
2.3消息编程控制外部的LED专用播放软件
仍然是基于消息编程,首先是用API函数取得
外部LED专用播放软件中的某些功能按键的句柄,
然后向这些按钮发送特定的消息代替鼠标操作的过
程.获取句柄用以下2个API函数:
(1)BOOLGetCursorPos(LPPOINTIpPoint);
(2)HWNDWindowFromPoint(POlNTPoint):
在软件中放置一个Timer控件,利用Timer事
件来获取当前鼠标位置,从而得到该鼠标位的窗口
句柄,具体代码如下:
procedureTForm—
main.Timer_HndTimer(Sen—der:
TObject):
VdI
rPos:TPoint;
hWnd,HndParent:THandle:
begin
ifboolean(GetCursorPos(rPos))then
begin//得到鼠标位置信息
hWnd:=WindowFromPoint(rPos);//获得句柄
Edit_
Hnd.text:=lntToStr(hWnd):
//HndParent:=windows.GetParent(hWnd):
?得到父窗口
end;
end;
得到句柄我们可以采用发消息代替鼠标按键单
击,双击等操作,l;L~tn我们要按下灵星雨LED演播
室的播放按键,可以向该按键发送如下的消息指令:
SendMessage(HndPlay,WM—LBU不ONDOWN,0,0):
SendMessage(HndPlay,WM—LBUTTONUP,0,0)
这两条指令就实现了鼠标单击的动作,HndPlay即
为该按键的句柄.
3结论
本文采用的方法简单可靠,实现容易,有较高的
实用价值.此方法编写出的(LED特殊功能播放器
V2.0》软件在2010年9月河北省运动会开幕式期
间主会场——廊坊体育场的LED显示屏现场播放
中得到应用,仅以本文作者一人,就保障了LED显
示屏现场内容的播放,取得了非常好的效果.
参考文献
【1】DelphiHelp[M】.BorlandSoftwareCorporation.
【2]WindowsMultimediaPlatformSDK[M】.
【3】陈增发,严锋.Delphi+SPCOMM控件实现串口通信【J】.
科技资讯,2006(31):222.
【4】视频处理器串口通讯
fM】.上海均显电子科技有限公
司.
作者简介:曹恒林(1983一),男,江苏盐城人,主要从
事单片机,LED显示屏,LED亮化照明以及工业自
动化方面的控制系统软硬件开发
,E—mail:
88410664@qq.com.
晶元光电解析LED照明技术的4个发展趋势
台湾晶元光电王希维在第七届SSL上指出晶元光电有4个
技术优势,而这四个技术也是未来LED照明技术发展的方向.
第一,灯泡光通量达到800Im.800ImLED灯泡可以替
代60W白炽灯,这方面飞利浦和东芝已经走在了市场前列,
飞利浦800ImLED替代灯2013年的目标售价为1O美元,届
时能够被市场接受.800Im指的是灯泡的光通量,所以在封装
层面上光通量要达到1,000Im左右.
第二个重要指标是流明每美金,根据DOE的路线图,
2015年可以达到500Im/$,在成本性价比方面,亚洲公司的竞
争力更强,相信在2012年即可达到500Im/$的指标.500lm/
$的算法很简单,因为据麦肯锡分析,当6OWLED替代灯价格
为1O美元时,可以被市场接受,这样封装成本为2美元,光通量
为1,000Im,所以封装环节达到500Im席时,可以被市场接受.
第三,王希维认为H,,/ACLED是室内照明应用的最佳方
案,晶电是最早推出高压LED的厂商,已于今年第2季度已开
始量产,从晶元已经量产的45milX45mil蓝光LED芯片看,
HVLED芯片的效率较ACLED芯片的效率高20%.王希维
对为什么采用高压LED进行了解释,想要达到1,000Im
LED,则需6.6W@15Olm/W,要想达到这个指标有两种实现
方式:2A@3.3V和30mA@220V,对于LED和电源转换器的
效率而言,低电流比高电流要容易很多.而且高压驱动下电流
减小,散热问题将得到好的解决.
第四,一般采用芯片激发荧光粉的方式产生的暖白光
LED的发光效率比冷白光要低,晶元光电采用添加红光LED
的方式解决暖白光LED光效与显色指数之间的矛盾.近日,晶
元光电宣布获得高效的红光AIGalnPLED芯片,实验室光效
高达168Im/W@20mA,18OIm/W@6mA,主要波长为
61Onm.
50现代显示AdvancedDisplayNov.2010,总第118期