📄 program+yanshi.c
字号:
//这是一个红外接收程序,并用2个数码管显示其键值。
#include<main.h>
void delay(uchar j)
{
while(j--);
}
//红外接收模块
void int00(void) interrupt 0 using 0
{
uchar w=4,flag=0;
uchar n=8;
uchar p=0;
EX0=0;
TR1=0;
flag_t0=0;
TH0=0xfc; //产生880ms中断,用来判断是高电平,还是低电平
TL0=0xd3;
TR0=1;
while(flag_t0==0);
flag_t0=0;
if(P32==0)
{
TH0=0xe3;
TL0=0x6c; //定时8820减掉上面的882
TR0=1;
while(flag_t0==0)
{
ii=b&0xf0;
ii=ii>>4;
jj=b&0x0f;
P0=getcode[ii];
P27=0;
delay(10);
P27=1;
P0=getcode[jj];
P26=0;
delay(10);
P26=1;
}
flag_t0=0;
while(P32==0);
TH0=0xee;
TL0=0xef; //定时4740
TR0=1;
while(flag_t0==0)
{
if(TH0==0xfa&&TH0==0x3d&&P32==0)
flag=1;
ii=b&0xf0;
ii=ii>>4;
jj=b&0x0f;
P0=getcode[ii];
P27=0;
delay(10);
P27=1;
P0=getcode[jj];
P26=0;
delay(10);
P26=1;
}
flag_t0=0; //4740ms是用来判断9s过后的4.5ms是否到时间
if(flag==0){
if(P32==0)
{
while(w--)
{
while(n--)
{
save=save>>1;
while(P32==0);
TH0=0xfc; //产生880ms中断,如P32等于1,则所传数据位为1,否则为0
TL0=0xb7;
TR0=1;
while(flag_t0==0);
flag_t0=0;
flag_c=P32;
while(P32==1);
if(flag_c==1)
save=save+0x80;//存储数据
a[p]=save;
}
save=0;
p++; //读取4个字节32位数据
n=8;
}
}
}
if(a[2]==~a[3])
{ //判断传送数据是否正确
b=a[2];
}
}
// delay(255);
flag=0;
EX0=1; //开中断,关定时器
TR0=0;
TR1=1;
}
//精确定时882中断
void t0(void) interrupt 1 //清T0溢出标志,使能溢出位,关定时器
{
TR0=0;
TF0=0;
flag_t0=1;
}
//显示程序
void tt1(void) interrupt 3 using 0
{
uchar ii,jj;
ii=b&0xf0;
ii=ii>>4;
jj=b&0x0f;
P0=getcode[ii];
P27=0;
delay(10);
P27=1;
P0=getcode[jj];
P26=0;
delay(10);
P26=1;
TF1=0;
TH1=0Xff;
TL1=0Xff;
TR1=1;
}
//主函数
void main(void)
{
//while(1)
//{
uchar n=9;
P0=0xff;
P2=0xff;
P32=1;
IE=0x83;
ET1=1;
TH0=0X00;
TL0=0X00;
TH1=0Xff;
TL1=0Xff;
IP=0x02; //T0设置为高优先级
TMOD=0x11; //设置T0工作方式1
IT0=1; //下降沿触发
while(1);
// }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -