红外遥控控制1602液晶显示解码数据

这是我的地第一篇博客,我也不知道该怎么样的格式去写,所以有不当之处还请海涵一二~~微笑。这是我在今年暑假期间写的一个小程序,在大一下学期一直在学51单片机,所以在暑假的时候也就尝试着写这个红外解码的程序了,当时不知道该如何下手去,经过了查找大量的资料终于是可以入手去写了。在写的过程中也出现了很多问题,但是在仔细的琢磨下最终还是解决了,今天就在者分享一下源码~

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
unsigned  char  a[4],aa,bb;
unsigned int LowTime,HighTime;
sbit IR=P3^2;
sbit duan=P2^6;
sbit  wei=P2^7;
sbit lcdrs = P1^0;   //定义端口
sbit lcdrw= P1^1;
sbit lcden= P2^5;     
bit  DeCode(void)     

   unsigned char  i,j;
   unsigned char temp;  
   for(i=0;i<4;i++)     
   {
  for(j=0;j<8;j++) 
  {
       temp=temp>>1;           
    TH0=0;        
    TL0=0;        
    TR0=1;        
       while(IR==0);  
      TR0=0;       
    LowTime=TH0*256+TL0;   
    TH0=0;        
    TL0=0;        
    TR0=1;               
    while(IR==1);       
    TR0=0;       
    HighTime=TH0*256+TL0;  
    if((LowTime<400)||(LowTime>750)) return 0;           
    if((HighTime>470)&&(HighTime<550)) temp=temp&0x7f;       
    if((HighTime>1480)&&(HighTime<1600)) temp=temp|0x80;              
     }                
     a[i]=temp;                      
  }         
  if(a[2]==~a[3]) return 1;
}
void delay(uchar z)  //延时函数
{
     uint i,j;
 for(i=z;i>0;i--)
  for(j=110;j>0;j--); 
}       
void write_com(uchar com)
{      
 lcdrs=0;
 lcdrw=0;
 P0=com;
 delay(5);
 lcden=1;
 delay(5);   
 lcden=0;
}
void write_data(uchar date)
{      
 lcdrs=1;
 lcdrw=0;
 P0=date;
 delay(5);
 lcden=1;
 delay(5);
 lcden=0;

void init()
{
   duan=0;
   wei=0;
   lcden=0;
   write_com(0x38);
   write_com(0x0c);
   write_com(0x06);
   write_com(0x01);
}

void main()

   EA=1;
   EX0=1;      
   ET0=1;      
   TMOD=0x01;    
   TR0=0;       
   while(1);   
}
void jiema(uchar x)
{
 
 aa=x/16;
 bb=x%16;

}
void zhoduan() interrupt  1

   uchar temp;
   EX0=0;
   TH0=0;
   TL0=0;
   TR0=1;
   while(IR==0);
   TR0=0;
   LowTime=TH0*256+TL0;
   TH0=0;
   TL0=0;
   TR0=1;
   while(IR==1);
   TR0=0;
   HighTime=TH0*256+TL0;
 
    if((LowTime>7500)&&(LowTime<9000)&&(HighTime>3500)&&(HighTime<5000))
   {
       if(DeCode()==1)
    {
     init();
    write_com(0x80+0x04);
    temp=a[2]; 
    jiema(temp);
    if(aa>=10)
        aa=(aa+55);
      else
        aa=aa+48;
    if(bb>=0xa)
       bb=bb+55;
      else  
        bb=bb+48;
    write_data(aa);
       write_data(bb);
    }  
   }
  EX0=1;
}

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值