红外光通信装置-电赛报告 联系客服

发布时间 : 星期日 文章红外光通信装置-电赛报告更新完毕开始阅读37859a241fd9ad51f01dc281e53a580216fc50a4

uchari,temp;

for(i=0;i<8;i++) //每个码有8位数字 {

temp=temp>>1; //temp中的各数据位右移一位,因为先读出的是低位数据

TH0=0; //定时器清0 TL0=0; //定时器清0 TR0=1; //开启定时器T0

while(re==0) ;//如果是低电平就等待 低电平计时 TR0=0; //关闭定时器T0

LowTime=TH0*256+TL0; //保存低电平宽度 TH0=0; //定时器清0 TL0=0; //定时器清0 TR0=1; //开启定时器T0

while(re==1); //如果是高电平就等待 TR0=0; //关闭定时器T0

HighTime=TH0*256+TL0; //保存高电平宽度 if((LowTime<800)||(LowTime>1600))

return 0; //如果低电平长度不在合理范围,则认为出错,停止解码

if((HighTime>1200)&&(HighTime<1850)) //如果高电平时间在600微秒左右, {

temp=temp&0x7f; //则该位是0 }

if((HighTime>2000)&&(HighTime<3000)) //如果高电平时间在1000微秒左右, {

temp=temp|0x80; //则该位是1 } }

mess=temp; return 1; }

void Delay999ms() //@30.000MHz {

unsigned char i, j, k;

_nop_(); _nop_(); i = 114;

33

j = 226; k = 60; do {

do {

while (--k); } while (--j); } while (--i); }

/***********************************************main*********************************************/ void main() {

init_Lcd(); mess=0;

Eraseeeprom(); //擦除EEPROM flag = 0; j =0;

tem = 29;

TMOD = 0x01; TR0=0;

init_ex0(); while (1) {

// display(tem); // Delay999ms(); } }

/**********************红外线触发中断处理函数**********************/ void ex0() interrupt 0 {

// display(mess); EX0=0; //关闭外中断0,不再接收二次红外信号的中断,只解码当前红外信号

34

TH0=0; //定时器T0的高8位清0 TL0=0; //定时器T0的低8位清0 TR0=1; //开启定时器T0

while(re==0);//如果是低电平就等待

TR0=0;

LowTime=TH0*256+TL0; //保存低电平时间

TH0=0; //定时器T0的高8位清0 TL0=0; //定时器T0的低8位清0 TR0=1; //开启定时器T0

while(re==1); //如果是高电平就等待 // test1=0;

TR0=0; //关闭定时器T0

HighTime=TH0*256+TL0; //保存引导码的高电平长度 // test=0;

if((LowTime>3000)&&(LowTime<4500)) {

//P0=0xaa;

if((HighTime>4500&&HighTime<5600)) {

if(flag == 0) {

DeCode(); // 执行遥控解码功能 P0=mess;

IapProgramByte(j, mess); ////写EEPROM j++;

if(j == 20000) {

flag = 1; j = 0; } }

if(flag == 1) {

while(1) {

while(j!=20000) {

DAC(IapReadByte(j)); //读EEPROM并DAC转化

35

Delay120us(); j++; }

j=0; // P0=0xaa; }

Eraseeeprom(); //擦除EEPROM flag = 0; j = 0; } }

else if((HighTime>6800&&HighTime<8300)) {

if(flag==0) {

DeCode(); tem=mess;

display(tem); // Delay999ms(); } } }

EX0=1; //开启外中断EX0 }

//*************************程序END******************************//

36