谁能告诉我,这个红外解码程序是什么意思。如何我用遥控器发射一个数字,他是如何接受和处理的,下面是程序

谁能告诉我,这个红外解码程序是什么意思。如何我用遥控器发射一个数字,他是如何接受和处理的,下面是程序,第1张

你要明白,你按数字键1,其实它是发射一个红外代码。一个遥控器的红外代码应由以下三部分组成:引导码,前16为用户识别码(即不同产家不用型号不同遥控有不同用户码),后16位为 *** 作码(里面8位功能码及8位功能反码,这16位就是遥控器上不同按键的区分)。上面32位码都是二进制数,即“0”、“1“。程序中第一个for语句,是把用户识别码和 *** 作码一起分成4部分,每部分8位(1个字节),接下来的for语句是对每一位进行判断,判断是0还是1,然后用value通过与来记住一个字节里面的每一位,最后再将value赋给date。

#include<reg51h>

#include

<intrinsh>

#define

uchar

unsigned

char

#define

uint

unsigned

int

#define

ulong

unsigned

long

#define

Nop()

{_nop_();

_nop_();

_nop_();

_nop_();

_nop_();}

volatile

ulong

IRcode=0x00000000;

//32位的键代码

volatile

ulong

Irdcode=0x00000000;

volatile

uint

customcode=0x0000;

//16位用户码

volatile

uint

time_us=0x0000;

//两个下降沿之间的时间

volatile

uchar

timeH,timeL;

//保存TH1

TL的值

uchar

Lcustomcode;

//低8用户码

uchar

Hcustomcode;

//高8

uchar

datacode;

//8位键数据码

uchar

mycode;

uchar

Rdatacode;

//8位键数据反码

uchar

uc1ms;

uchar

uc10ms;

uchar

uc3ms;

uchar

ucDispTime;

uchar

ucDispOrder;

uchar

ucDispCon;

uchar

ucSpeakerTime;

unsigned

char

code

LedData[16]

=

