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

📄 hongwai.c

📁 用51MUC控制的红外遥控器键值数码管显示程序
💻 C
字号:
/******************************************************************
/*                                                                *
/* OK400C单片机开发系统演示程序 							      *
/*                                                                *
/* 版本: V2.0 (2007/11/20)                                       *
/* 作者: 高山流水 (Email: aoke999@sohu.com)                      *
/* 网站: www.aokemcu.cn(奥科电子)                                *
/*                                                                *
/*                                                                *
/******************************************************************/

#include <reg52.h>       //51芯片管脚定义头文件
#include <intrins.h>	 //内部包含延时函数 _nop_();

#define uchar unsigned char
#define uint  unsigned int

sbit dula=P2^6;
sbit wela=P2^7;

//#define	DELAYNUM	40	//该数值可以调节显示的速度

sbit  IRIN = P3^2;         //红外接收器数据线
sbit  BEEP = P2^3;         //蜂鸣器驱动线


//uchar code table[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e};
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar IRCOM[]={0x00,0x00,0x00,0x00,0x10,0x10};
uchar  dis[8];

void delay(unsigned char x);
void  display();
void beep();

void dis8(uchar r,uchar c)
{
   dula=0;
   P0=table[r];		
   dula=1;
   dula=0;

   wela=0;
   P0=~(1<<c);
   wela=1;
   wela=0;
   delay(5);
}

/*******************************************************
*                                                      *
* 主函数                                               *
*                                                      *
*******************************************************/
main(void)
{
//	uchar k;

	EA=1;
	ET1=1;
	EX0=1;
	while(1)
	{
		dis8(IRCOM[4],5);
		dis8(IRCOM[5],4);
	}

} //end of main()


void IR_IN() interrupt 0 //using 0
{
	unsigned char j,k,N=0;
	EA = 0;   
	delay(10);
	
	if (IRIN==1) 
	{
		EA =1;
		return;
	} 
                        //确认IR信号出现
	while (!IRIN)            //等IR变为高电平,跳过9ms的前导低电平信号。
	{
		delay(1);
	}
	while (IRIN)            //等IR变为高电平,跳过9ms的前导低电平信号。
	{
		delay(1);
	}
	for (j=0;j<4;j++)         //收集四组数据
	{ 
		for (k=0;k<8;k++)        //每组数据有8位
		{
			while (IRIN)            //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
			{
				delay(1);
			}
			while (!IRIN)          //等 IR 变为高电平
			{
				delay(1);
			}
			while (IRIN)           //计算IR高电平时长
			{
				delay(1);
				N++;   
			}                        //高电平计数完毕     
   			if (N>=30)
			{ 
				EA=1;
				return;                  //0.14ms计数过长自动离开。
			}
			IRCOM[j]=IRCOM[j] >> 1;                  //数据最高位补“0”
			if (N>7) 
			{
				IRCOM[j] = IRCOM[j] | 0x80;
			}  						//数据最高位补“
			N=0;
		}//end for k
	}//end for j
	/*
	if (IRCOM[2]!=~IRCOM[3])   //接收时间是否正确
    { 
      EA=1;
      return; 
    }
	
	if(IRCOM[0]!=0x00)         //比较用户码
    { 
      EA=1;
      return; 
    }*/
	IRCOM[4]=IRCOM[2] & 0x0F;     //取键码的低四位
	IRCOM[5]=IRCOM[2] >> 4;       //右移4次,高四位变为低四位

	beep();
	EA = 1; 
} 

/**********************************************************/
void beep()
{
  unsigned char i;
  for (i=0;i<180;i++)
   {
     delay(6);
     BEEP=!BEEP;                 //BEEP取反
   } 
  BEEP=1;                      //关闭蜂鸣器
}
/**********************************************************/
void delay(unsigned char x)    //x*0.14MS
{
 unsigned char i;
  while(x--)
 {
  for (i = 0; i<13; i++) {}
 }
}

/**********************************************************/

⌨️ 快捷键说明

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