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

📄 pt2262.txt

📁 无线pt2262
💻 TXT
字号:
#include <reg51.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit led=P0^7;
sbit Plus_out = P2^0 ;  //脉冲输出

unsigned int Per = 36 ,s_xian=4319;
bit dd=1,b_anjian=1,b_stop=0 , b_jia=0 , b_jian=0 , b_fas=0 ,b_a=0 ,b_b=0 ,b_c=0 ,b_d=0;
unsigned char decode[12]={1,2,2,2,0,2,2,2,1,1,1,1};
unsigned char init_timer[5][2]={{211,40},{250,96},{251,200},{254,152},{254,184}} ;//存放各种定时器初值
unsigned char rx_decode[24]={0} ,aaa=0,bbb=1;


void delayms(unsigned char ms);     // 1ms延时程序
void INT_0( void )  ;                // 外部中断0服务程序
//unsigned int  measure ( void );    //测量一次正脉冲宽度
void Timer0_IN(void)  ;
void Timer1_IN(void)  ;
void send()
{
        int i,j;
         TMOD = 0x11 ;  //T1、T0定时方式1,定时器,GATE置0
	 ET0 = 1 ;
	 ET1 = 1 ;     //开定时
	 PT1 = 1 ;    //T1定时中断优先级高
          // 外部中断设置
         EA = 1  ;    //开总中断
         Plus_out = 0 ; //
            for( i = 0 ; i <12 ; i++ )			  //转换编码高:11 , 低:00 , 高阻:01;
	      {
	         if( decode[i] == 1 )
		  {  rx_decode[2*i] = 1;
		     rx_decode[2*i+1] = 1 ;
		   }
		else if( decode[i] == 2 )
		   {
		     rx_decode[2*i] = 0;
		     rx_decode[2*i+1] = 1 ;
	           }
		 else
		    {
	              rx_decode[2*i] = 0;
		     rx_decode[2*i+1] = 0 ;
		     }
	       }
	for( j = 0 ; j<4 ; j++)
         {
          TH1 = init_timer[0][0] ;
	  TL1 = init_timer[0][1] ;   //启始码的周期为128a;同步码
	  TH0 = init_timer[4][0]	;
          TL0 = init_timer[4][1]	;  //同步码的正脉冲宽度,4a。
	  TR0 = 1 ;
	  TR1 = 1 ;      //启动定时器
          F0 =  1 ;     //标志置位
           Plus_out = 1 ; //
	   for( i = 0 ; i < 25 ; i++ )
	   {
	     while( F0 == 1 )	 ; 	   //等待TO中断,正脉宽
                if ( i != 24 )
		 {
	          if( rx_decode[i] == 1 )
	             {
		      TH0 = init_timer[2][0]	;
                      TL0 = init_timer[2][1]	;  //同步码的正脉冲宽度,12a。
		     }
	           else
	              {
		       TH0 = init_timer[3][0]	;
                       TL0 = init_timer[3][1]	;  //同步码的正脉冲宽度,4a。
		      }
                while ( F0 == 0 )  ;   //等待T1中断
                  }
               else
	        while ( F0 == 0 )  ;   //等待T1中断
	     }
	 }
	   TR0 = 0 ;
	   TR1 = 0 ;
           Plus_out = 0 ;
     }
void main ( void )
{
   unsigned int max=0 , min=0 , a3=0 , a5=0, a11=0 ,a13=0  ;
   unsigned char  temp=0xff  ;
   led=0;

   Plus_out = 0 ;
    // 定时器设置
   TMOD = 0x09 ;  //T0定时方式1,内定时器,GATE置1
    // 外部中断设置
   IT0 = 1;     //外部中断为后沿负跳有效
   EX0 = 1 ;     //开外部中断
     while(1)
     {
     if(b_stop==0)
     {
       if(s_xian==0)
         s_xian=6561;
     //  s_xian--;
       decode[7]=s_xian%3;
       decode[6]=s_xian/3%3;
       decode[5]=s_xian/3/3%3;
       decode[4]=s_xian/3/3/3%3;
       decode[3]=s_xian/3/3/3/3%3;
       decode[2]=s_xian/3/3/3/3/3%3;
       decode[1]=s_xian/3/3/3/3/3/3%3;
       decode[0]=s_xian/3/3/3/3/3/3/3%3;
       led=0;
       send();
       led=1;
     }
   else
      {
      led=1;
      temp=P1&0xff;
      if(temp!=0xff && b_anjian==1)
       {
        delayms(10);
        temp=P1&0xff;
         if(temp!=0xff && b_anjian==1)
         {
          b_anjian=0;
          switch ( temp )
          {
           case  0xfe :
       s_xian++;led=0;
       decode[7]=s_xian%3;
       decode[6]=s_xian/3%3;
       decode[5]=s_xian/3/3%3;
       decode[4]=s_xian/3/3/3%3;
       decode[3]=s_xian/3/3/3/3%3;
       decode[2]=s_xian/3/3/3/3/3%3;
       decode[1]=s_xian/3/3/3/3/3/3%3;
       decode[0]=s_xian/3/3/3/3/3/3/3%3;
       break;
           case  0xfd :
       s_xian--;led=0;
       decode[7]=s_xian%3;
       decode[6]=s_xian/3%3;
       decode[5]=s_xian/3/3%3;
       decode[4]=s_xian/3/3/3%3;
       decode[3]=s_xian/3/3/3/3%3;
       decode[2]=s_xian/3/3/3/3/3%3;
       decode[1]=s_xian/3/3/3/3/3/3%3;
       decode[0]=s_xian/3/3/3/3/3/3/3%3;
         break;
           case  0xfb :
             led=0;send();led=0;  break;
           case  0xef :
             decode[8]=0;decode[9]=0;decode[10]=0;decode[11]=1;led=0;send();break;
           case  0xdf :
            if( temp == 0xdf )
             decode[8]=0;decode[9]=0;decode[10]=1;decode[11]=0;led=0;send();break;
           case  0xbf :
             decode[8]=0;decode[9]=1;decode[10]=0;decode[11]=0;led=0;send();break;
           case  0x7f :
             decode[8]=1;decode[9]=0;decode[10]=0;decode[11]=0;led=0;send();break;
          }
         }
       }
      temp=P1&0xff;
       if(temp==0xff)
        { b_anjian=1;led=1;}
      }

  }
}

void INT_0(void) interrupt 0 using  1
{
  b_stop=~b_stop;
 // b_anjian=~b_anjian;

 }
void Timer0_IN(void) interrupt 1 using 2		//产生正脉冲宽度
 {
   Plus_out =0 ;
   TR0 = 0 ;
   F0 = 0  ;               //标志符

  }
void Timer1_IN(void) interrupt 3 using 3	  //产生脉冲周期
 {
        F0 =1 ;                           //置1
        Plus_out =1 ;
        TR0 = 1     ; 					//启动定时T0
      	TH1 = init_timer[1][0] ;
      	TL1 = init_timer[1][1] ;
  }
void delayms(unsigned char ms)// 延时子程序
{
	unsigned char i1;
	while(ms--)
	{
		for(i1 = 0; i1 < 120; i1++);
	}
}

⌨️ 快捷键说明

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