红外接收端接P1——1,让接收到的数在数码管上显示,如何写解码程序。

红外接收端接P1——1,让接收到的数在数码管上显示,如何写解码程序。,第1张

思维:

先接9毫秒的高电平,4.5毫秒的低电平!在接收时,如果不为9毫秒和4.5毫秒姿祥即可退出!(当然,它们可以有范围的高电平可以放宽到8到10毫秒左右,因为有能量损失!)解码数据时!先解码

高电平(0.56毫秒)在解码没有信号(1.125)为0,没有信号(2.25)为1,将数据存入寄存器就OK!32位数据接收完成后!判断是否为别的遥控器晌森!判断用户码是否为一直的!在读出数迹谨搏据,散装到要执行的 *** 作!

void wen() interrupt 4

{

RI=0

a=SBUF

j=SBUF

flag=1

}

你自己不是已昌袭镇经写了,再加耐粗个判断就是禅咐了。

#include<reg52.h>

unsigned char distemp

unsigned char irtime//红外用全局变量

bit irpro_ok,irok

static unsigned char i

sbit zhongduan=P3^3

unsigned char IRcord[4]

unsigned char irdata[33]

void main(void)

{

IT1 = 1 // 配好虚置为下降沿中断1 / INT0(p3 3)

EX1 = 1 // 使EX0中断

EA = 1

TMOD=0x02//定时器0工作方蚂基式2,TH0是重装值,TL0是初值

TH0=(65536-65536)/256//重载值

TL0=(65536-65536)%256//初始值

ET0=1//开中断

TR0=1

zhongduan=1

while(1) /友物燃/主循环

{

if(irok)

{

unsigned char i, j, k=1 //红外码值处理函数,K=1,33位中第一位为头码,所以为1是跳过读取头码

unsigned char cord,value

for(i=0i<4i++) //处理4个字节

{

for(j=1j<=8j++) //处理1个字节8位

{

cord=irdata[k]

value=value>>1

if(cord>7) value=value|0x80//大于某值为1

k++

}

IRcord[i]=value

value=0

}

irpro_ok=1//处理完毕标志位置1

irok=0

}

}

}

void ex0_isr (void) interrupt 2 //外部中断0服务函数

{

if(zhongduan==0)

{

if(irtime<55&&irtime>=35)//引导码 TC9012的头码

{i=0}

irdata[i]=irtime

irtime=0

i++

if(i==33)

{

irok=1

i=0

}

}

else

{

irtime=0

zhongduan=1 //P33口保持高电平

}

}

void tim0_isr (void) interrupt 1 //定时器0中断服务函数

{

irtime++

}


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

原文地址: https://outofmemory.cn/yw/12416162.html

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

发表评论

登录后才能评论

评论列表(0条)

保存