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

📄 at89c51.c

📁 DS18B20温度采集然后红外发射出去,接收板接收红外并LCD显示接收的数据信息,有完整的发射接收程序
💻 C
字号:
#include <reg51.h>

#include "AT89C51.h"

float dis_data=555;
//uint n_data=0;//////用于调试//////
//uchar code array1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xb9,0xbf};
/////不带小数点///////0/////1////2///3////4/////5////6////7///8/////9////+////-/////////                          
//uchar code array2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
/////带小数点/////////0/////1////2///3////4/////5////6////7///8/////9/////////////////                                                    
uchar n=0;
uchar a=0;
uchar temp=0;
uchar temp1=0;
uchar temp2=0;
uchar temp3=0;
uchar temp4=0;
///////////////////////////////////////////////////////////////////////////////
void AT89C51_initialize(void)
{
   EA =1;////打开中断总开关///////
   EX0=1;////打开中断0////
 //  PX0=1;
   IT0=1;/////设置下降沿触发///// 
///////////////////////////////////////////// 
   ET0=1;/////允许T0中断/////
//  PT0=1;
   ET1=1;/////允许T1中断/////
//  PT1=1;
   TMOD=0x11;////T0、T1都工作在模式1,16位/////
   TH0=0; TL0=0; TR0=0;/////设置初值为0,暂时不要启动T0//////
 //  TH1=0xc5; TL1=0x68; TR1=0;////定时15ms,暂时不要启动T1//////
//  TH1=0xe4; TL1=0xa8; TR1=0;////定时7ms,暂时不要启动T1//////
}

////////////////////引导码核对函数///////////////////////////////////////////////////////////////
bit Check_leader(void)
{
 uint lead_time;
 while(P31==0);////引导码的脉冲还没有结束,等待/////
 TR0=0;        /////脉冲结束,关闭T0///////////////
 lead_time=TH0*256+TL0;///////计算脉冲的宽度///////
  if((lead_time>2500)&&(lead_time<3200))  return(1);  /////判断是否是引导码////
   else {
        //dis_data=111;////用于调试//////
        return(0);
        }
}
/////////////////////////////////////////////////////////////////////////////////
/////////////////////接收位数据函数//////////////////////////////////////////////////////////////
bit  Receive_bitdata(void)
{
 uint data_time;
 while(P31==0);////位信息脉冲还没有结束,等待/////
 TR0=0;        /////脉冲结束,关闭T0///////////////
 data_time=TH0*256+TL0;///////计算脉冲的宽度///////
  if((data_time>250)&&(data_time<650)) 
   {
    Jizai_data(0);
    return(1);
   } ///如果为逻辑0信息,并记录///// 
       // else   return(0);
 if((data_time>1200)&&(data_time<1650)) 
   {
    Jizai_data(1);
    return(1);
    }///如果为逻辑1信息,并记录/////
       // else   return(0);
  if((data_time<250)||(data_time>1650))   return(0);       ///如果为非位信息数据,放弃,/////  
}
/////////////////////////////////////////////////////////////////////////////////
/////////////////////记录接收的位数据函数//////////////////////////////////////////////////////////////
bit Jizai_data(bit bitdata)
{
 temp=temp<<1;////左移////
 if(bitdata==1) temp=temp|0x01;/////先发送的是数据的最高位,发送和接收要对应//////////
    else temp=temp&0xfe;
	a++;////接收一位信息,m的值加1,m代表接收了几个位信息/////////
    //dis_data=temp;
//if(bitdata==1) dis_data=1;/////先发送的是数据的最高位,发送和接收要对应//////////
 //   else dis_data=0;
  if(a==8)   {temp1=temp;temp=0;}/////接收到一个字节信息,将数据转给temp1///////
  if(a==16)  {temp2=temp;temp=0;}/////接收到第2个字节信息,将数据转给temp2///////
  if(a==24)  {temp3=temp;temp=0;}/////接收到第3个字节信息,将数据转给temp3///////
  if(a==32)  {temp4=temp;temp=0;a=0;}/////接收到第4个字节信息,将数据转给temp4,////////////
                                //////////一次完整的数据传输结束,m的值归0///////
  return(1);
}
/////////////////////////////////////////////////////////////////////////////////
/////////////////////核对接收的数据是否正确函数//////////////////////////////////////////////////////////////
bit Check_Receive_data(void)
{
 
 if((temp1==~temp2)&&
    (temp3==~temp4))//&&(temp1==0xaa)
	   return(1);  /////注意temp3是传送过来的有效、需要取用的数据值///////
   else return(0);
}
/////////////////////////////////////////////////////////////////////////////////

////////////////////////////////红外线接收处理函数///////////////////////////////////////////////////////////////////////////////////
void Receive_Infrared_Process(void)
{
  if(n==33)        //////如果接收完1侦数据(1个字节数据)////////
    {
      if(Check_Receive_data())
        {
          P_data1=temp1; P_data2=temp3;//////经过校验正确,取用//////
         if (P_data1 >= 0x80)  {dis_data=-((~P_data1)*256+(~P_data2)+1)*0.0625;}                        
          else{dis_data=(P_data1*256+P_data2)*0.0625; }     
        }          
    } 
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////



⌨️ 快捷键说明

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