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

📄 sc2262.c

📁 实现无线控制功能
💻 C
字号:
#include <iom32v.h> 
#include <macros.h> 
#define wuxian_js    PA3  //无线接收
#define study_key    PC1  //报警
#define zhuangtai_d  PC7  //LED
#define power_led    PC6 
#define   UDRE  5	
#define   DATA_REGISTER_EMPTY        (1<<UDRE)
unsigned char D[3]; 
#define  uchar  unsigned char
uchar UP[7]={0xff,0x01,0x00,0x08,0x00,0x1f,0x28};
uchar DOWN[7]={0xff,0x01,0x00,0x10,0x00,0x1f,0x30};
uchar left[7]={0xff,0x01,0x00,0x04,0x1f,0x00,0x24}; 
uchar right[7]={0xff,0x01,0x00,0x02,0x1f,0x00,0x22};
uchar STOP[7]={0xff,0x01,0x00,0x00,0x00,0x00,0x01};
void uart0_init(void)
{
 UCSRB = 0x00; //disable while setting baud rate
 UCSRA = 0x00;
 UCSRC = BIT(URSEL) | 0x06;
 UBRRL = 0x19; //set baud rate lo
 UBRRH = 0x00; //set baud rate hi
 UCSRB = 0x08;
}    
//发送单字节字符
void  uart_transmit_byte( unsigned char data)
{
 while(!(UCSRA&DATA_REGISTER_EMPTY));
 UDR=data;
}
//发送字符串
void  uart_transmit_string( unsigned char *string)
  {
    unsigned char i,j;
	for(i=0;i<7;i++)
    {  
        j=*string;
        uart_transmit_byte(j);
		string++;
    }

  }
unsigned long decode(void)                 //无线解码 
{ 
     unsigned long DATA;                    //记录数据 
     unsigned char count,i;                 //暂时计数 
          
/*一共接收三字节*/         
     
     DATA=0;                                //   
     for (count=0;count<24;count++)         //开始收集 
          { 
            
/*测量高电平宽度*/         

           i=0;                                 //宽度计数 
           while (PINA&(1<<3))           //高位计数 
            {        
                 asm("nop");           // 
                 i++;                  //计数增加  
                                        
                 if (i>192) goto end;  //限时解码 
                }                                    
                 
/*分辨出电平高低*/                 
        
          DATA*=2;                       //数据左移 
                  
      if (i<64)                             //分辨高低  
           {     
            if (!((56>i)&(i>24))) goto end;     //电平合法                                 
            DATA+=0;                            //记低电平 
           } 
            
          else 
           {      
            if (!((168>i)&(i>72))) goto end;    //电平合法                                 
            DATA+=1;                            //记高电平 
           } 
            
/*测量低电平宽度*/         
    
           while (!(PINA&(1<<3)))               //低位计数 
            {        
                 asm("nop");                 // 
                 i++;                        //计数增加  
                                        
                 if (i>224) goto end;        //限时解码 
                }           
                 
/*低电平是否过窄*/                 
                  
           if (i<96) goto end;                  //对比宽度                                  
      } 
          
/*解码成功返结果*/         
                                       
         return  DATA;                          //成功返回  
          
/*有误码结束解码*/          
          
     end:          
         return 0;                              //误码结束 
}   
  
void main(void) 
{ 
         unsigned long DATA;                    // 
        // unsigned char D[3];             //  
         signed char i;                  //   
     DDRC|=(1<<power_led);PORTC&=~(1<<power_led);  //电源显示灯
     DDRA |=0x40;                      //无线输入通道 
     PORTA|=0x40;               //上拉选择 
         uart0_init(); 
         while (1) 
          { 
           DATA =decode();                      //解码程序 
            
           if (DATA>0)                          // 
            { 
             //spaz();                            //解码成功 
                  
                 for (i=2;i>=0;i--)                 //数据转换 
                  {  
                   D[i]=DATA;                       // 
                   DATA>>=8;                        //  
                  } 
                  
                 //i=0;                               //转换完毕   
                 
	        if(D[2]==0xf0)   //上
			{
			for(i=0;i<7;i++)
               {  
                 uart_transmit_byte(UP[i]);
               }
	        }
			
			else if(D[2]==0x0c)//下
			{
			 for(i=0;i<7;i++)
               {  
                uart_transmit_byte(DOWN[i]);
               }
			}
			
    		else if(D[2]==0xcc)//左
    		{
			    for(i=0;i<7;i++)
               {  
                uart_transmit_byte(left[i]);
               }
    		}
    		else if(D[2]==0x3c)//右
    		{
    		   for(i=0;i<7;i++)
                 {  
                   uart_transmit_byte(right[i]);
                 }
    		}
        } 
    } 
}

⌨️ 快捷键说明

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