📄 main.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 + -