{

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

unsigned

char

code

LedCon[2]

=

{0x8f,0x4f};

unsigned

char

ucDispData[2];

//

存放显示数据

sbit

led1

=

P3^7;

sbit

led2

=

P3^6;

sbit

power=P1^0;

//电源开关

sbit

BEEP=

P2^1;

bit

NewIRcode=0;

//指示当处理完了32位码后,就有了新的遥控码

bit

DataRight=0;

//为1时读取数据正确

bit

bSampleOk;

bit

bSampling;

bit

b10msInt;

bit

b1msInt;

bit

bKeySound;

bit

b1msMain;

bit

IR_E;

//表示有新的遥控键控下就更新扫描数据

bit

b3msint;

void

SendDataToDispDevice();

void

Ir_process();

void

display();

void

beeping();

/

晶振为12

MHZ/

/定时器1,12

MHZ最大定时为6553ms/

//------------------------------------------------------------------------------

void

init()

{

IP=0x09;

//定时器1,外部中断0优先级高

TMOD=0x11;

//定时器0,工作方式1

;

定时器1,工作方式1

TCON=0x01;

//外中断0下降沿触发,(包括TR1=0,TR0=0)

TH0=0xff;

//初始化定时器0,定时02ms

TL0=0x47;

TH1=0x00;

//初始化定时器1

TL1=0x00;

EA=1;

//开全中断

ET0=1;

//开放T0中断

ET1=1;

//开放T1中断

EX0=1;

//开放INT0

TR1=0;

TR0=1;

}

//--------------------------------------

void

TimeProg(void)

{

b1msMain

=

b1msInt;

b1msMain=0;

b10msInt

=

0;

if(b1msInt

==

1)

{

b1msMain=1;

if(++uc10ms

==

10)

{

uc10ms

=

0;

b10msInt

=

1;

if(bKeySound==1)

{

beeping();

bKeySound=0;

}

}

}

}//void

TimeProg(void)

//-------------------------------------interrupt0-------------------------------------

void

IR_ISR()

interrupt

0

using

1

//遥控器中断处理函数

{

static

uchar

cn;

TR1=0;

timeH=TH1;

timeL=TL1;

TH1=0;

TL1=0;

TR1=1;

//开定时器中断1

time_us=(unsigned

int)timeH;

time_us=time_us<<8;

time_us=time_us|timeL;

if(time_us>12200&&time_us<13000)

{cn=1;IRcode=0;}

//遇到引导码,就把cn清0,IRcode清0

//引导码的时间长度为9ms+45ms

if(cn<34)

{

if(time_us>950&&time_us<1120)

//0

{

IRcode=IRcode|0x00000000;

if(cn<33)

IRcode=IRcode>>1;

}

else

if(time_us>1920&&time_us<2120)

//1t

>

1950

&&

t

<

2150

{

IRcode=IRcode|0x80000000;

if(cn<33)

IRcode=IRcode>>1;

}

//else

if(time_us>10000&&time_us<11000)

{Irdcode=IRcode;cn=34;

}

//遇到重复码

//cn用于记录接收到的数据位

}

cn++;

if(cn==34)

{

NewIRcode=1;

TR1=0;

Irdcode=

IRcode;

cn=0;

}

//读完32位码,则有新码产生

}

//--------------------------------------timer_ISR------------------------------

void

Timer0_ISR()

interrupt

1

using

2

//定时器0中断函数

{

TR0=0;

TH0=0xff;

//初始化定时器0,定时02ms

晶振为110592

MHZ

TL0=0x47;

TR0=1;

if(++uc1ms

==

5)

{

uc1ms

=

0;

b1msInt=1;

if(++uc3ms==8)

{

uc3ms=0;

b3msint=1;

SendDataToDispDevice();

//n

ms送一次显示

}

}

}//void

Timer0IntProg()

interrupt

1

using

1

void

Timer1_ISR()

interrupt

3

using

3

//定时器1中断函数

{

TR1=0;

TH1=0x00;

//初始化定时器1

TL1=0x00;

TR1=1;

}

//--------------------SendDataToDispDevice----------

void

SendDataToDispDevice()

{

unsigned

char

n;

//watchdog();

if(++ucDispOrder

>=

2)

ucDispOrder

=

0;

//

下一显示巡回

//

下面为发送控制数据

位控

if(ucDispOrder==0)

{led1=0;

led2=1;

Nop();

Nop();

}

if(b3msint==1)

{if(ucDispOrder==1)

{led2=0;

led1=1;

Nop();

Nop();

}

}

//

下面为发送显示数据

n

=

LedData[ucDispData[ucDispOrder]];

P0=n;

}

//void

SendDataToDispDevice()

//------------------------------------main()----------------------------------------------

void

main()

{

init();

beeping();

while(1)

{

TimeProg();

Ir_process();

display();

}

}

void

Ir_process()

{

if(NewIRcode==1)

//如果有新的遥控码就读

{

NewIRcode=0;

//读完之后清零,表示新码已读

customcode=(Irdcode>>16);

//取红外码中的按码键

//取低8位用户码

Lcustomcode=customcode>>8;//取低8位按码键

datacode=(unsigned

char)(customcode&0x00ff);

//取高8位按码键

Rdatacode=Lcustomcode;

//取低8位按码键的反码

if(~Rdatacode!=datacode)

{

DataRight=0;

Irdcode=0;

datacode=Rdatacode=0;

}

//校验用户码,反码

else

{

DataRight=1;

IR_E=1;

mycode=datacode;}

if(DataRight==1)

{

bKeySound

=

1;DataRight=0;

}

}

}

void

display()

{

/

unsigned

char

a[2];

a[0]

=

mycode

&

0x0f;

mycode

=

mycode

>>

4;

a[1]

=

mycode

&

0x0f;

ET0

=

0;

ucDispData[0]

=

a[0];

ucDispData[1]

=

a[1];

ET0

=

1;/

if(IR_E==1)

{

ET0

=

0;

ucDispData[0]

=

mycode

&

0x0f;

mycode

=

mycode

>>

4;

ucDispData[1]

=

mycode

&

0x0f;

IR_E=0;

ET0

=

1;

}

}

//

void

delay(unsigned

char

x)

//x014MS

{

unsigned

char

a;

while(x--)

{

for

(a

=

0;

a<13;

a++)

{;}

}

}

//

void

beeping()

{

unsigned

char

i;

for

(i=0;i<100;i++)

{

delay(4);

BEEP=!BEEP;

//BEEP取反

}

BEEP=1;

//关闭蜂鸣器

}

1、一般来说,红外连接,首先正确安装笔记本电脑的红外驱动程序,在WIN98系统里红外设备是即插即用设备,一般在BIOS里开启红外功能后系统即可自动完成红外驱动程序和红外应用程序的安装。

2、安装完成后,在任务栏双击红外通讯图表打开"红外线监视器"程序,通过更改设置将其击活,使之处于搜索其他红外设备的状态。如果一切顺利,就可以进行连接了。

3、分别打开两台电脑quot;红外线监视器"窗口,将台式电脑的红外适配器窗口对准笔记本电脑的红外口,两个"红外线监视器"都回很快作出反应,并报告在有效区域内发现了对方,并列出通讯对方的名称。

4、WIN98系统自带了一个红外数据传输的应用程序,名为"红外线传输",你可以通过双击"我的电脑"中的"红外线接受者"将其打开。

以上就是关于谁能告诉我,这个红外解码程序是什么意思。如何我用遥控器发射一个数字,他是如何接受和处理的,下面是程序全部的内容,包括:谁能告诉我,这个红外解码程序是什么意思。如何我用遥控器发射一个数字,他是如何接受和处理的,下面是程序、求51单片机红外摇控接收c程序,并在数码管上显示键值出来、怎样使电脑具有红外线功能等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9350280.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存