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

📄 jiema.c

📁 这是一个红外解码的程序
💻 C
字号:
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint k);//延时
void add(void);  //把数组转化为地址码和数据码 
void addled(void);  //计算出led要显示的数
void display(void);//led显示
void count(void);
uchar  SEG7[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳
uchar  scan_led[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //片选 高平亮
uchar led[8]={1,2,3,4,5,6,7,8};    //每位led要显示的数
sbit P32=P3^2;
bit finish;//结束标志位
uchar tt[33];
uchar j,t;
uchar data1,data2,address1,address2;
void main(void)
{ 
  TH0=0;TL0=0;
  TMOD=0x19;
  TR0=0;
  EX0=1;//允许中断
  IT0=1;//下降沿中断
  TH1=252;TL1=0;
  ET1=1;
  TR1=1;
  PT1=1;
  EA=1;
  while(1){
   if(finish==1){finish=0;
                 add();
                 //addled();
                  count();
				 }
   }
}
////////////////////////////////////////////
void delay(uint k)//延时
{k=k*8;
 while(--k);
 }
//////////////////////////////////
void int0()interrupt 0
{uchar i;
 EX0=0;
 TR0=1;
 while(P32==0);
 while(P32==1){if(TH0>20)break;}//时间大于5.3ms时就退出
 TR0=0;
 t=(TH0*256+TL0)/100;
 TH0=0;TL0=0;
 tt[0]=t;
 //if(t>42&&t<48){
 for(i=1;i<=32;i++)
                   { 
				   TR0=1;
				     while(P32==0);
                     while(P32==1){if(TH0>20)break;}//时间大于2.7ms时就退出
                     TR0=0;
				     t=(TH0*256+TL0)/100;
                     TH0=0;TL0=0;
                     //if(t>4&&t<7)
					 tt[i]=t;   //0.56ms为0
				     //if(t>15&&t<18)
					 //tt[i]=1;//1.68ms为1
					 TH0=0;TL0=0;
				   }
                 finish=1;
			//	}
 EX0=1;
}
///////////////////////////////////////////
void add(void)   //把数组转化为地址码和数据码 
{uchar i;
 address1=0;
 address2=0;
 data1=0;
 data2=0;//清0
 for(i=8;i>0;i--)
 	{address1=(address1<<1)|tt[i];
 	 address2=(address2<<1)|tt[i+8];
 	 data1=(data1<<1)|tt[i+16];
 	 data2=(data2<<1)|tt[i+24];
	}
 }
///////////////////////////////////////////
void addled(void)   //计算出led要显示的数
{if((data1+data2)==0xff)//数据码和反码的检验
   {led[7]=address1>>4;//取高位
	led[6]=address1&0x0f;//取低位
	led[5]=address2>>4;
    led[4]=address2&0x0f;
    led[3]=data1>>4;
    led[2]=data1&0x0f;
    led[1]=data2>>4;
    led[0]=data2&0x0f;
	}
}
//////////////////////////////////////////	
void display(void)//led显示
{  P0=0xff;
   P2=scan_led[j]; //片选扫瞄
   P0=SEG7[led[j]]; //共阳段显
   j++;
   if(j>=8)j=0;	 
 }
////////////////////////
void timer1()interrupt 3
{TH1=245;TL1=0;
 display();
 }
////////////////////////////
void count(void)
{led[7]=tt[0]/10;
 led[6]=tt[0]%10;
 led[5]=tt[1]/10;
 led[4]=tt[1]%10;
 led[3]=tt[2]/10;
 led[2]=tt[2]%10;
 led[1]=tt[3]/10; 
 led[0]=tt[3]%10;
 }

⌨️ 快捷键说明

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