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

📄 mainbak.c

📁 使用isis模拟的红外编解码实验
💻 C
字号:
#include <reg52.h>
#define TIMEH 12 //基于22.1184M时钟晶振,数字越大,时间越长
#define TIMEL 50
#define ROW P3
#define LINE P2

extern void timer_init(void);
extern void delay(unsigned int);
extern unsigned char scan_key(void);

unsigned char irm_code,turn_flag;
sbit QD = P1^0;

void main()
{
	unsigned char tmp=0;
	irm_code=0;
	turn_flag=0;
	timer_init();
	while(1){
		if(turn_flag==0) {
			tmp = scan_key();
			if(tmp!=0xff) {
				irm_code = tmp;
				TR0 = 1;
				turn_flag=0xff;
			}
		}
	}	 
}

void timer_init(void)
{
	TMOD = 0x01;
	TH0 = 0xff;
	TL0 = 0xff;
	EA = 1;
	ET0 = 1;
	TR0 = 0;
}

void timer_int(void) interrupt 1
{
	static unsigned char i=0,flag=0;
	QD=~QD;
	if(i<10) {
		TH0 = 255-TIMEH/2;
		TL0 = 255-TIMEL/2;
		i++;
	}
	else if(i<18) {
		if((irm_code & 0x80)==0x80) {
			TH0 = 255-TIMEH;
			TL0 = 255-TIMEL;
			irm_code <<= 1;
			i++;
		}
		else {
			TH0 = 255-TIMEH/2;
			TL0 = 255-TIMEL/2;
			if(flag) {
				irm_code <<= 1;
				i++;
			}
			flag ^= 0x01;
		}		
	}
	else {
		TR0 = 0;
		i=0;
		QD=1;
		turn_flag=0;
		TH0 = 0xff;
		TL0 = 0xff;	  
	}	
}


void delay(unsigned int t)
{
	unsigned char i;
	while(t--) for(i=0;i<230;i++);
}

unsigned char scan_key(void)
{
	static unsigned char i;
	unsigned char tmp,j; 		
	unsigned char code row_code[]={0xfe,0xfd,0xfb,0xf7};
	unsigned char code lin_code[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
	ROW=row_decode[i];
	tmp=LINE;
	for(j=0;j<8;j++) {
		if(tmp==lin_code[j]) return j;
	}



	switch (tmp)
	{
		case 0xfe:
			return 0x01; 
			break;
		case 0xfd:
			return 0x02;
			break;
		case 0xfb:
			return 0x03; 
			break;
		case 0xf7:
			return 0x04;
			break;
		case 0xef:
			return 0x05; 
			break;
		case 0xdf:
			return 0x06;
			break;
		case 0xbf:
			return 0x07; 
			break;
		case 0x7f:
			return 0x08;
			break;
		default:
			break;
	}

	ROW=0xfd;
	tmp=LINE;
	switch (tmp)
	{
		case 0xfe:
			return 0x09; 
			break;
		case 0xfd:
			return 0x0a;
			break;
		case 0xfb:
			return 0x0b; 
			break;
		case 0xf7:
			return 0x0c;
			break;
		case 0xef:
			return 0x0d; 
			break;
		case 0xdf:
			return 0x0e;
			break;
		case 0xbf:
			return 0x0f; 
			break;
		case 0x7f:
			return 0x10;
			break;
		default:
			break;
	}

	ROW=0xfb;
	tmp=LINE|0x80;
	switch (tmp)
	{
		case 0xfe:
			return 0x11; 
			break;
		case 0xfd:
			return 0x12;
			break;
		case 0xfb:
			return 0x13; 
			break;
		case 0xf7:
			return 0x14;
			break;
		case 0xef:
			return 0x15; 
			break;
		case 0xdf:
			return 0x16;
			break;
		case 0xbf:
			return 0x17; 
			break;
		case 0x7f:
			return 0x18;
			break;
		default:
			break;
	}

	ROW=0xf7;
	tmp=LINE;
	switch (tmp)
	{
		case 0xfe:
			return 0x19; 
			break;
		case 0xfd:
			return 0x1a;
			break;
		case 0xfb:
			return 0x1b; 
			break;
		case 0xf7:
			return 0x1c;
			break;
		case 0xef:
			return 0x1d; 
			break;
		case 0xdf:
			return 0x1e;
			break;
		case 0xbf:
			return 0x1f; 
			break;
		case 0x7f:
			return 0x20;
			break;
		default:
			break;
	} 

}





⌨️ 快捷键说明

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