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

📄 fj4.asm

📁 接收遥控器
💻 ASM
📖 第 1 页 / 共 2 页
字号:
//**********************************************************************
//    hjzf_cpu.asm     fja.asm   2003.12.08--2004.12.15
//**********************************************************************

#include <reg51.h>
//#include <absacc.h>

#define Uchar unsigned char
#define Uint unsigned int

#define Temp_V1 10
#define Temp_V2 100
#define Temp_V3 900

Uchar code led[]={0x11,0xd7,0x32,0x92,0xd4,0x98,0x18,0xd3,0x10,0xd0,0xff,0x7c,0xef};
Uchar code fun_select[]={0x06,0x05,0x03,0x00};

Uchar led_bit,display_bz;
Uchar lednum_a,lednum_b,lednum_c;
Uchar lednum_max;
Uchar vol_val;
unsigned int delay_a;
unsigned int delay_c;
Uchar delay_b;

Uchar fun_code,question;
Uchar bdata  led_state;
Uchar bdata  qt1_state;
Uchar bdata  qt2_state;
Uchar bdata  qt3_state;

Uchar fun0_2, fun0_3;
Uchar fun2_1, fun2_2, fun2_3;
Uchar fun3_2, fun3_3;
Uint scan_key_d;
Uchar time_b;
Uint time_a;

Uchar temp_da3,temp_da4,temp_da5,temp_da6;	
Uchar addr;
Uchar fjjs_da3,fjjs_da4,fjjs_da5,fjjs_da6;
Uchar fjfs_da2,fjfs_da3;
//Uchar txd_temp2,txd_temp3;
Uchar old_da3,old_da4,old_da5,old_da6;
Uchar workled_onoff;
Uchar ScanMaxTime;

sbit sy_b=led_state^0;
sbit su_b=led_state^1;
sbit te_b=led_state^2;
sbit w_busy=led_state^7;
sbit w_use=led_state^6;
sbit display_a=led_state^3;
sbit display_b=led_state^4;
sbit display_c=led_state^5;

sbit ok_sta1=qt1_state^0;
sbit cancel_sta1=qt1_state^1;
sbit key_time=qt1_state^2;
sbit gb_led=qt1_state^3;
sbit force_bit=qt1_state^4;
sbit sound_=qt1_state^5;
sbit gb_ask=qt1_state^6;
sbit no_sio_da=qt1_state^7;

sbit sio_normal=qt2_state^0;
sbit led_normal=qt2_state^1;
sbit ok0_push=qt2_state^2;
sbit ok1_push=qt2_state^3;
sbit ok2_push=qt2_state^4;
sbit ok3_push=qt2_state^5;
sbit bit_temp=qt2_state^6;
sbit vol_adj=qt2_state^7;

sbit talking=qt3_state^0;

sbit   beep_b=P2^0;
sbit   work_led=P3^2;
sbit   P2_7=P2^7;
sbit   P2_6=P2^6;
sbit   P2_5=P2^5;
sbit   P2_4=P2^4;
sbit   P2_3=P2^3;
sbit   P2_2=P2^2;
sbit   P1_3=P1^4;

void timer0();
void led_display();
void vol_display();
void scan_key();
void scan_sio();
void sio_ri();
void key_k1();
void key_k2();
void key_k3();
void key_k4();
void key_k5();
void key_k6();
void data_cl(); 
void gbsq_led();
       
