📄 11.c
字号:
#include<reg52.h>
#include<rom.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit remotein=P0^6; //遥控信号输入
sbit remoteout=P0^7; //遥控信号输出
sbit P10=P1^0;
sbit P11=P1^1;
uint i,j,n,k,s;
uchar idata arg[192];
uchar idata head_buf[2];
uchar xdata date1[32];
uchar xdata date2[32];
uchar xdata date3[32];
uchar xdata date4[32];
uchar xdata date5[32];
uchar xdata date6[32];
uint head,c,i; //存放脉冲宽度数据用
uint remdata; // 存放起始位用
uchar temp,flag;
/********1ms 延时程序**********/
delay1ms(uint t)
{
for(i=0;i<t;i++)
for(j=0;j<120;j++);
}
/********初始化程序**********/
void write_address()
{
for(i=0;i<32;i++)
{
date1[i]=arg[i];
delay(312);
date2[i]=arg[i+32];
delay(312);
date3[i]=arg[i+64];
delay(312);
date4[i]=arg[i+96];
delay(312);
date5[i]=arg[i+128];
delay(312);
date6[i]=arg[i+160];
delay(312);
}
WrToFRam(0xa0,0x0000+0x0100*temp,date1,32);
delay(31320);
WrToFRam(0xa0,0x0020+0x0100*temp,date2,32);
delay(31320);
WrToFRam(0xa0,0x0040+0x0100*temp,date3,32);
delay(31320);
WrToFRam(0xa0,0x0060+0x0100*temp,date4,32);
delay(31320);
WrToFRam(0xa0,0x0080+0x0100*temp,date5,32);
delay(31320);
WrToFRam(0xa0,0x00a0+0x0100*temp,date6,32);
delay(31320);
WrToFRam(0xa0,0x00e0+0x0100*temp,head_buf,2);
delay(31320);
}
void read_address()
{
RdFromFRam(0xa1,0x0000+0x0100*temp,date1,32);
delay(31320);
RdFromFRam(0xa1,0x0020+0x0100*temp,date2,32);
delay(31320);
RdFromFRam(0xa1,0x0040+0x0100*temp,date3,32);
delay(31320);
RdFromFRam(0xa1,0x0060+0x0100*temp,date4,32);
delay(31320);
RdFromFRam(0xa1,0x0080+0x0100*temp,date5,32);
delay(31320);
RdFromFRam(0xa1,0x00a0+0x0100*temp,date6,32);
delay(31320);
RdFromFRam(0xa1,0x00e0+0x0100*temp,head_buf,2);
delay(31320);
for(i=0;i<32;i++)
{
arg[i]=date1[i];
delay(312);
arg[i+32]=date2[i];
delay(312);
arg[i+64]=date3[i];
delay(312);
arg[i+96]=date4[i];
delay(312);
arg[i+128]=date5[i];
delay(312);
arg[i+160]=date6[i];
delay(312);
}
}
/*******键功能函数*********/
keywork()
{
P10=0;
temp=temp-0x40;
read_address();
ET0=1;TR0=1;ES=0;
head=head_buf[0];
c=head_buf[1];
c=c<<8;
head=head|c; //
for(i=head;i>0;i--){;} //
remoteout=0;ET0=0;TR0=0;
n=0;
while(1)
{
if(arg[n]==0x00){delay1ms(10);temp=0;P10=1;ES=1;break;} //
for(i=arg[n];i>0;i--)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
n++;
ET0=1;TR0=1;
for(i=arg[n];i>0;i--){;}
remoteout=0;ET0=0;TR0=0;n++;
}
}
/********主函数**********/
/********40kHz发生器**********/
//定时中断T1
void time_intt1(void) interrupt 1
{
remoteout=~remoteout;
}
/********学习函数**********/
//外中断0
void study()
{
P11=0;
ET0=0;TR0=0;ES=0;EA=0;head=0;
while(remotein==1);
head=0;
while(remotein==0)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
head++;
}
head_buf[0]=head;
head_buf[1]=head>>8;
n=0;remdata=0x00;
while(1)
{
while(remotein==1)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
remdata++;
}
if(remdata>334)
{arg[n]=0x00;ES=1;EA=1;goto end;}
arg[n]=remdata;n++;
remdata=0x00;
while(remotein==0)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
remdata++;
}
arg[n]=remdata;n++;remdata=0x0000;
}
end: write_address();remotein=1;remoteout=0;temp=0;P11=1;
}
void main()
{
P10=1;
P11=1;
remoteout=0;
remotein=1;
TMOD=0x22;
PCON=0x00;
TH1=0xfd;
TL1=0xfd;
TH0=0xf3;
TL0=0xf3;
TR1=1;
TR0=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
while(1)
{
if(flag==1)
{
ES=0;
flag=0;
SBUF=temp;
while(!TI);
TI=0;
ES=1;
}
if((temp>0x00)&&(temp<0x40)) //0x01-0x3f为学习键
study();
else
if ((temp>0x40)&&(temp<0x80)) //0x41-0x7f为发射键
keywork();
else;
}
}
void serial() interrupt 4
{
temp=SBUF;
flag=1;
RI=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -