📄 lc7461.c
字号:
/*
遥控器使用红外线遥控编码芯片为LC7461
*/
#include<reg52.h>
#include"portdef.h"
#include"lcdfun.h"
//sbit IRH=P3^2;
#define uchar unsigned char
//uchar x,y;
bit flag; //引导码标志位
uchar REM_l;
uchar REM_h;
uchar num;
char num_to_char[20]="0123456789abcdef";
char show[3];
/**************精确延时程序***************/
void delay_880us(void) //延时880us
{
unsigned int i;
for(i=0;i<109;i++);
}
void delay_4720us(void) //延时4.7ms
{
unsigned int k;
for(k=0;k<892;k++);
}
void delay_1ms(void) //延时1ms
{
unsigned int m;
for(m=0;m<124;m++);
}
void main()
{uchar H,L;
void Read_Key();
Init_Lcd();
while(1)
{
while(IRH);
Read_Key();
H=num/16;
L=num%16;
show[0]=num_to_char[H];
show[1]=num_to_char[L];
//Init_Lcd();
Characters_Disp(3,0,show);
}
while(1);
}
/*************中断服务程序***********/
void Read_Key()//int0() interrupt 0 using 0
{
char i,k,n,temp;
//EA=0;
/****以下跳过系统引导码****/
for(i=0;i<10;i++)
{
delay_880us();//延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
if(IRH==1)
{
flag=1;
break;
}// 重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
else
flag=0;
}
if(flag==0)
{ //
while(IRH==0);//等待高电平避开9毫秒低电平引导脉冲
delay_4720us();//延时4.74毫秒避开4.5毫秒的结果码
/****忽略26位识别码****/
for(i=0;i<26;i++)
{
while(IRH==0);
delay_880us();//高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
if(IRH==0)
continue;
else
delay_1ms();
}
/*处理用户操作码及反码*/
for(n=0;n<2;n++)
{
k=0X01;
for(i=0;i<8;i++)
{
while(IRH==0);//等待高电平
delay_880us();
if(IRH==0) //检测该位为0或1 并存储到temp
temp=temp&(~k);
else
{
delay_1ms();
temp=temp|k;
}
k=k<<1;
}
if(n==0) REM_h=temp; //n==0时temp为操作码存到REM_h,n==1时为操作反码存到REM_l
else REM_l=temp;
}
if((~REM_h)==REM_l)
{
num=REM_h;
//P1=REM_h;
}
}
//EA=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -