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

📄 dec.c

📁 自己写的51接收遥控器解码
💻 C
字号:
#include "reg51.h" 
typedef unsigned char  u8;

sbit P0_0 = P0^0;
sbit P0_1 = P0^1;
sbit P0_2 = P0^2;
sbit P0_3 = P0^3;
sbit P0_4 = P0^4;
sbit P0_5 = P0^5;
sbit P0_6 = P0^6;
sbit P0_7 = P0^7;

sbit P1_0 = P1^0;
sbit P1_1 = P1^1;
sbit P1_2 = P1^2;
sbit P1_3 = P1^3;
sbit P1_4 = P1^4;
sbit P1_5 = P1^5;
sbit P1_6 = P1^6;
sbit P1_7 = P0^7;


/*------------------------------------------------
P2 Bit Registers
------------------------------------------------*/
sbit P2_0 = 0xA0;
sbit P2_1 = 0xA1;
sbit P2_2 = 0xA2;
sbit P2_3 = 0xA3;
sbit P2_4 = 0xA4;
sbit P2_5 = 0xA5;
sbit P2_6 = 0xA6;
sbit P2_7 = 0xA7;
/*------------------------------------------------
P3 Bit Registers (Mnemonics & Ports)
------------------------------------------------*/
sbit P3_0 = 0xB0;
sbit P3_1 = 0xB1;
sbit P3_2 = 0xB2;
sbit P3_3 = 0xB3;
sbit P3_4 = 0xB4;
sbit P3_5 = 0xB5;
sbit P3_6 = 0xB6;
sbit P3_7 = 0xB7;


void SCI_INI(void);      //sci_a init
void output(void);
void delay(int);
void com_isr(void);

u8 rec_flag=1;

int time_flag;

u8	buf1=0xeb;
u8	buf2=0x20;
u8	buf3;  		//address
u8	buf4=0xaa;
u8	buf5;		//control code
u8	buf6=0x55;

void main(void)
{
	P3_3=0;
	delay(500);
	P3_3=1;
	delay(200);
	P3_3=0;
	delay(500);
	P3_3=1;

	SCI_INI();	
	while(1)
	{
		

			delay(1);
			while (time_flag)
				{
				output();
				delay(10);
				time_flag-=1;
				}
			//output off
			P1=P1 | 0x3c;	//	**1111**
			P2=0;
			P3_3=0;
	
		
	}
}

void SCI_INI(void)
{	
	P0=0XFF;
	P1=0Xff;
	P2=0X0;
	P3=0X0;
	P3_0=1;

	TMOD=0x20; //timer1  use as sci bord ,timer0 use as 16bit counter

	TL1=0XFd;
	TH1=0xfd; //sci bord speed=2400 when 11.052Mhz.

	TR1=1;     //timer1 enable

	PCON=0X0;
	SCON=0X50;  //工作方式 1,接收允许

	EA=1;
	ES=1;
}


void com_isr(void) interrupt 4 using 1
{
	u8 temp;
	


	if (RI)
		{	
			temp=SBUF;
			if (temp==buf1) rec_flag=1;

			switch (rec_flag)
				{
				case 1:
					if(temp==0xeb) rec_flag+=1;
					break;
				case 2:
					if(temp==0x20) rec_flag+=1;
					else rec_flag=1;
					break;
				case 3:
					buf3=temp;					//recieve address
				 	rec_flag+=1;
					break;
				case 4:
					if(temp==0xaa) rec_flag+=1;
					else rec_flag=1;
					break;
				case 5:
					buf5=temp;					//recieve contro code
					rec_flag+=1;
					break;
				case 6:
					if(temp==0x55) 
						{
						if(buf3==P0) 	//address ok
							{
							//set output
					
							P3_3=1;
							time_flag=10;
							}
						}
					rec_flag=1;
					break;
				default:
					break;

				}
			RI=0;
		}
}

void output(void)
{
	switch (buf5)
		{
		case 0:
			P1_2=0;
			break;
		case 1:
			P1_3=0;
			break;
		case 2:
			P1_4=0;
			break;
		case 3:
			P1_5=0;
			break;
/*
Up			5	00H					p1.2
Down		4	01H					p1.3
Left		3	02H					p1.4
Right		2	03H					p1.5

*/
		case 4:
			P2_3=1;
			break;
		case 5:
			P2_2=1;
			break;
		case 6:
			P2_5=1;
			break;
		case 7:
			P2_4=1;
			break;
		case 8:
			P2_1=1;
			break;
		case 9:
			P2_0=1;
			break;
/*
Near		8	04H					p2.3 f+
Far			13	05H					p2.2 f-
Iriso		7	06H					p2.5  i+
Irisc		12	07H					p2.4  i-
Zoom_out	14	08H					p2.1  z+
Zoom_in		9	09H					p2.0  z-
*/

		case 0x31:		//Light on	11	031H				p1.0
			P1_0=0;
			break;
		case 0x32:		//Light off	11	032Hs				p1.0
			P1_0=1;
			break;
		case 0xb:		//Wiper		6	0BH/02BH(关/开)	p1.1
			P1_1=1;
			break;
		case 0x2b:
			P1_1=0;
			break;

		case 0xe:		//Auto pan	1	0EH/0FH(关/开)	p1.6
			P1_6=1;		//关
			break;
		case 0xf:
			P1_6=0;		//开
			break;

		case 0xc:		//Camera Power		0C/0D(关/开)	p1.7
			P1_7=0;
			break;
		case 0xd:
			P1_7=1;
			break;
		
		case 0x15:		//Left up			15H					--

			break;		
		case 0x23:		//Left down		23H					--
			
			break;
		case 0x1a:		//Right up		1AH					--
			
			break;
		case 0x2a:		//Right down		2AH					--
			
			break;
		case 0xff:		//所有动作停止(带开关的除外)		OFFH
			
			break;
		default:
			break;
		}
}

void delay(int ms)
{
	int i,j;
	for (i=0;i<ms;i++)
		for(j=0;j<255;j++);
}

/*============================================
p1.0~p1.6:1=OFF,p1.7:1=ON
p2.0~p2.5:1=ON

Up			5	00H					p1.2
Down		4	01H					p1.3
Left		3	02H					p1.4
Right		2	03H					p1.5

Near		8	04H					p2.3 f+
Far			13	05H					p2.2 f-
Iriso		7	06H					p2.5  i+
Irisc		12	07H					p2.4  i-
Zoom_out	14	08H					p2.1  z+
Zoom_in		9	09H					p2.0  z-

Wiper		6	0BH/02BH(关/开)	p1.1
Camera Power		0C/0D(关/开)	p1.7
Auto pan	1	0EH/0FH(关/开)	p1.6
Left up			15H					--
Left down		23H					--
Light on	11	031H				p1.0
Light off	11	032Hs				p1.0
Right up		1AH					--
Right down		2AH					--
所有动作停止(带开关的除外)		OFFH

============================================*/

⌨️ 快捷键说明

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