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

📄 xlirled.c

📁 说明:本文件夹一共提供各类编程实例200多个
💻 C
字号:

/********************************************************************************
*  标题:  xl系列单片机实验仪演示程序 遥控键值解码-LED显示                      *
*  文件:   xlirled.c                                                           *
*  日期:  2006-1-5                                                             *
*  版本:  3.0 (试验通过版)可用xl600-xl1000单片机综合试验仪试验               *
*  邮箱:  sxj1974@163.com                                                      *
*  网站: http://www.51c51.com    www.8951.com                                 *
********************************************************************************
*  描述:                                                                       *
*          遥控键值读取器                                                      *
*         数码管显示, P0口为数码管的数据口 ,p2为数码管的控制位 遥控器接p3.2   *
*          喇叭接p3.7  继电器接p1.0  每次按键喇叭提示                          *
*         17(40h)键按下,继电器吸合。19(04h)键按下,继电器关闭。               *
*                                                                              *
********************************************************************************
* 【版权】 Copyright(C)深圳市学林电子有限公司 www.51c51.com                     *
* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                   *
*  【技术支持】请访问http://www.51c51.com/bbs/index.asp  官方论坛               *
********************************************************************************/
#include <reg51.h>
#include <intrins.h>

void IR_SHOW();
void delay(unsigned char x);//x*0.14MS
void delay1(unsigned char ms);
void beep();

sbit IRIN = P3^2;
sbit BEEP = P3^7;
sbit RELAY= P1^3;
sbit GEWEI= P2^7;
sbit SHIWEI= P2^6;

unsigned char IRCOM[8];
unsigned char code table[16] = 
                        {0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60,0x30,0x25,0xa9,0x26,0xa1,0xb1};//;数码管1-9,0,a,b,c,d,e,f代码表
main()
{
 IE = 0x81;    //允许总中断中断,使能 INT0 外部中断
 TCON = 0x1;   //触发方式为脉冲负边沿触发
 delay(1);

         IRIN=1;
    	 BEEP=1;
		 RELAY=1;
		 for(;;)
		 {
		  IR_SHOW();
		 }

} //end main

void IR_IN() interrupt 0 using 0
{
 unsigned char i,j,k,N=0;
  EA = 0;
I1:
  for (i=0;i<4;i++)
   {
    if (IRIN==0) break;
	if (i==3) {EA =1;return;}
   }
  delay(20);
    if (IRIN==1) goto I1;  //确认IR信号出现
  while (!IRIN)            //等 IR 变为高电平
    {delay(1);}

 for (j=0;j<4;j++)
 { 
  for (k=0;k<8;k++)
  {
 	 while (IRIN)            //等 IR 变为低电平
   	 {delay(1);}
  	 while (!IRIN)          //等 IR 变为高电平
   	 {delay(1);}
     while (IRIN)           //计算IR高电平时长
      {
	   delay(1);
	   N++;           
	   if (N>=30) {EA=1;return;}
	  }
     IRCOM[j]=IRCOM[j] >> 1;
     if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}
     N=0;
  }//end for k
 }//end for j
   
   if (IRCOM[2]!=~IRCOM[3]) {EA=1;return;}
   IRCOM[5]=IRCOM[2] & 0x0F;
   IRCOM[6]=IRCOM[2] & 0xF0;
   IRCOM[6]=IRCOM[6] >> 4;
   beep();
   EA = 1;
  
}

void IR_SHOW()
 {
  P0 = table[IRCOM[5]];      
  GEWEI = 0;
  SHIWEI = 1;
  delay1(4);
  P0 = table[IRCOM[6]];      
  SHIWEI = 0;
  GEWEI = 1;
  delay1(4);
 }

void beep()
{
  unsigned char i;
  for (i=0;i<100;i++)
   {
   delay(5);
   BEEP=!BEEP;
   }	
  BEEP=1;
}

void delay(unsigned char x)//x*0.14MS
{
 unsigned char i;
 	while(x--)
	{
		for (i = 0; i<13; i++) {}
	}
}


void delay1(unsigned char ms)
{
 unsigned char i;
 	while(ms--)
	{
		for(i = 0; i<120; i++)
		{
			_nop_();
			_nop_();
			_nop_();
			_nop_();
		}
	}
}

/*
;================================
;DT9122D 遥控器

;******  红外遥控器键值表  ******

;  10     03      01      06
;  09     1D      1F      0D
;  19     1B      11      15
;  17     12      16      4C
;  40     48      04      00
;  02     05      54      4D
;  0A     1E      0E      1A
;  1C     14      0F      0C
;================================
*/


⌨️ 快捷键说明

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