一、红外对管的电气特性
红外发射二极管是一种能把电能转换成红外光能的器件,所发出的红外光是一种不可见光(如图18所确。
红外接收二极管实质上是一只光敏二极管,其内部的PN结具有单向导电特性,工作时需加上反向电压。无红外光照时,只有很小的暗电流,此时红外接收二极管相当于截止(如上图b所示)。当受到红外光照时,饱和反向漏电流大大增加,形成光电流,此时,红外接收二极管相当于一只小电阻,阻值随红外光照强度的增大而减小,当阻值减小到一定程度时,可认为是导通(如上图e所示)。
由上图a、上图b可知,当没有红外光照时,红外接收二极管截止,此时,电压检测点的状态为高电平;当受到红外光照时,红外接收二极管导通.此时,电压检测点的状态为低电平。根据此特性,我们利用一个简单的电压比较电路即可判断出此时红外接收二极管的状态。
二.红外接收二极管状态检测
LM339内部有4个独立的电压比较器,任意一个输入端接一参考电压(也称门限电平),另一端输入待比较的电压信号。当“十”端电压大干“一”端时,输出端输出高电平。当“一”端电压高于“+”端时,输出端输出低电平。LM339两个输入端的电压差大于lOmV.即可可靠地反转输出状态,因此,可把LM339用于弱信号检测。由于LM339是集电极开路输出(oc门),在使用时,输出端须接上拉电阻,如中图所示。
由中图可知,当红外接收二极管截止时,电压检测点电压接近电源电压,即“+”端电压大于“一”端电压,比较器输出高电平;当红外接收二极管导通时,电压检测点电压接近0.即“+”端电压小于“一”端电压,比较器输出低电平。根据这一特性,我们即可以用单片机来实现对红外接收二极管的通断状态检测。此时,由红外发射二极管和红外接收二极管组成的红外对管相当于一个“可触摸”的开关,没有触摸动作时,红外发射二极管发出的红外线毫无遮挡地被红外接收二极管接收,红外接收二极管导通;当有触摸动作时,触摸物会遮挡红外线,导致红外接收二极管截止。
根据这个原理,我们可以通过把N个红外发射二极管和N个红外接收二极管分别并联来组成红外对管矩阵,来实现“可触摸”的矩阵键盘,通过51单片机的10口控制行列扫描,并在产生触摸动作时分析触摸物的X坐标和Y坐标,由此作出相应的响应,如下图所示。
三、C语言程序
针对下图的C语言状态机扫描算法如下:
#defineLaunch_PortsP1//红外发射二极管阵列控制端#defineReceive_PortsP2 //红外接收二极管阵列控制端#defineDetect_PortP3_0,,触摸动作检测端口#defineColumn0#defineLinelcodeunsignedcharCol-umn_SCAN[l=[Oxfe,Oxfd,Oxfb,Oxf7);//列扫描掩码表(每一时刻只点亮某一列线上的一对红外发射、接收管)codeunsignedcharLme_Scan□=(Oxef,Oxdf,Oxbf,Ox7f);//行扫描掩码表(每一时刻只点亮某一行线上的一对红外发射、接收管)
Column_Scan[lndex];//输出列扫描掩码(每一时刻只点亮某一列线上的一对红外发射、接收管)Detect_Port=l;//将检测端口置为输入if(Detect_Port)//端口为高电平,说明有触摸动作(无触摸时由于红外线直射接收管,接收管导通,经比较器输出低电平){ColumnVal=Column_Scan[In-dexl;//保存X坐标Scan_Status=Line;//特扫描状态更新为行扫描break:
LineVaI=Line_Scan[lndexl;//保存Y坐标KeyNum=ColumnVal‘LineVal,//将X坐标和Y坐标进行异或操作,得出键值Scan_Status=Column,//将扫描状态恢复为列扫描break;leIBe{if(Index==3)//已经循环一次行扫描,检测不到触摸动作,说明在列扫描时检测到的是干扰Scan_Statua=Column;∥将扫描状态恢复为列扫描
上述C语言算法仅仅是为了说明电路工作原理,读者可在此触摸矩阵键盘设计方法的基础上,根据实际选用的单片机型号,配合74HC164、74HC595等串人并出移位寄存器来实现用更少的IO端口控制更密集的红外对管。如果配合带AD转换的单片机,或者外挂高分辨率的AD转换芯片,则可以用模拟的方法实现对阻挡程度的判断,得到更高的分辨率。