1.关于技术上的指标,必须参考国际标准做。我想你不可能自己研发个红外的接收装置吧。而且这种新硬件高与国际标准不同。现在的电子产品根据标准来做,其目的起码有三:1.不用制定新标准,减少投资成本。2.保证兼容性。3.采用通用元器件,节省生产成本。既然是大家都使用通用标准,你去查查标准就行了,最起码要选若干产品,筛选出符合要求的硬件。
2.对于程序上的设计,必须要得到厂家的接口说明,参考国际标准。这种属于程序开发范畴,不在赘述。
3.你给出的图不完全吧?试想什么系统都是有终端组成呢!
4.对于你的提问我看无人给出确定的答案,因为这种系统具有非通用性。和你选择的硬件,软件有直接关系。在不确定硬件和软件的基础上无人能做出完整的设计。
希望我的回答给你些帮助。找标准请访问IRDA官方网站,www.irda.org
给你一段430单片机遥控器解码的程序吧,也就是接收部分毕竟世界太现实只能这么帮你
#ifndef _IR_
#define _IR_
char t0,t1,t2
uchar IR
void DelayIR()
{
uint i=130
while(i--)
}
void init_port2(void)
{
P2DIR&=~BIT0
P2SEL&=~BIT0
P2IES|=BIT0
P2IE|=BIT0
}
#pragma vector=PORT2_VECTOR
__interrupt void PORT2_ISR(void)
{
char CounterIR
P2IES&=~BIT0
if(P2IFG&BIT0)
{
P2IFG&=~BIT0
}
CounterIR=0
while(!(P2IN&BIT0))
{
DelayIR()
CounterIR++
}
if(CounterIR>85)
{
if(CounterIR<95)
{
t1++
for(char k=0k<17k++)
{
CounterIR=0
while((P2IN&BIT0)&&(CounterIR<50))
{
DelayIR()
CounterIR++
}
CounterIR=0
while((!(P2IN&BIT0))&&(CounterIR<10))
{
DelayIR()
CounterIR++
}
}
for(char j=0j<8j++)
{
CounterIR=0
while((P2IN&BIT0)&&(CounterIR<25))
{
DelayIR()
CounterIR++
}
IR<<=1
if(CounterIR>11)
IR|=BIT0
CounterIR=0
while((!(P2IN&BIT0))&&(CounterIR<10))
{
DelayIR()
CounterIR++
}
}
if((IR!=0xff)&&(IR!=0x00))
{
if(!(flag&dataflag))
{
if(IR==0x22)
{
flag|=runflag
}
else
{
Tar[0]=Tar[1]
Tar[1]=Tar[2]
Tar[2]=Tar[3]
Tar[3]=Tar[4]
switch (IR)
{
//case 0x22 : flag|=runflagbreak
case 0x68 : Tar[4]=0flag|=dataflagbreak
case 0x30 : Tar[4]=1flag|=dataflagbreak
case 0x18 : Tar[4]=2flag|=dataflagt2++break
case 0x7a : Tar[4]=3flag|=dataflagbreak
case 0x10 : Tar[4]=4flag|=dataflagbreak
case 0x38 : Tar[4]=5flag|=dataflagbreak
case 0x5a : Tar[4]=6flag|=dataflagbreak
case 0x42 : Tar[4]=7flag|=dataflagbreak
case 0x4a : Tar[4]=8flag|=dataflagbreak
case 0x52 : Tar[4]=9flag|=dataflagbreak
default : break
}
}
}
}
IR=0
}
}
for(int m=0m<250m++)
DelayIR()
P2IES|=BIT0
}
#endif
请采纳。
系统码是用来识别不同的设备,用户码用来识别不同的按键,例如同一厂家生产的电视机和DVD,都有音量调节,它们的用户码是有可能相同,但系统码不同,所以不会相互干扰,同一设备不同按键,用户码是不相同的。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)