人工智能及识别技术本栏目责任编辑:李桂瑾
触摸屏是一种广泛使用的输入设备,一般连接到电脑上使
用。常见的触摸屏包括
面声波触摸屏、电阻压力触摸屏、红外感
应触摸屏、电容感应触摸屏等几种。无论哪种触摸屏,只要在电脑
中安装好触摸屏驱动程序,然后进行简单的校准,就可以方便的
使用触摸屏了。在实际的多媒体应用中,有时不需要有具体的内
容显示在屏幕上,但又需要用触摸屏来作为输入设备(一般是在
触摸屏背面贴上一些简单的刻画出来的线条图案或文字等作为
触摸区域指示),此时就不需要用电脑了,可直接用单片机连接触
摸屏,然后通过单片机编程来判断用户点击了哪个区域,从而实
现相应的输出。
本文以某品牌的一款 17吋表面声波串口输出触摸屏和 51
单片机为例来谈一谈如何用单片机直接连接触摸屏。
要通过单片机直接连接触摸屏,首先必须要了解摸屏使用的
通信
及数据格式。通过查阅资料得知,该品牌的触摸屏串口
输出数据一共由10个字节构成:
<前导字符(1byte)><数据字符(8byte)><校验字符(1byte)>
其前导字符为“X(58H)”。8个字节的数据内容由以下内容构成:
第一个字节为字符“Y”,代表数据开始;第二个字符为状态字
节,如果该字节为 “81H”,代表手指在触摸屏上某点处按下;
“83H”代表手指在触摸屏上拖动;“84H”代表手指离开触摸屏。
XLow和 XHigh代表触摸点处的 X坐标的低字节和高字节;YLow
和 YHigh代表触摸点处的 Y坐标的低字节和高字节;ZLow和
ZHigh代表触摸点处的 Z坐标的低字节和高字节 (Z值可反应手
指的压力大小)。
在单片机中编程时,可以按如下思路进行。先读取字符“X”,
如果读到,则再读取下一个字节,看是否是字符“Y”,如果是,再读
取下一个状态字节,看目前的数据是什么状态下的数据。如果状
态字节是“81H”,则说明接下来的 6个字节就是对应按下触摸点
的 X、Y、Z坐标;如果状态字节是“83H”,则说明接下来的 6个字
节就是对应手指在触摸屏上拖动时的 X、Y、Z坐标;如果状态字
节是“84H”,则说明接下来的 6个字节就是对应手指离开触摸屏
时的那个点的X、Y、Z坐标。如果状态字节为“81H”和“84H”时对
应的 X、Y坐标相同,则说明用户在某一点点击了(也就是手指按
下和离开时在同一点)。事先把需要用户点击的点的坐标值存放
在列表里,一旦发现用户点击后,通过查表即可知道用户点击了
哪一个点,从而执行相应的操作。下面给出核心程序代码,供大家
参考。
⋯⋯
codeunsignedintctrltable[KEYNUMER][2]={{0x0148,0x01C0},
⋯⋯};//{{x0,y0},{x1,y1}}//对应每一个按钮中心点绝对坐标(可通
过串口测试软件连接触摸屏来获得)
bitkeydown,keyup,receiveXY;//手指按下、离开及允许接收后
续四字节为坐标值标志。
dataunsignedcharXlow,Xhigh,Ylow,Yhigh;//存放 X方向和 Y
方向的低字节和高字节坐标值。
dataunsignedcharByteNum;//指明数据包字节数。
dataunsignedintFrontX,FrontY,BackX,BackY;//存放手指按
下时的坐标值和手指离开时的坐标值。
⋯⋯
voidserial(void)interrupt4using2
{dataunsignedcharrec,i;
ES=0;
TR0=0;
if(RI)
{RI=0;
rec=SBUF;//读取串口数据
if(ByteNum==0)//第一个字节(前导字符)
{if(rec=='X')//判断是否收到“X”
ByteNum++;
else
{initialv();//初始化各变量
}}
elseif(ByteNum==1)//第二个字节
{if(rec=='Y')//判断是否收到“Y”
ByteNum++;
else
{initialv();}}
elseif(ByteNum==2)//第三个字节(状态字节)
{if(rec==0x81)//手指在触摸屏上按下时
{receiveXY=1;
keydown=1;}
elseif(rec==0x84)//手指在触摸屏上离开时
{receiveXY=1;
keyup=1;}
ByteNum++;}
elseif(ByteNum==3)//第四个字节(X坐标低位)
{if(receiveXY==1)
{Xlow=rec;}
ByteNum++;}
收稿日期:2007-03-05
作者简介:牟奇春(1974-),男,四川成都人,成都职业技术学院讲师,研究方向:多媒体技术及软件开发;汪剑(1973-),四川成都人,成都职
业技术学院讲师,研究方向:WEB软件开发及应用。
如何通过单片机直接连接触摸屏
牟奇春,汪剑
(成都职业技术学院,四川 成都 610041)
摘要:触摸屏是一种广泛使用的输入设备,一般连接到电脑上使用。本文将提供一种通过单片机串口直接连接触摸屏,从而实现响应
用户的输入的
。
关键词:单片机;触摸屏;串口协议
中图分类号:TP319 文献标识码:A 文章编号:1009-3044(2007)08-20535-02
HowtoUseSingle-ChipComputerConnectwithTouchingScreen
MOUQi-chun1,WANGJian2
(1.ChengduVocationalTechnologyCollege,Chengdu610041,China;2.ChengduVocationalTechnologyCollege,Chengdu610041,China)
Abstract:Touchingscreenisaninputequipmentwhichisusedwithacomputerandisusedwidely.Thisarticlewillprovideyouakindof
touchingscreenconnectedwiththesingle-chipcomputerviaserialport,anditcanresponduser'sorders.
Keywords:single-chipcomputer;touchingscreen;serialportprotocol
535
人工智能及识别技术 本栏目责任编辑:李桂瑾
电脑知识与技术
(上接第532页)
变以嵌入水印,然后再进行逆变换得到嵌入水印后的音频序列。
使用伪随机序列对信号进行排列后,有两个好处:提高算法的安
全性和平滑功率谱密度。使用MDCT的原因是它在语音编码中的
广泛应用。由于将水印加在频域当中,所以比时域水印算法更费
时。基于离散余弦变换的水印算法在水印技术发展中具有划时代
的意义,而且达到了较好的效果。
4.2.5离散小波变换域(DWT)方法
钮心忻等提出了一种基于小波变换的数字水印隐藏与检测
算法。利用Daubechies一4小波基对原始语音信号进行L级小波
分解,对前 L级的近似分量保留不予处理,对第 L级的细节分量
进行处理以嵌入水印。该算法的特点是简单,抗干扰能力强,把水
印信号放在语音信号能量最大的部分,即低频部分。一方面语音
信号遮盖了水印,即使音质受到一定的破坏,只要语音信号有一
定的可懂度,水印就可以检测出来。
5音频数字水印的评价
评价水印嵌入后音频信号的被影响程度.除了利用感知系统
定性评价以外,还可以采用定量的评价办法,例如用信噪比、峰值
信噪比来评价。
(1)信噪比(SNR)
设 N为音频数据段长度,xi为原始音频采样数据,^ xi为嵌入
水印后的音频采样数据,则信噪比被定义为:
其中
(2)峰值信噪比(PSNR)
峰值信噪比定义为:
6结束语
随着网络和多媒体技术的飞速发展和广泛应用,对音频、图
像、视频等多媒体内容的保护成为迫切需要解决的问题。由于音
频水印技术涉及的内容广泛,涉及到语音信号数字处理技术、通
信理论、模式识别技术、图像处理技术、编码理论、噪声理论、视听
觉感知理论、扩频技术、多媒体技术、混沌理论、算法设计等理论。
到目前为止,还没有形成一个完整而系统的理论体系,该技术虽
然发展十分迅速,但是还很不成熟,还有许多问题有待解决。
参考文献:
[1]C.P. Wu and P.C. Su and C.C..J. Kuo. Robust and Efficient
Digital AudioWatermarkingUsingAudioContent Analysis. Proceed-
ings ofSPIE. 2000,3971(1):382-392P.
[2]Katzenbeisser S,Petitcolas F A P.Information Hiding Tech-
niques for Steganography and Digital Watermarking.Artech House
Inc.2001.
[3]殷凯,周辉.音频数字水印中回声隐藏技术的时域提取方法
[J].计算机与数字
,2006,34(5):81-82.
[4]KuoS,Johnston J D,Turin W,Quackenbush SR. Covert Audio
Watermarking Using Perceptually Tuned Signal Independent Multi-
band Phase Modulation. IEEE 2002. II :pp l753-1756.
[5]A.Z.Tirkel,G.A.Rankin, R. M. van Schyndel, W. J. Ho, N. R.
A. Mee, and C. F. Osborne, "Electronic watermark," in Digital Image
Computing, Technologyand Applications (DICTA’93), Macquarie U-
niversity, Sydney, Australia, 1993, pp. 666-673.
else if(ByteNum==4)//第五个字节(X坐标高位)
{if(receiveXY==1)
{Xhigh=rec;}
ByteNum++;}
else if(ByteNum==5)//第六个字节(Y坐标低位)
{if(receiveXY==1)
{Ylow=rec;}
ByteNum++;}
else if(ByteNum==6)//第七个字节(Y坐标高位)
{if(receiveXY==1)
{Yhigh=rec;}
ByteNum++;}
else if(ByteNum==7)//第八个字节(Z坐标低位)
{ByteNum++;}
else if(ByteNum==8)//第九个字节(Z坐标高位)
{ByteNum++;}
else if(ByteNum==9)//第十个字节(校验字节)
{ByteNum=0;
if(keyup==1){
BackX=Xhigh; //存放手指离开触摸屏时的X坐标高位
BackX=BackX<<8;//左移8位
BackX=BackX+Xlow;//把二个字节合成为一个双字节
BackY=Yhigh;
BackY=BackY<<8;
BackY=BackY+Ylow;}
else if(keydown==1){
FrontX=Xhigh;
FrontX=FrontX<<8;
FrontX=FrontX+Xlow;
FrontY=Yhigh;
FrontY=FrontY<<8;
FrontY=FrontY+Ylow;}
if((keydown==1)&&(keyup==1))
{if ((BackX==FrontX)&&(BackY==FrontY)) //有一次触摸发生
(用户点击了某个点)
{keyorder=0;
for (i=0;i
(ctrltable [i][0]-CTRLWIDTH/2))&& (BackX<
(ctrltable[i][0]+CTRLWIDTH/2))) //判断点击范围(X区间)
{if ((BackY>(ctrltable [i][1]-CTRLHIGHTH/2))&& (BackY<
(ctrltable[i][1]+CTRLHIGHTH/2))) //判断点击范围(Y区间)
{keyorder=i+1;
i=KEYNUMER+1;//Quit!
}}}
switch (keyorder) //根据用户点击的按钮,执行相应的操作
{case 1:
⋯⋯ //此处加上具体的操作
break;}}}
receiveXY=0; //清零,为下一次接收做好准备
ByteNum=0;
if((keydown==1)&&(keyup==1)){
keydown=0;
keyup=0;
Xlow=0;
Xhigh=0;
Ylow=0;
Yhigh=0;
FrontX=0;
FrontY=0;
BackX=0;
BackY=0;}}}
ES=1;
TR0=1;}
⋯⋯
以上介绍了识别用户点击某个点的方法。同理,也可编写程
序判断用户拖动、手指按压触摸屏的压力大小等。
536