📄 51型万能遥控器.txt
字号:
#include
#include
#pragma ot(5,speed)
#define CLOCK9
#define MINGAP23
//70ms
#define GAPTIMES7
#define MAXLONG200
#define MAXBYTE20
#define MAXKEY36
#define PAGESIZE8
#define CODESITE128
#define REC_AREA1024*8
#define REC_LONG46
#define ERR16
#define FRR16
#define ERR10
#define ERR275
#define REC_ERR16
#define REC_ERR2125
#define LEARN0xfc
#define PARA0xfd
#define REC0xfb
#define STOP0xfe
#define KEY1P16
#define KEY2P17
#define KEY3P12
#define LEDP15
#define SEND0P10
#define SEND1P26
#define SEND2P25
#define SEND3P24
#define SEND4P23
#define SEND5P22
#define SEND6P21
#define SEND7P20
#define SEND8P11
#define SEND9P12
#define SEND10P13
#define SEND11P14
#define SEND12P15
#define SEND13P16
#define SEND14P17
#define SEND15P20
#define SDAP13
#define SCKP14
#define MEM_ADDRP34
unsigned char set(unsigned char i);
unsigned char getkey();
void load(unsigned char key);
void send2();
void delay1(unsigned char k);
void encode2(unsigned char key);
void para();
unsigned char read8();
void write8(unsigned char d);
unsigned char read(unsigned int addr);
unsigned char read0(unsigned char addr);
void write0(unsigned char addr,unsigned char x);
void write(unsigned int addr,unsigned char x);
void startbit();
void stopbit();
void learn(unsigned char key);
void f38();
void flash();
void delay10ms(unsigned char n);
void delay(unsigned int x);
void open_scon();
void close_scon();
void encode_sharp(unsigned char key);
void write_code(unsigned char key);
void send();
void send_sharp();
void send_rec();
void rec(unsigned char key);
intcode y=10700;
unsigned char code mask[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsigned char N,ok,time,stoptime,cod[REC_LONG];
unsigned char readT,word,device,gaplocate;
unsigned char codelong,count,x1,x2,x3,x4,x5,x6;
unsigned char gap,startH,startL,Hh,Hl,Lh,Ll,order=0xff,r_device;
unsigned intx,width;
unsigned char sharp_jvc,flag,longflag;
main()
{
unsigned char key;
flash();
LED=0;
x=y*5;
x=x/5;
x=x/100;
x=x*123;
x=x/123;
key=x;
while(key!=read0(0));
key=read0(1);
key--;
//write0(1,key);
open_scon();
IT0=1;
ET1=0;
EX0=0;
ET0=1;
EA=1;
TR1=1;
TR0=1;
/*
while(1)
{
key=getkey();
if(key==REC)
{
load(0);
LED=0;
do
{
send();
if(sharp_jvc==1)//=1 is jvcif send second then startH=0
startH=0;
ok=0;
TL0=0;
TH0=255-stoptime;
while(ok==0);
}while(!KEY3);//wait key up
LED=1;
}
if(key==LEARN)
{
LED=0;
close_scon();
learn(0);
open_scon();
flash();
}
else if(key==PARA)
{
close_scon();
para();
open_scon();
}
}
*/
start:
key=getkey();
if(key==LEARN)
{
do{
LED=0;
key=getkey();
if(key!=STOP)
{
flash();
if(key<=MAXKEY)
{
close_scon();
learn(key);
open_scon();
}
flash();
}
}while(key!=LEARN);
}
else if(key==PARA)
{
LED=0;
r_device=0;
while(r_device==0);
flash();
close_scon();
para();
open_scon();
}
else if(key==REC)
{
LED=0;
r_device=0;
while(r_device==0);
flash();
write(7+device*PAGESIZE,255);
}
else if(key!=STOP)
{
load(key);
if(longflag==1) goto start;
LED=0;
do
{
send();
ok=0;
TL0=0;
TH0=255-stoptime;
while(ok==0);
if(sharp_jvc==1)//=1 is jvc
{
startH=0;
send();
}
}while(order!=STOP);//wait key up
LED=1;
}
goto start;
}
recieve() interrupt 4
{
unsigned char temp;
if(RI)
{
order=0xff;
temp=SBUF;
if((temp>=0xe0)&&(temp<=0xef))
{
device=temp%16;
r_device=1;
}
else
order=temp;
RI=0;
}
}
void open_scon()
{
SCON=0x40;
REN=1;
TMOD=0x21;
ET1=0;
TL1=0xfa;
TH1=0xfa;
ES=1;
LED=1;
}
void close_scon()
{
TMOD=0x11;
ES=0;
ET1=1;
LED=0;
}
void flash()
{
LED=0;
delay10ms(15);
LED=1;
delay10ms(15);
LED=0;
delay10ms(15);
LED=1;
delay10ms(15);
LED=0;
delay10ms(15);
LED=1;
}
unsigned char getkey()
{
unsigned char i,j,key;
while(1)
{
if(!KEY1)
{
key=PARA;
delay(1000);
while(!KEY1);
delay(1000);
}
else if(!KEY2)
{
key=LEARN;
delay(1000);
while(!KEY2);
delay(1000);
}
else if(!KEY3)
{
key=REC;
delay(1000);
while(!KEY3);
delay(1000);
}
else if(order!=0xff)//recieve order
{
if(order==STOP)
key=STOP;
else
key=order;
order=0xff;
}
else
key=0xff;
if(key!=0xff)
{
return(key);
}
}
}
void f38()
{
switch(device)
{
case 0:
ok=0;
do{//38K HZ
SEND0=0;SEND0=0;SEND0=0;SEND0=0;
SEND0=0;SEND0=0;SEND0=0;SEND0=0;
SEND0=1;SEND0=1;SEND0=1;SEND0=1;
SEND0=1;SEND0=1;SEND0=1;SEND0=1;
SEND0=1;SEND0=1;SEND0=1;SEND0=1;
SEND0=1;
}while(ok==0);
break;
case 1:
ok=0;
do{//38K HZ
SEND1=0;SEND1=0;SEND1=0;SEND1=0;
SEND1=0;SEND1=0;SEND1=0;SEND1=0;
SEND1=1;SEND1=1;SEND1=1;SEND1=1;
SEND1=1;SEND1=1;SEND1=1;SEND1=1;
SEND1=1;SEND1=1;SEND1=1;SEND1=1;
SEND1=1;
}while(ok==0);
break;
case 2:
ok=0;
do{//38K HZ
SEND2=0;SEND2=0;SEND2=0;SEND2=0;
SEND2=0;SEND2=0;SEND2=0;SEND2=0;
SEND2=1;SEND2=1;SEND2=1;SEND2=1;
SEND2=1;SEND2=1;SEND2=1;SEND2=1;
SEND2=1;SEND2=1;SEND2=1;SEND2=1;
SEND2=1;
}while(ok==0);
break;
case 3:
ok=0;
do{//38K HZ
SEND3=0;SEND3=0;SEND3=0;SEND3=0;
SEND3=0;SEND3=0;SEND3=0;SEND3=0;
SEND3=1;SEND3=1;SEND3=1;SEND3=1;
SEND3=1;SEND3=1;SEND3=1;SEND3=1;
SEND3=1;SEND3=1;SEND3=1;SEND3=1;
SEND3=1;
}while(ok==0);
break;
case 4:
ok=0;
do{//38K HZ
SEND4=0;SEND4=0;SEND4=0;SEND4=0;
SEND4=0;SEND4=0;SEND4=0;SEND4=0;
SEND4=1;SEND4=1;SEND4=1;SEND4=1;
SEND4=1;SEND4=1;SEND4=1;SEND4=1;
SEND4=1;SEND4=1;SEND4=1;SEND4=1;
SEND4=1;
}while(ok==0);
break;
case 5:
ok=0;
do{//38K HZ
SEND5=0;SEND5=0;SEND5=0;SEND5=0;
SEND5=0;SEND5=0;SEND5=0;SEND5=0;
SEND5=1;SEND5=1;SEND5=1;SEND5=1;
SEND5=1;SEND5=1;SEND5=1;SEND5=1;
SEND5=1;SEND5=1;SEND5=1;SEND5=1;
SEND5=1;
}while(ok==0);
break;
case 6:
ok=0;
do{//38K HZ
SEND6=0;SEND6=0;SEND6=0;SEND6=0;
SEND6=0;SEND6=0;SEND6=0;SEND6=0;
SEND6=1;SEND6=1;SEND6=1;SEND6=1;
SEND6=1;SEND6=1;SEND6=1;SEND6=1;
SEND6=1;SEND6=1;SEND6=1;SEND6=1;
SEND6=1;
}while(ok==0);
break;
case 7:
ok=0;
do{//38K HZ
SEND7=0;SEND7=0;SEND7=0;SEND7=0;
SEND7=0;SEND7=0;SEND7=0;SEND7=0;
SEND7=1;SEND7=1;SEND7=1;SEND7=1;
SEND7=1;SEND7=1;SEND7=1;SEND7=1;
SEND7=1;SEND7=1;SEND7=1;SEND7=1;
SEND7=1;
}while(ok==0);
break;
}
}
/*************************************************************/
void delay10ms(unsigned char n)
{
for(n;n>0;n--) delay(600);
}
void delay(unsigned int x)
{
for(x;x>0;x--);
}
unsigned char set(unsigned char i)
{
count++;
if(i==8)
{
cod[N]=word;
if(N<REC_LONG)
N++;
word=0;
i=0;
}
return(i);
}
INT0() interrupt 0
{
TR0=0;
Hh=TH0;
Hl=TL0;
TH0=0;
TL0=0;
TR0=1;
while(!P32);
TR0=0;
Lh=TH0;
Ll=TL0;
TH0=0;
TL0=0;
TR0=1;
readT=1;
}
Timer1() interrupt 3
{
TL1=0;
TH1=256-CLOCK;//2.5ms
time++;
}
Timer0() interrupt 1
{
ok=1;
}
void delay1(unsigned char k)
{
for(;k>0;k--);
}
void learn(unsigned char key)
{
unsigned char i;
i=read(7+device*PAGESIZE);
if(i==255)
rec(key);
else if(i==2)
encode_sharp(key);
else
encode2(key);
}
void send()
{
if(sharp_jvc==255)
send_rec();
if(sharp_jvc==2)
send_sharp();
else
send2();
}
void write(unsigned int addr,unsigned char x)
{
unsigned char ah,al,temp;
addr=addr+3;
if(addr>=1024*8)
{
MEM_ADDR=1;
temp=162;
}
else
{
MEM_ADDR=0;
temp=160;
}
ah=addr/256;
al=addr%256;
startbit();
write8(temp);
write8(ah);
write8(al);
write8(x);
stopbit();
delay1(200);
}
void write0(unsigned char addr,unsigned char x)
{
startbit();
write8(160);
write8(0);
write8(addr);
write8(x);
stopbit();
delay1(200);
}
unsigned char read0(unsigned char addr)
{
unsigned char dat;
MEM_ADDR=0;
startbit();
write8(160);
write8(0);
write8(addr);
startbit();
write8(161);
dat=read8();
stopbit();
return(dat);
}
unsigned char read(unsigned int addr)
{
unsigned char dat,ah,al,temp;
addr=addr+3;
if(addr>=1024*8)
{
MEM_ADDR=1;
temp=162;
}
else
{
MEM_ADDR=0;
temp=160;
}
ah=addr/256;
al=addr%256;
startbit();
write8(temp);
write8(ah);
write8(al);
startbit();
write8(temp+1);
dat=read8();
stopbit();
return(dat);
}
void write8(unsigned char d)
{
unsigned char i;
for(i=0;i<8;i++)
{
SCK=0;
if((d<<I)&0X80) SDA="1;
else SDA=0;
SCK=1;delay1(38);
}
SCK=0;
SCK=1;//ACK bit
while(SDA);
SCK=0;
}
unsigned char read8()
{
unsigned char i;
unsigned char d=0;
SCK=0;
for(i=0;i<8;i++)
{
SDA=1;
SCK=1;delay1(38);
if(SDA==1) d=d|((0x80)>>i);
delay1(38);
SCK=0;
}
SCK=0;delay1(38);//NO ACK
SDA=1;
SCK=1;delay1(38);
SCK=0;
return(d);
}
void startbit()
{
SCK=0;delay1(38);
SDA=1;
SCK=1;delay1(38);//start bit
SDA=0;delay1(38);
SCK=0;delay1(38);
}
void stopbit()
{
SCK=0;
SDA=0;delay1(38);
SCK=1;delay1(38);//stop bit
SDA=1;delay1(38);
SCK=0;delay1(38);
}
void write_code(unsigned char key)
{
unsigned char i;
if(read(4+device*PAGESIZE)==1)
write(4+device*PAGESIZE,gap);
x=CODESITE+(MAXBYTE+2)*(key+MAXKEY*device);
write(x,count);
write(x+1,gaplocate);
if(count<MAXLONG)
for(i=0;i<N;I++)
write(x+2+i,cod);
}
void load(unsigned char key)
{
unsigned char i;
unsigned int offset;
sharp_jvc=read(7+device*PAGESIZE);
stoptime=read(6+device*PAGESIZE)+36;
startL=read(3+device*PAGESIZE);//256-31;
startH=read(2+device*PAGESIZE);//256-15;
width=read(0+device*PAGESIZE)*256+read(1+device*PAGESIZE);
gap=read(4+device*PAGESIZE);
if(sharp_jvc!=2)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -