⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lst

📁 遥控代码,一种多用途的,用C51实现可以安装四十多种功能码
💻 LST
📖 第 1 页 / 共 5 页
字号:
  46          {
  47   1              
C51 COMPILER V7.00  MAIN                                                                   08/06/2007 11:45:43 PAGE 15  

  48   1      }
  49          
  50          //--------------------------------------
  51          // Timer 2 interrupt 
  52          //--------------------------------------
  53          void TIMER2_ISR (void) interrupt 5
  54          {
  55   1              TF2=0;
  56   1              CACON=CACON_VALUE;
  57   1      }
  58          
  59          //--------------------------------------
  60          // Serial port 1 interrupt 
  61          //--------------------------------------
  62          void UART1_ISR (void) interrupt 7
  63          {
  64   1              
  65   1      }
  66          
  67          //******************************************
  68          //*** DELAY ROUTINE ***
  69          //******************************************
  70          
  71          void INIT_BEFORE_SCAN (void)
  72          {
  73   1      /*
  74   1      TMOD=0X11;//TIMER0 init 16BIT timer,TIMER1 init 16BIT timer
  75   1      TCON=0X00;
  76   1      TL0=0;
  77   1      TH0=0;
  78   1      */
  79   1      
  80   1      T2CON=0X00;//timer2 init
  81   1      T2MOD=0X00;                                                                                                                                             
  82   1      PCCONH = 0X3F;                  //required for DC6688FSA
  83   1      
  84   1      PBCONH=0X55;//01010101 PB7-4 open drain out
  85   1      PBCONL=0X55;//01010101 PB3-0 open drain out
  86   1      PBPUR =0;   //PULL-UP DISABLE
  87   1      last_pc=0XFF;
  88   1      PORTB    =0XFF;//init PORTB to high
  89   1      
  90   1      //pull up in 1
  91   1      PACONH=0;//PA7-4 IN int falling edge
  92   1      PACONL=0;//PA3-0 IN int falling edge
  93   1      PAPUR =0XFF;//PULL-UP ENABLE
  94   1      
  95   1      CACON =0X03;//carrier fosc/1 start counter A, repeating mode, flip-flop high lvl
  96   1      PCCONL=0XAB;//10101011 PC1 = push pull output  REM Port Normal I/O Carrier on
  97   1      PORTC=PORTC&0XBB;//PC2 to low , ,turn off all light
  98   1      PORTC=PORTC|0X01;//PC0 TO HIGH.
  99   1      ET2   =0;
 100   1      IT0=0;//falling edge trigger
 101   1      
 102   1      EA=1;//enable cpu interrupt
 103   1      
 104   1      //set=0;//总是从TV开始
 105   1      //last_led_value=0x7f;
 106   1      get_set();
 107   1      get_flash_data();
 108   1      
 109   1      //time0_value.tempval=0;
C51 COMPILER V7.00  MAIN                                                                   08/06/2007 11:45:43 PAGE 16  

 110   1      //time0_over=0;
 111   1      //low.tempval=0;
 112   1      //low_over=0;
 113   1      type=0;
 114   1                                                                                                              //KEYSCAN_ENABLE=0;//??????????
 115   1                                                                                                              //EXTEND_TIME   =0;//????????????
 116   1      toggle=0;
 117   1      
 118   1      end_flag=0;
 119   1      //last_led_value=0x7f;//1011 1111
 120   1      last_pb=0x7f;
 121   1      //stuck_key=255;
 122   1      }
 123          
 124                  
 125          
 126          void CHECK_ACCESS_COMPLETE(void)
 127          {
 128   1              while((FAS & 0x01) == 1);       // FBUSY bit 
 129   1      }
 130          
 131          void _WR_(void)
 132          {
 133   1              CHECK_ACCESS_COMPLETE();//test busy bit wait for complete
 134   1              FPTRL = (unsigned char)DATA_FLASH_PTR;//address
 135   1              FPTRH = (unsigned char)(DATA_FLASH_PTR>>8);
 136   1              FDB = FLASH_BUFFER;//a byte
 137   1              FCNT = 1;//start to execute
 138   1              CHECK_ACCESS_COMPLETE();//test busy bit wait for complete
 139   1      }
 140          void _RD_(void)
 141          {
 142   1              CHECK_ACCESS_COMPLETE();
 143   1              FPTRL = (unsigned char)DATA_FLASH_PTR;
 144   1              FPTRH = (unsigned char)(DATA_FLASH_PTR>>8);
 145   1              FLASH_BUFFER = FDB;
 146   1              CHECK_ACCESS_COMPLETE();
 147   1      }
 148          
 149          
 150          
 151          void SRAM_TO_FLASH(char adress,char value)
 152          {
 153   1              DATA_FLASH_PTR=adress;
 154   1              FLASH_BUFFER = value;
 155   1              _WR_();
 156   1      
 157   1      }
 158          
 159          char FLASH_TO_SRAM(char adress)
 160          {
 161   1              DATA_FLASH_PTR=adress;
 162   1              _RD_();
 163   1              return(FLASH_BUFFER);
 164   1      
 165   1      }
 166          void get_flash_data(void)
 167          {
 168   1              
 169   1      
 170   1              flash_flag=FLASH_TO_SRAM(8);
 171   1              if(flash_flag!=0x90)//如果是第一次则向FLASH写入出厂初值
C51 COMPILER V7.00  MAIN                                                                   08/06/2007 11:45:43 PAGE 17  

 172   1              {
 173   2                                              
 174   2                      memory_channel[0]=7;
 175   2                      memory_channel[1]=11;
 176   2                      memory_channel[2]=21;
 177   2                      memory_channel[3]=23;
 178   2                      
 179   2      
 180   2                      for(m=0;m<4;m++)//高地址为高位,低地址为低位。
 181   2                      {
 182   3                              temp_data_flash=(unsigned char)memory_channel[m];                                       
 183   3                              SRAM_TO_FLASH(2*m,temp_data_flash);
 184   3                      
 185   3                              temp_data_flash=(unsigned char)(memory_channel[m]>>8);                                  
 186   3                              SRAM_TO_FLASH(2*m+1,temp_data_flash);
 187   3                      }
 188   2              }
 189   1              for(m=0;m<4;m++)//从FLASH中得到四套当前套值
 190   1              {
 191   2                      temp_data_flash=FLASH_TO_SRAM(2*m+1);
 192   2                      memory_channel[m]=temp_data_flash;
 193   2              
 194   2                      temp_data_flash=FLASH_TO_SRAM(2*m);
 195   2                      memory_channel[m]=(memory_channel[m]<<8)+temp_data_flash;
 196   2              }
 197   1      }
 198          void get_last_led_value(void)
 199          {
 200   1              if(set==0)
 201   1              {
 202   2                      last_led_value=0x7f;    
 203   2              }
 204   1              else if(set==1)
 205   1              {
 206   2                      last_led_value=0xbf;    
 207   2              }
 208   1              else if(set==2)
 209   1              {
 210   2                      last_led_value=0xdf;    
 211   2              }
 212   1              else if(set==3)
 213   1              {
 214   2                      last_led_value=0xef;    
 215   2              }
 216   1      
 217   1      }
 218          void get_set(void)
 219          {
 220   1              flash_flag=FLASH_TO_SRAM(11);
 221   1              if(flash_flag!=0x90)//如果是第一次出厂赋初值
 222   1              {
 223   2                      set=0;  
 224   2              }
 225   1              else
 226   1              {
 227   2                      set=FLASH_TO_SRAM(10);
 228   2              }
 229   1      
 230   1              get_last_led_value();
 231   1              
 232   1      
 233   1      }
C51 COMPILER V7.00  MAIN                                                                   08/06/2007 11:45:43 PAGE 18  

 234          /*
 235          void init_timer0(void)
 236          {
 237                  TL0=0;
 238                  TH0=0;
 239                  TF0=0;  
 240          }
 241          */
 242          //################基本电平#############################//
 243          
 244          void sent_uint_rc5_hi(void)
 245          {
 246   1              RCAP2L=0xff-0x78;
 247   1              RCAP2H=0xff-0x03;       
 248   1              CACON_VALUE=0x07;//00000111
 249   1              PCON=PCON|0X01;//bit 0 -> IDLE mode, assumed only waiting timer 2 interrupt     
 250   1      }
 251          void sent_uint_rc5_low(void)
 252          {
 253   1              RCAP2L=0xff-0x78;
 254   1              RCAP2H=0xff-0x03;
 255   1              CACON_VALUE=0x03;//00000011
 256   1              PCON=PCON|0X01;
 257   1      
 258   1      }
 259          void sent_uint_rc6_hi(void)
 260          {
 261   1              RCAP2L=0xff-0xbc;
 262   1              RCAP2H=0xff-0x01;       
 263   1              CACON_VALUE=0x07;//00000111
 264   1              PCON=PCON|0X01;//bit 0 -> IDLE mode, assumed only waiting timer 2 interrupt
 265   1              
 266   1      }
 267          void sent_uint_rc6_low(void)
 268          {
 269   1              RCAP2L=0xff-0xbc;
 270   1              RCAP2H=0xff-0x01;
 271   1              CACON_VALUE=0x03;//00000011
 272   1              PCON=PCON|0X01;
 273   1      
 274   1      }
 275          //########################################################//
 276          
 277          
 278          
 279          //################基本位电平#####################//
 280          void sent_unit_rc5_hi_low(void)//n:type  i:lead,0,1,or endcode
 281          {
 282   1      
 283   1              sent_uint_rc5_hi();
 284   1      
 285   1              sent_uint_rc5_low();
 286   1      }
 287          
 288          void sent_unit_rc5_low_hi(void)
 289          {
 290   1              sent_uint_rc5_low();
 291   1      
 292   1              sent_uint_rc5_hi();
 293   1      
 294   1      }
 295          void sent_unit_rc6_hi_low(void)//n:type  i:lead,0,1,or endcode
C51 COMPILER V7.00  MAIN                                                                   08/06/2007 11:45:43 PAGE 19  

 296          {
 297   1      
 298   1              sent_uint_rc6_hi();
 299   1      
 300   1              sent_uint_rc6_low();
 301   1      }
 302          
 303          void sent_unit_rc6_low_hi(void)
 304          {
 305   1              sent_uint_rc6_low();
 306   1      
 307   1              sent_uint_rc6_hi();
 308   1      
 309   1      }
 310          //###############################################//
 311          
 312          //###################基本字节电平###################//
 313          
 314          void sent_n_bit_0_hl_1_lh(char n,char temp)//rc5码   0电平为高低,1电平为低高
 315          {
 316   1              unsigned char                    idata                  reverse;
 317   1              unsigned char                    idata                  m;      
 318   1              if(n==8)
 319   1              {
 320   2              reverse=2;
 321   2              }
 322   1              else 
 323   1              {
 324   2              reverse=10;
 325   2              }
 326   1              for(m=0;m<n;m++)
 327   1              {
 328   2                      
 329   2                      if(m==reverse)          
 330   2                      {
 331   3                              if(toggle==0)
 332   3                              {
 333   4                                      sent_unit_rc5_hi_low();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -