您的位置:首页技术文栏单片机C51
内容搜索:
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

M50462遥控器解码程序

[日期:2008-05-24 ] [来源:东哥单片机学习网(www.picavr.com) 作者:佚名] [字体: (投递新闻)

来源:网上转载   作者:不详

/************** YTREM.PLM  ********************/
/* 遥控器按键代码表(熊猫 M50462/CL54L2) */
/* 1---00h;2---10h;3---08h;4---18h;5---04h;6---14h;7---0ch;8---1ch; */
/* 9---80h;0---90h;1+---88h;2+---98h;pd+---50h;pd_---48h;ld+---0cch; */
/* ld_---0dch;yl+---44h;yl_---54h;sd+---0c4h;sd_---0d4h;BZ---0D0h; */
/* TV/AV---5CH;PX---D8H;-->.<-- ---0D0H;CLK---0E8H;*/
/* TIME---0F8H;ON.T---0E4H;SEL---0F4H;INC---0ECH;  */
start:do;
$include(reg51.dcl)
  declare (data1,data2,key,DAT) byte at (30h);
  declare (ah,al,NUMBER,jihao,bjihao) byte;
  declare Ale literally 'p17',da literally 'p15',clk literally 'p16';
  DECLARE ACO(11) BYTE CONSTANT (0EDH,28H,0DCH,7CH,39H,75H,0F5H,2CH,
     0FDH,7DH,02H);
    
DISPLAY: PROCEDURE(NUM);
  DECLARE (K,NUM,N) BYTE;
  N=NUM;
  N=N MOD 10;
  N=ACO(N);
      DO K=0 TO 7;
  N=SCR(N,1);
  DA=CY;
  CLK=0;
   call time(1);
  CLK=1;
      END;
  N=NUM;
  N=N/10;
  N=ACO(N);
      DO K=0 TO 7;
  N=SCR(N,1);
  DA=CY;
  CLK=0;
   call time(1);
  CLK=1;
      END;
      ALE=0;
       call time(2);
      ALE=1;  

END DISPLAY;

YTNUMBER: procedure(kk);
  declare (kk,relay) byte;
  if kk=02 then
     DO;
 NUMBER=NUMBER+1;
 IF NUMBER>4 THEN NUMBER=1;
     END;
 
  if kk=01 then
     DO;
 NUMBER=NUMBER-1;
 IF NUMBER=0 THEN NUMBER=4;
     END;
   CALL DISPLAY(NUMBER);
   KEY=0; data2=0;
END YTNUMBER;

recieve: procedure interrupt 4 using 1;
  declare (k,ask) byte;
  disable; 
  if data2=0e2h and dat<>0 then
  do;
    ri=0;
    jihao=sbuf;
    if jihao=bjihao then
    do;  
      data2=0;
      p32=1;
      do k=1 to 2;
  if k=1 then sbuf=dat;
  if k=2 then sbuf=number;
  do while ti=0;
  end;
  ti=0;
  call time(1);
      end;
     
    p32=0;
      do while ri=0;
      end;
      ri=0;
      ask=sbuf;
      if ask=0ffh then 
      do;
      ;
      end;       

  /*    data1=0ffh;dat=0;  */
    end;
  end;
  enable;
end recieve;

rem:procedure interrupt 2;
    declare k byte;
    disable;
 /*  if data2=0e2h then goto int0end; */
    k=16;
loop1:
    call time(2);
    do while p33=0;
    end;
    th0=0;
    tl0=0;
    tr0=1;
    call time(2);
    do while p33=1;
    end;
    tr0=0;
    ah=th0;
    al=tl0;
    if ah>=4 then cy=1;  /* 11.0592Mhz */
    else cy=0;
    data1=scl(data1,1);
    k=k-1;
    if k=8 then data2=data1;
    if k<>0 then goto loop1;
 if data2=0e2h then
    do;
   IF DATA1=54H THEN do;KEY=01;dat=0;end; /* YTNUMBER DEC KEY */
   IF DATA1=44H THEN do;KEY=02;dat=0;end; /* YTNUMBER ADD KEY */
     
      IF DATA1=00H THEN DAT=1;
      IF DATA1=10H THEN DAT=2;
      IF DATA1=08H THEN DAT=3;
      IF DATA1=18H THEN DAT=4;
      IF DATA1=04H THEN DAT=5;
      IF DATA1=14H THEN DAT=6;
      IF DATA1=0CH THEN DAT=7;
      IF DATA1=1CH THEN DAT=8;
      IF DATA1=80H THEN DAT=9;
      IF DATA1=90H THEN DAT=10;
      IF DATA1=88H THEN DAT=11;
      IF DATA1=98H THEN DAT=12;
      IF DATA1=50H THEN DAT=13;
      IF DATA1=48H THEN DAT=14;
      IF DATA1=40H THEN DAT=15;
      IF DATA1=4CH THEN DAT=16;
      IF DATA1=5CH THEN DAT=17;
      IF DATA1=0D8H THEN DAT=18;
      IF DATA1=0D0H THEN DAT=19;
      IF DATA1=0E8H THEN DAT=20;
      IF DATA1=0F8H THEN DAT=21;
      IF DATA1=0E4H THEN DAT=22;
      IF DATA1=0F4H THEN DAT=23;
      IF DATA1=0ECH THEN DAT=24;
/*            P34=0;CALL TIME(250);P34=1;  */
    end;
int0end:   
  ip=0;
  DO K=0 TO 3;  /* important value  */
     CALL TIME(250);
  END;
  enable;                                
end rem;

main$program:
data1=0;data2=0;dat=0;
p32=0;   /*  set recieve mode  */
clk=1;Ale=1;
p33=1;NUMBER=1;KEY=0;
scon=50h;
pcon=00h;
tmod=21h;
tl1=0fdh;       /* 9600 baud rate for 11.0592Mhz */
th1=0fdh;
th0=0;
tl0=0;
tr1=1;
es=1;
ex1=1;
bjihao=1;
enable;
call DISPLAY(NUMBER);

DO WHILE 1=1;
 IF KEY=01 OR KEY=02 THEN
 DO;
   CALL YTNUMBER(KEY);            
 END;

end start;

 
阅读:
录入:JETTA

推荐 】 【 打印
本文评论
      全部评论
发表评论


点评: 字数
姓名:
站长推荐