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

📄 main.c

📁 美的遥控器解码C语言程序
💻 C
字号:
#include "STC89C51RC.H"

sbit DQ  = P4^3;
sbit SPK = P1^0;

unsigned char irm_code[6];

void delay(unsigned int t)
{			   
	while(t--);	
}
void Sound(void)
{
	SPK = 0;
	delay(10000);
	SPK = 1;
}

void rs232_port_init(void)
{
	SCON=0x50;	//串口工作在方式1,异步模式
	PCON=0x80;	//波特率翻倍
	TMOD=0x20;  //定时器1工作在方式2			
	TH1=0xff; 	//波特率115200,晶振为22.1184MHz
	TL1=0xff;						  	
	TR1 = 1;
	RI  = 0;
	TI  = 0;
}

void uart_putc(unsigned char c)
{
	SBUF = c;
	while(!TI);
	TI = 0;
} 

//STC单片机特有的外部中断INT2实现红外解码
//解码结果由数据缓冲区返回
void IRMint(void) interrupt 6
{		
	unsigned int temp;
	unsigned char i,j;

	EA = 0;/*解码过程禁止其它中断发生*/
	temp = 0;
	while(!DQ) if(temp++>0x1000) goto return_main;//防止意外死机	
	if (temp < 0x0200) goto return_main;//Max=0x0222
	/*以上完成引导码9ms的低电平检测*/
	temp = 0;
	while(DQ) if(temp++>0x1000)goto return_main;
	if (temp < 0x0150) goto return_main;//Max=0x0216
	/*以上完成引导码4.5ms的高电平检测*/
		
	for(j=0;j<6;j++)
	{
		for(i=0;i<8;i++)
		{ 
			irm_code[j]<<=1;
			temp = 0;
			while(!DQ)if(temp++>0x1000) goto return_main;//通过编码低电平
			temp = 0;
			while(DQ) if(temp++>0x1000) goto return_main;
			if(temp > 0x0060) irm_code[j] |= 0x01;
		}
	}

	/*将结果6字节从串口发出*/
	for(j=0;j<6;j++)
	{
		uart_putc(irm_code[j]);	
	}
	Sound();	
	return_main:EA = 1;
}

void main()
{		
	rs232_port_init();
	EA = 1;
	IT2 = 1;//下降沿中断
	EX2 = 1;

	while(1)
	{				
						
	}
} 	

⌨️ 快捷键说明

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