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

📄 main.c

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

#define  EXTERN_AT89C51
#include "AT89C51.h"

#define  EXTERN_YEJING
#include "yejing.h"

///////////////////////////////////////////////////////////////////////////////
////////////////外部中断0的中断服务处理程序////////////////////////////////////
///////////接收一侦完整的数据(1个字节的数据),要连续进入中断33次/////////////
void Int_EX0(void) interrupt 0
{ 
   // P32=1;////在变量声明之前不要有语句,否则报错/////////  
   TH0=0; TL0=0; 
   TR0=1;///打开定时器0,从0开始记数,用于计算脉冲宽度//////
   EX0=0; //进入外部中断0后关闭外部中断0///
//  TH1=0xc5; TL1=0x68;TR1=1;////定时15ms启动用于超时的定时器T1,下一次的脉冲中断///////
                           ////必须在15ms以内来到,否则接收系统全部归0////////////////
 // TH1=0xe4; TL1=0xa8; TR1=1;////定时7ms,启动T1//////
   if((n==0)||(n==33))////判断是否是引导码/////
     {
          n=a=temp=temp1=temp2=temp3=temp4=0;   
         if(Check_leader())////检查引导码是否正确///////
		     {
			    n++;
			    EX0=1;
               //dis_data=666;////用于调试////
			    return;
			 }
            else 
			{
			    EX0=1;
                n=a=temp=temp1=temp2=temp3=temp4=0;
			   // dis_data=111;////用于调试//////
		    	return;
			}
     }
   else   /////如果不是引导码,应该是用户码和数据码/////
     {
		 if(Receive_bitdata()){n++; EX0=1;return;}////是可接收的位信息吗?是接收////
              else ////在n不为0时,只要有1个不可接收的位信息出现,则放弃该帧后面所有的位数据接收//////
                {  ////接收系统全部归0,等待,直到开始下一帧新的数据接收,////////////////
	/////所以在n不为0时,只有连续的无差错的32个位信息数据被接收,则是成功接收一侦完整的数据///////////
                 n=a=temp=temp1=temp2=temp3=temp4=0;
                 EX0=1;
                 // dis_data=777;////用于调试//////
                 return;
                }                              
     }
}
////////////////外部中断0的中断服务处理程序结束//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
////////////////定时器T1中断服务处理程序/////////////////////////////////////////////////////////////////
void Timer1 (void) interrupt 3
{
 //TH1=0xc5; TL1=0x68;//////用于调试//////
 //n_data++;////用于调试//////
 TR1=0;
 n=a=temp=temp1=temp2=temp3=temp4=0;//dis_data=777;
 //if(n_data==400){n=m=temp=temp1=temp2=temp3=temp4=0;dis_data=777;TR1=0; n_data=0;} //////用于调试//////	  
 return;
}
///////////////////////////////////////////////////////////////////////////////
////////////////////main()主函数//////////////////////////////////////////////
void main()
{ 
  AT89C51_initialize(); /////初始化//////
  Delay400Ms();
  Lcd_initilize();//////液晶初始化/////
  Delay400Ms();
  Delay400Ms();

  Disp_strings(0,0,"当前摄氏温度值: %");
  Disp_strings(6,1,"度%");
  while (1)
  {   
     Receive_Infrared_Process();//////红外线接收处理//////
     Disp_data(2,1, dis_data);  //////dis_data的上电初值为555/////      
  }
}
////////////////////main()主函数结束///////////////////////////////////
/////////////////////

////////////////////////

⌨️ 快捷键说明

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