/***********************************************************************/
/***********************************************************************/
/*************************** ****************************/
/*************************** 深圳伟嵌科技 ****************************/
/***********************************************************************/
/************************** ***************************/
/************************** www.mcufpga.com ***************************/
/************************** ***************************/
/***********************************************************************/
/***********************************************************************/
/************************ ************************/
/************************ 红外遥控 C语言程序 ************************/
/************************ ************************/
/***********************************************************************/
/***********************************************************************/
/***********************************************************************/
//数码管后2位显示机器码,前2位显示键值。晶振最好用11.0592M,当键值为0xb9的,继电器动作。
/***********************************************************************/
#include <reg51.h>
#include <intrins.h>
void beep();
void SystemInit(void);
void Delay_840us(void);
void Delay_2400us(void);
void LedDisp();
unsigned char GetCode(void);//获得码
void delay(unsigned char loop);
sbit IRIN = P3^2;
sbit BEEP = P1^6;
sbit swch = P1^7;
unsigned char KeyValue;//机器码
unsigned char MaValue;//键值码;
unsigned char disbuf[4];//数码管显示缓冲
unsigned char scan[4]={0x04,0x08,0x10,0x20};//p2位选择
unsigned char code table[16] =//共陰碼
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7C,0x39,0x5E,0x79,0x71};
void beep()//蜂鸣器
{
unsigned char i;
for (i=0;i<100;i++)
{
delay(5);
BEEP=~BEEP;
}
BEEP=0;
}
void delay(unsigned char loop) //us延时
{ unsigned char i;
for(i=0;i<loop;i++);
}
void Delay_840us(void)
{ TL1=-774;
TH1=((-774)>>8);
TR1=1;
while(!TF1);
TF1=0;
TR1=0;
}
void Delay_2400us(void)
{ TL1=-2212;
TH1=((-2212)>>8);
TR1=1;
while(!TF1);
TF1=0;
TR1=0;
}
void SystemInit(void)
{//P1=0xff;
IRIN=1;
BEEP=1;
IE=0x81; //使能INT0 EX0=1;
IT0=1; //INT0负跳变触发
TMOD=0x10; //定时器1工作在方式1
EA=1;
EX0=1;
}
unsigned char GetCode()//读码:
{ unsigned char n;
static temp=0;
for(n=0;n<8;n++)
{ while(!IRIN);
Delay_840us();
if(IRIN) //0
{ temp=(0x80|(temp>>1));
while(IRIN);
}
else temp=(0x00|(temp>>1));//1
}
return temp;
}
void LedDisp()
{ unsigned char i;
for(i=0;i<4;i++)
{
P0=table[disbuf[i]];
P2 = scan[i];
delay(50);
P0=0x00;
}
}
void main(void)
{
SystemInit();
BEEP =0;
while(1)
{ //以下是查表显示
disbuf[0]=(((KeyValue&0xf0)>>4)&0x0f);
disbuf[1]=KeyValue&0x0f;
disbuf[2]=(((MaValue&0xf0)>>4)&0x0f);
disbuf[3]=MaValue&0x0f;
LedDisp();
}
}
void int0_irq(void) interrupt 0
{ unsigned char n;
unsigned char Count=0;
unsigned char addrl,addrh,num1,num2;
EA=0;
for(n=10;n>0;n--) //检测9ms开始码
{ Delay_840us();
if(IRIN)
{ Count++;
break;
}
}
if(Count)
{ //KeyValue=Count;
EA=1;
return;
}
while(!IRIN);
Delay_2400us(); //4.5ms结果码
if(!IRIN)
{EA=1;return;}
Delay_2400us();
addrl=GetCode();
addrh=GetCode();
num1=GetCode();
num2=GetCode();
if(num1!=~num2)//错码;
{ KeyValue=14;
EA=1;
return;
}
KeyValue=num2;
MaValue=addrh;
beep();
if( KeyValue==0xb9 ) swch=~swch;
EA=1;
}
HongWaiYaoKong.rar_c51 红外遥控
版权申诉
22 浏览量
2022-09-24
16:04:39
上传
评论
收藏 15KB RAR 举报
alvarocfc
- 粉丝: 109
- 资源: 1万+
最新资源
- Screenshot_20240522_084328_com.tencent.mm.jpg
- 附件计算机专业课选课说明-1.xlsx
- 基于TypeScript的ahousepet-admin-web管理系统设计源码
- 《广东开放大学学习指引》期末考核要求0522.zip
- mkl-2021.1.1-py2.py3-none-macosx-10-15-x86-64.whl
- mkl-2018.0.3-py2.py3-none-manylinux1-x86-64.whl
- halcon实现两幅图像相减
- mkl-2021.3.0-py2.py3-none-manylinux1-x86-64.whl
- IAR9.3主题配置,包含字体颜色等
- 才从简来.apk
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