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

📄 at89c51.c

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

#include "AT89C51.h"
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xb9,0xbf};
uchar count=0;
///////////////////空闲延时函数///////////////16us*k+24////////////////////////
void KX_delay1(long k)//延时程序,k是形式参数
{
 uint  i;
 for(i=0;i<k;i++);    
}

////////////////数据发送函数////////////////////////////////////////////////////////////////////////////
bit Send_Data(uchar z,uchar y)
{
  if(    (Send_leader())&&    ////引导码发送成功/////
     (Send_user_data(z))&&////用户码发送成功////
     (Send_user_data(y)) )  return (1);/////数据码发送成功////3者都发送成功,则返回1///
    else return(0);                   ///////否则数据发送失败////////
}
/////////////////////引导码发送函数////////////////////////////////////////////////////////////////////////
bit  Send_leader(void)
{
 count=6;//调试值////count是个全局变量//引导码宽度为M*500us//
 TR0=1;  ///打开定时/计数器0开始运行//
 TR1=1; ////打开定时/计数器1开始运行//
 //P34=0;  ////此句可要可不要////
 while(TR0==1);////脉冲没有结束,等待//////
 KX_delay1(N);/////脉冲结束后,有大概多长时间的宽度,根据实际情况调整///////
 //KX_delay1(30);//延时1秒左右//用于调试////
 return(1);
}
/////////////////////用户码和数据码发送函数(包含其反码)////////////////////////////////////////////////////////////////////////
bit Send_user_data(uchar z1)
{
 // uchar i,j=8;////注意这样只对j赋值为8,要全部赋值应该为uchar i=8;uchar j=8;或 uchar j;uchar i=j=8;//////////
///////////////直接uchar i=j=8;也不正确///////////////
 uchar z2;
 uchar i=8;
 uchar j=8;
 z2=~z1;    ////z1的反码传给z2////////
 while(i--)
  {
    if((z1&0x80)==0x80) Send_bitdata_1();/////先发高位,后发低位//////
     else  Send_bitdata_0();
    // KX_delay1(30);//延时1秒左右//用于调试////
    z1=z1<<1;
  }
  while(j--)
  {
    if((z2&0x80)==0x80) Send_bitdata_1();
     else  Send_bitdata_0();
     //KX_delay1(30);//延时1秒左右//用于调试////
    z2=z2<<1;
  }
 return (1);
}
/////////////////////发送位数据0函数////////////////////////////////////////////////////////////////////////
void Send_bitdata_0(void)
{
 count=1;//调试值//count是全局变量//定义逻辑0为1000us的脉宽//
 TR0=1;  ///打开定时/计数器0开始运行//
 TR1=1; ////打开定时/计数器1开始运行//
 //P34=0; ////此句可要可不要////
 while(TR0==1);////脉冲没有结束,等待//////
 KX_delay1(N);//////////脉冲结束后,有大概多长时间的宽度,根据实际情况调整///////
}

/////////////////////发送位数据1函数////////////////////////////////////////////////////////////////////////
void Send_bitdata_1(void)
{
 count=3;//调试值//count是全局变量//定义逻辑1为2000us的脉宽//
 TR0=1;  ///打开定时/计数器0开始运行//
 TR1=1; ////打开定时/计数器1开始运行//
// P34=0; ////此句可要可不要////
 while(TR0==1);////脉冲没有结束,等待//////
 KX_delay1(N);//////////脉冲结束后,有大概多长时间的宽度,根据实际情况调整///////
}
////////////////////AT89C51初始化函数/////////////////////////////////////////////////////////////////////////
void AT89C51_initialize(void)
{  
  TMOD=0x21;	//确定定时器0和定时器1的工作模式
  TH0=0xfe;      ///定时器0定时500us////
  TL0=0x0c;
  TH1=0xf3;      ///定时器1定时13us////
  TL1=0xf3;
  EA=1;		    //开总中断允许//
  ET0=1;		//开定时/计数器0允许/
  ET1=1;		//开定时/计数器0允许//
  P34=0;        ////置0使发光二极管处于熄灭状态//////
}
////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
////////////////////数码管显示程序//////////////////////////////////////////////
void display(uchar z)
{
 // uchar m,t,k;
// if(z<=125){t=10;k=z;}
 //   else{t=11;k=z-125;}
     uchar m;
        for(m=0;m<100;m++)
	     	{
           //      P1=tab[t];
             //    LED0=1;
              //   LED1=0;
              //   LED2=0;
              //   LED3=0;
              //   delay();
              //   LED0=0;

                 P1=tab[z/100];
                 LED0=0;
                 LED1=1;
                 LED2=0;
                 LED3=0;
                 delay();
                 LED1=0;
	
                 P1=tab[z%100/10];
                 LED0=0;
                 LED1=0;
                 LED2=1;
                 LED3=0;
                 delay();
                 LED2=0;

                 P1=tab[z%10];
                  LED0=0;
                  LED1=0;
                  LED2=0;
                  LED3=1;
                  delay();
                  LED3=0;                
                }
}
/////////////////数码管显示程序结束/////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

void delay()
{
 unsigned int  i,j;
 for(i=0;i<15;i++)
    for(j=0;j<15;j++);
   
}
///////////////////////////////////////////////////////////////////////////////


 

⌨️ 快捷键说明

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