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

📄 51接收.c

📁 本程序是38kHz的红外线发射接收程序。发射部分为AVR单片机
💻 C
字号:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
code uchar display[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void led_display();
data uchar time[4]={0,0,0,0};
uint F_data;
sbit IRDA=P3^2;
uchar R_Byte;
unsigned char 	mode;	    
unsigned char 	DataTemp;
unsigned char 	DataCnt;
unsigned char 	EndFlag;


void  StartRecive (void)
{
 	EX0=1;
	IT0=1;
	TMOD=0x01;
    DataCnt = 0;
	EndFlag = 0;
	DataTemp = 0;  
	mode = 0;
}

main()
{
   unsigned  char	temp1,temp2,count;
	StartRecive();
	EA=1;						 	
	//TH0=0x00;
	//TL0=0x00;
  	DataTemp = 1;
	while(1)
	{
		 if(EndFlag == 1)	{
		 temp1 = DataTemp&0x0f;
		 temp2 = DataTemp&0xf0;
		 temp2 >>= 4;
		 if(temp2 == temp1){
			count = DataTemp&0x0f;
		 }
	 	StartRecive();
	}  
	time[0]=count/1000;
	time[1]=count%1000/100;
	time[2]=count%1000%100/10;
	time[3]=count%1000%100%10;
	led_display();
 	}	
}

void extarn0(void)interrupt 0 using 1
{
	uint Data,F_data;
    TR0=1;
   	EX0=0;
 	while(!IRDA);
 	TR0=0;
 	Data=TH0;
 	F_data=(Data<<8)|TL0;
 	TH0=0;
 	TL0=0;
	switch(mode) {	
		case  0:  if((F_data>1700)&&(F_data<2300) ){
				     mode++; 
		           }
				   EX0=1;   
				   break;
		 case  1:  
		            if((F_data>800)&&(F_data<1200) ){
		 			  DataTemp |= (0x01<<DataCnt);
		 		    }
				   if((F_data>300)&&(F_data<600) ){
		 			  DataTemp &= ~(0x01<<DataCnt);
		 		    }
				    DataCnt++;				
				   	EX0=1;
					if(DataCnt == 8) {
					   EX0=0;
					   IE0 = 0;
					   EndFlag = 1;   
					}
					break;
		}
}

void delay(uchar j)
{	uchar i;
	while(j--)
	{
		for(i=0;i<125;i++)
		{;}
	}
}
void led_display()
{
	uchar i,j,k;
    uchar *p,*q;
	p=&time[0];	
	q=display;	
	k=0x20;
		for(i=0;i<4;i++)
		{
		  	j=*(p+i);
			P0=*(q+j);
			P2=k;
			k>>=1;
			delay(1);
		}
}

⌨️ 快捷键说明

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