void main()
{
    P1=0;					
    P2=0xff;
    P0=0xff;
    beep_b=0;
    delay_b=0;
    IE=0;
    key_time=0;
    time_a=Temp_V1;
    display_bz=1;
    lednum_a=0x0a;
    lednum_b=0;
    lednum_c=0;
    led_state=0xfe;
    fjfs_da2=0x10;
    fjfs_da3=0x00;
    old_da4=0x0f;
    old_da5=0x0f;
    fun0_2=0;
    fun0_3=0;    
    fun2_1=0;
    fun2_2=0;    
    fun2_3=0;
    fun3_2=0;    
    fun3_3=0;
    ok_sta1=0;
    sio_normal=1;
    led_normal=0;
    gb_led=0;
    force_bit=0;
    question=0;
    delay_a=0;
    delay_c=0;
    P1=0xff;
    addr=P1;
    addr&=0x0f;
    TMOD=0x21;
    TH0=0;
    TL0=0;
    TR0=1;
    ET0=1;
    TH1=0xfa;
    TL1=0xfa;
    SCON=0xf0;
    PCON=0;
    ET1=0;
    ES=0;
    TR1=1;
    RI=0;
    TI=0;
    EA=1;
    SM2=1;
    beep_b=0;
    sound_=0;
    TB8=1;
    key_time=0;
    scan_key_d=0;
	time_b=0;
	talking=0;
	P2_7=0;	P2_6=0;	P2_5=1;
	P2_4=1;	P2_3=1;	P2_2=1;
//    vol_adj=1;
	do
	{	
//       delay_a=0;
//       led_normal=0;

      if (gb_ask)        
          gbsq_led();
           
       if (display_bz==1)
       {
       	  if (vol_adj)
       	    vol_display(); 
       	  else        	
          	led_display();
        }
          
       if (key_time)          
        {
       	    scan_key();
   	    }   

       scan_sio();
       if ((delay_c++)>=3000)
       {
          delay_c=0;
   	      P1_3=1;
   	   }
       
    }while (1);

}

void gbsq_led()
{
    
  if (time_b>0x60)
   {
    	time_b=0;
    	gb_led=~gb_led;
    }
  
  if (gb_led)
      led_state=led_state&0xf8|fun_select[fun_code];	
  else
      led_state=led_state&0xf8|0x7;

}

void timer0() interrupt 1    //using 1
{
	led_normal |=((delay_a++)>=2000);
	key_time |=((scan_key_d++)>time_a);
    workled_onoff++;
    work_led=workled_onoff^7;
    TH0=0xee;
    display_bz=1; 
    switch (led_bit)
    {  
        case 0:
        	led_bit=1;
        	break;
        case 1:
           	led_bit=2;
            break;              	
        case 2:
          	led_bit=0;
            break;
     }
}

void vol_display()
{
	display_bz=0;
      	switch (led_bit)
		{
	   case 0:	
         P0=0xff, P2_6=0;  P2_6=1; P2_6=0;
	 	 display_a=0;
	     goto dis_v_com;
       case 1:
         P0=0xff;
//         P0=led[(vol_val+1)/10];
         P2_6=0;  P2_6=1; P2_6=0;
		 display_b=0;
	     goto dis_v_com;
   	   case 2:
         P0=led[(vol_val+1)%10];
         P2_6=0;  P2_6=1; P2_6=0;  	     
	 	 display_c=0;

       dis_v_com:
       P0=led_state; P2_7=0;  P2_7=1; P2_7=0;
	   led_state|=0x38;
        }
}     

void led_display()
{
    display_bz=0;
	
    if (gb_ask)
       time_b++;
//	led_normal=0;

    if (led_normal)
    {
   	    cancel_sta1=0;
   	    beep_b=0;
        sound_=0;
	    question=0;
	    ok_sta1=0;
	    
    	switch (led_bit) 
		{
		   case 0:	
//	         wr_led=0xfe;
             P0=0xfe; P2_6=0;  P2_6=1; P2_6=0;
		 	 display_a=0;
		     goto dis_coma;
	       case 1:
//	  	     wr_led=led[(addr+1)/10];     //0x7c;
             P0=led[(addr+1)/10]; P2_6=0;  P2_6=1; P2_6=0;	  	     
			 display_b=0;
		     goto dis_coma;
    	   case 2:
//	  	     wr_led=led[(addr+1)%10];
             P0=led[(addr+1)%10]; P2_6=0;  P2_6=1; P2_6=0;	  	     
		 	 display_c=0;
	       dis_coma:
//    	     wr_bit=led_state;
             P0=led_state; P2_7=0;  P2_7=1; P2_7=0;	   
	         led_state|=0x38;
         }     
	}
    else
    {
    	switch (led_bit)
		{
		   case 0:	
//	         wr_led=led[lednum_a];
             P0=led[lednum_a]; P2_6=0;  P2_6=1; P2_6=0;	         
		 	 display_a=0;
		     goto dis_comb;
	       case 1:
//	  	     wr_led=led[lednum_b];
             P0=led[lednum_b]; P2_6=0;  P2_6=1; P2_6=0;
			 display_b=0;
		     goto dis_comb;
    	   case 2:
//	  	     wr_led=led[lednum_c];
             P0=led[lednum_c]; P2_6=0;  P2_6=1; P2_6=0;
		 	 display_c=0;
	       dis_comb:
//    	     wr_bit=led_state;
             P0=led_state; P2_7=0;  P2_7=1; P2_7=0;	   
	         led_state|=0x38;
         }     
     }
}

