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

📄 remote_drv.c

📁 8051实现的MP3播放程序,大家可以一起学习.
💻 C
字号:
//REMOTE_DRIVE


#include "config.h"                         /* lib configuration header */
#include "remote_drv.h"
#include "lib_mcu\timer\timer_drv.h"        /* timer driver definition */
#include "lib_mcu\lcd\lcd_drv.h" 

uchar bbp;
uchar ri;
uchar rmt,rmtend;
unsigned long tempchar;           /*用于存放接收到的遥控信号*/


void   remote_disable(void)    
{
 EX1 = 0;
 }

void   remote_enable(void)     
{
 rmtend = 0xff; 
 EX1 = 1; 
}

void t1_remote_init(void)
{
 T1_init(0,0,0x10);    //T1工作于方式1,16BIT计数器
 T1_start();           //开计数器1,用于判断遥控脉冲周期
 IT1 = 1;              //外部中断INT1管脚电平下降沿触发中断
 EX1 = 1;              //外部中断1允许
}



/**********************************************************
*函数名称:键盘和遥控值识别函数                            *
*用途:获取并返回键值                                      *
***********************************************************/
uchar Remote_Cmd(void)
{
 uchar value;
 value=0xff;
 if(rmtend!=0xff)//如果遥控接收值不为0xff,则将接收到的值判断变换后赋给value
    {  
     switch(rmtend)
        {
		 case 0x90: value=0;break;  
         case 0x00: value=1;break;
         case 0x10: value=2;break;
         case 0x08: value=3;break;
         case 0x18: value=4;break;
         case 0x04: value=5;break;
         case 0x14: value=6;break;
         case 0x0c: value=7;break;
         case 0x1c: value=8;break;
         case 0x80: value=9;break;
         case 0x50: value=10;break;
         case 0x48: value=11;break;
         case 0x4c: value=12;break;
         case 0x40: value=13;break;
         case 0x44: value=14;break;
         case 0x54: value=15;break;
		 case 0xd8: value=16;break;
		 case 0xcc: value=17;break;
		 case 0xdc: value=18;break;
         case 0x88: value=19;break;
         case 0xe8: value=20;break;
         case 0xec: value=21;break;
         default :value=255;break;
         }
         bbp=0;
         ri=0;
		 return(value); 
     }
 return (0xff);
 } 



Interrupt(remote_int (void), IRQ_INT1)
{
  uchar bb,i;
  uint timetemp;
//  uchar a,b,c,d,e;
  EX1 = 0;   //关中断
  T1_stop(); //关定时器

  timetemp = TH1*256 + TL1; //取定时器值

  TH1 = 0x00;
  TL1 = 0x00;
  T1_start(); //开定时器  

 /* a = timetemp/10000;
  b = (timetemp%10000)/1000;
  c = (timetemp%1000)/100;
  d = (timetemp%100)/10;
  e = timetemp%10;

           ReadBusy();
		   putcomm(0x82);
		   ReadBusy();
           putchar(0x30+a);
           ReadBusy();
           putchar(0x30+b);
           ReadBusy();  

		   putcomm(0x83);
		   ReadBusy();
           putchar(0x30+c);
           ReadBusy();
           putchar(0x30+d);
           ReadBusy();  

		   putcomm(0x84);
		   ReadBusy();
           putchar(0x30+e);
           ReadBusy();		         
*/

  if((timetemp > 2000)&&(timetemp < 3200))
     bb = 1;
  else if((timetemp > 1000)&&(timetemp < 1600))
     bb = 0;
  else bb = 10;   //判断出得到的位是1还是0

  if(bb <= 1)
 		{
		 tempchar += bb;
     	 bbp ++;
		  if(bbp < 32) tempchar <<= 1;//未收满4字节
		  else {ri = 1; bbp = 0;}
		 }

   if(ri == 1)//收满4个字节的数据后,进行字节内容判断
         {
		  ri = 0;
		  for(i = 0; i < 16; i++)
		     {
			  if((tempchar & 0xff000000) == 0xe2000000)
			    {
				 rmt = tempchar >> 16; 
				 rmtend = rmt;
		         tempchar = 0;
			     break;
				}
			  else
		        tempchar <<= 1;
			 }        	 
  		  }
  else rmt = 0xff;

  EX1 = 1;    
 }

⌨️ 快捷键说明

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