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

📄 红外解码程序.c

📁 基于单片机开发的红外线遥控器控制的电器定时开关系统
💻 C
字号:
//C51红外解码程序
#include<INTRINS.H>
#include <AT89X51.h>  
#define uchar unsigned char
#define uint unsigned int

#include "lcd1602.h"

//晶振用的是11.0592M的。 
sbit p32=P3^2;
sbit p11=P1^1;
unsigned char dm,i,j,k;
unsigned char  a[4];//定义4个数组,用来存储代码
 uchar l,m,n,p,q; //动态显示数码位变量

 uchar tabl[]="0123456789abcdef";
 bit flag=0;
 uchar counter1=0,counter2=0;
/*********************************/
void init_T0(void);
 /*********************************/

void display()
{		//unsigned char i;
		wr_com(0x80);		//set ram address
		wr_com(0x01);   ///***清屏****
		/*
		delay50us();
		busycheck();
		delay50us();

		for(i=0;i<16;i++)
       {wr_data(line1[i]);		//display 

		delay50us();
		busycheck();}
		busycheck();
		delay50us();

		//
		wr_com(0xc0);
		delay50us();*/
			busycheck();
			delay50us();

			wr_data('0');		//display 
			delay50us();
			busycheck();

			wr_data('x');		//display 
			delay50us();
			busycheck();

			wr_data(':');		//display 
			delay50us();
			busycheck();

//
			wr_data(tabl[m]);		//display 
			delay50us();
			busycheck();

			wr_data(tabl[n]);		//display 
			delay50us();
			busycheck();

			wr_data(tabl[p]);		//display 
			delay50us();
			busycheck();

			wr_data(tabl[q]);		//display 
			delay50us();
			busycheck();
}
 /*********************************/
/*********************************/
void ds1ms(void)
{
unsigned char i,j;
for(i=2;i>0;i--)
   for(j=230;j>0;j--) ;
}

void ds2s(void)
{
unsigned char i,j,k;
for(i=12;i>0;i--)  
  for(j=80;j>0;j--)
     for(k=10;k>0;k--) ;
}

/*********************************/
void ds0_9ms(void)
{
unsigned char j,k;
   for(j=18;j>0;j--)
     for(k=20;k>0;k--) ;
}

/*********************************/
void main()
{
IT0=1;
EX0=1;
EA=1;
dm=0;
init();
p11=0;

wr_com(0x01);   ///***清屏****
display();

while(1)
{
	if(flag==1)
	{ 
		if((m==4)&&(n==0))
		{
			init_T0();
			p11=1;
		}
		display();
		ds2s(); ds2s(); ds2s();
		flag=0;
	}
}

}

void T0_inter(void) interrupt 1
{
	TR0=0;
	TH0=0X3C;
	TL0=0XB0;
	TR0=1;

	counter1+=1;
	if(counter1==200)  //10S
	{
		counter1=0;
		counter2+=1;
		if(counter2==1)	 //定时多少秒 counter2=1表示10秒
		{
			p11=~p11;
			TR0=0;
			counter2=0;
		}
	}	

}

void init_T0(void)
{
////////////////////////////
TR0=0;
TMOD=0x01;
	TH0=0X3C;
	TL0=0XB0;
ET0=1;
TR0=1;
counter1=0;
counter2=0;
////////////////////////////
}


void E0_1(void) interrupt 0 //外部中断0的函数
{  uchar DL,DH,a0;
    EA=0;P2=0xff;

    for(k=0;k<1;k++)
   {
    ds0_9ms();
    if (p32==1) {;break;}


     while(p32==0);


     ds0_9ms();a0=p32;

        if(a0==1)
        {   while(p32==1);
            for(i=0;i<4;i++)
             {
                 for(j=1;j<=8;j++)
                {
                  while(p32==0);
                  ds0_9ms();
                  if(p32==1)
                   { ds1ms();
                     dm=dm|0x80;
                     if(j<8) dm=dm>>1;
                    }

                   else  
                         if(j<8)dm=dm>>1;
                 }
               a[i]=dm;
               dm=0;
             }
    	 }

     }
  DL=0X0F&a[2];
         DH=a[2];
  DH=DH>>4;
     m=DL;
     n=DH;
  DL=0X0F&a[0];
         DH=a[0];
  DH=DH>>4;
     q=DL;
     p=DH;

   ds2s();
   ds2s();
   ds2s();

  flag=1;
  EA=1;
  
}

⌨️ 快捷键说明

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