void scan_key()
{
	unsigned int temp;
	unsigned char key_code;

	if (sound_)
	  {
	  	 if (((delay_b++)<20) & (!talking)) 
	   	   beep_b=~beep_b;
	     else
           {
           	beep_b=0;  sound_=0;  delay_b=0;
           	talking=1;
           }
       }    
    scan_key_d=0;
    key_time=0;
    time_a=Temp_V1;
    P0=0xff;
    P2_5=0;   key_code=P0;   P2_5=1;
    if (!(key_code==0xff))
    {
       temp=2000;
       while (temp--)
       {
 		  if (display_bz==1)
 		  {
			  if (vol_adj)
        	     vol_display(); 		  	
 		      else 
	             led_display();
		   }	             
   	   }
	    P2_5=0;  key_code=P0;  P2_5=1;

	   if (!(key_code==0xff))
	   {
           beep_b=1;
	   	   switch(key_code)
	   	   {
	   	   	   case 247 :
		 		  if(!ok_sta1) 	key_k1();
	              time_a=Temp_V2;	   	   	   	   	          	
	   	   	      goto skey_com;
	   	   	   case 239 :
		 		  if(!ok_sta1)  key_k2();
	              time_a=Temp_V2;	   	   	   	   	   	          
		   	   	  goto skey_com;
	   	   	   case 223 :
	   	   	      if (vol_adj)
	   	   	      	{
	   	   	      		vol_val=(vol_val+1)&0x07;
	   	   	      		P2_4=(~vol_val)&0x01;
	   	   	      		P2_3=((~vol_val)>>1)&0x01;
	   	   	      		P2_2=((~vol_val)>>2)&0x01;
   	   	      		}

		 		  if(!ok_sta1)  key_k3();
	              time_a=Temp_V2;
		   	   	  goto skey_com;
	   	   	   case 191 :
	   	   	      if (vol_adj)
	   	   	      	{
	   	   	      		vol_val=(vol_val-1)&0x07;
	   	   	      		P2_4=(~vol_val)&0x01;
	   	   	      		P2_3=((~vol_val)>>1)&0x01;
	   	   	      		P2_2=((~vol_val)>>2)&0x01;
   	   	      		}

		 		  if(!ok_sta1)  key_k4();
	              time_a=Temp_V2;
	   	   	      goto skey_com;
	   	   	   case 127 :
		   	   	      if (ok_sta1) time_a=Temp_V3;
		   	   	      else	 time_a=Temp_V2;
                      led_state=led_state&0xf8|fun_select[fun_code];	
	   	   	          gb_ask=0;
  	   	   	   	      key_time=0;
  	   	   	   	      scan_key_d=0;
	   	          	  key_k5();
   	          	      beep_b=0;
   	          	      sound_=0;
	                  delay_b=0;
 	   	              goto skey_com;
	   	   	   case 251 :
                   	  delay_c=0;
                      P1_3=0;
 		 		      if((!ok_sta1)&&w_busy)  key_k6();
	                  time_a=Temp_V3; 		 		      
               skey_com:
	 	            beep_b=0;
           	        if (display_bz==1)
			 	    {
					  if (vol_adj)
	         	          vol_display(); 		  	
   		              else 
	                      led_display();
		             }	   
/*	              
	              if  (cancel_sta1)
	              {
                  		do
                  		 {
           	        		if (display_bz==1)
                        		led_display();
                        		key_code=rd_key;
		                 }while (!(key_code==0xff));
                  }
*/                
   	   	   }
   	   }
     }  	
}

void scan_sio()
{
    if (RI==1)
    {
   	RI=0;
	temp_da4=SBUF;
	if (temp_da4==0xaa)
	{
           temp_da3=0xaa;
           return;
        } 
        if (!(temp_da4==addr) & (temp_da3==0xaa))
           temp_da3=0x0;
       
	else 
        {
           temp_da3=0x0;
           SM2=0;
           TI=0;
           SBUF=addr; 
           while (TI==0);
           TI=0;

           if (vol_adj)
               vol_display();
           else
               led_display();
                                       
            SBUF=fjfs_da2;

⌨️ 快捷键说明

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