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

📄 hongwai1.c

📁 通过红外对管实现无线通信
💻 C
字号:
/* =========================================
函数名称:红外发送程序
函数功能:红外发送数据
说明:共阳数码管显示温度  //实验室开发板
	  P0段选  P1位选
	  P2_0为数据输入端
	  P3_2为发送控制端
时间:2008.8.15
licansong
===========================================*/
#include<reg52.h>
#include<intrins.h>
#include<absacc.h>
#define uchar unsigned char
uchar code tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//uchar code bb[4]={0xf7,0xfb,0xfd,0xfe};
uchar data str[5];
uchar data dat[5];
sbit P3_2=P3^2;
sbit P2_0=P2^0;
sbit DQ=P2^2;                        //单口线说明
bit T_sign=0;                        //温度正负符号	   
#define T_cont  0.0625               //温度转换常数
#define uchar  unsigned char
#define uint  unsigned int  
float  temp1=0;
unsigned char sdata,t_bai=0,t_shi=0,t_ge=0,t_feng=0,t_miao=0;

/**********************************************************************************************
函数名称:初始化函数
函数功能:串口初始化函数
说明:
**********************************************************************************************/
void init(void)
{
	TMOD=0x20;			//定时器1工作在方式2
	PCON=0x00;	        //波特率不增倍
	SCON=0x50;			//串行工作方式3			   
	TH1=0xFD;		    //SMOD=0时的初值
	TL1=0xFD;
	TR1=1;
}

/**********************************************************************************************
函数名称:存储函数
函数功能:将温度数据存储在str[]
说明:
**********************************************************************************************/
void save()
{
 
//	str[0]=0xff;
	str[0]=t_shi;
	str[1]=t_ge;
	str[2]=t_feng;
	str[3]=t_miao; 
	 
} 
/**********************************************************************************************
函数名称:发送函数
函数功能:将数组中的温度数据通过串口发送
说明:
**********************************************************************************************/
void send_str()
// 传送字串
{
	uchar i;
	for(i=0;i<4;i++)
	{
		SBUF = str[i];
		while(!TI);				// 等特数据传送
		TI = 0;					// 清除数据传送
	}	
}

/**********************************************************************************************
函数名称:读取温度函数
函数功能:读取DS18B20的转换温度值
说明:
**********************************************************************************************/

void ReadTemperature()               //获取温度源程序
{
 void delay(unsigned int delay_time);
 void DS18B20_init();
 void DS18B20_send(unsigned char out_data);
 uchar DS18B20_read(void);
 unsigned int y=0;
 uchar a=0;
 uchar b=0;
// unsigned char k;
 DS18B20_init();                   //初始化DS18B20
 DS18B20_send (0xcc);
 DS18B20_send (0x44);              //启动温度转换
 delay(125);
 DS18B20_init();       
 DS18B20_send (0xcc);
 DS18B20_send (0xbe);             //读取温度寄存器
 a=DS18B20_read();	               //读取低位
 b=DS18B20_read();		          //读取高位
 //k=b&0X08;
 //if(k==0x08)  T_sign=1;          //温度是负数
 //else T_sign=0;

 	if(b>0x7f)
	{						    
		a=~a;b=~b+1;	          //补码转换,取反加一
		T_sign=1;                //温度为负时flag=0
		 
	}
	sdata=a/16+b*16;
	t_bai=sdata/100;
	t_shi=sdata/10;
	t_ge=sdata%10;
	t_feng=(a&0x0f)*10/16;
	t_miao=(a&0x0f)*100/16%10;
 
} 


/**********************************************************************************************
函数名称:延时函数
函数功能:转换延时和显示延时
说明:LCM1602_Delay()是液晶显示延时,delay()是温度转换延时
**********************************************************************************************/
void delay(unsigned int delay_time) // 延时程序
{
 while(delay_time--);
}

void Delay1(uchar count)
{
	uchar i;
	while(--count!=0)
	   {for(i=0;i<250;i++);}	
}

/**********************************************************************************************
函数名称:初始化函数
函数功能:对DS18B20进行初始化
说明:
**********************************************************************************************/
void DS18B20_init()  //初始化DS18B20
{
unsigned char i=0;
DQ=1;
delay(8);
DQ=0;
delay(85);       //精确延时484 us
DQ=1;
delay(14);        //精确延时34us
i=DQ;
delay(20);
				 
}

/**********************************************************************************************
函数名称:写函数
函数功能:向DS18B20写命令
说明:
**********************************************************************************************/
void DS18B20_send(unsigned char out_data) //主机发送一字节到DS18B20
{
 unsigned char i=0;
 
 for(i=8;i>0;i--)
   {
    DQ=0;
	DQ=out_data&0x01;                     //数据从低位送出
	delay(5);                            //精确延时61us
	DQ=1;
	out_data>>=1;
   }
  delay(4);
}

/**********************************************************************************************
函数名称:读函数
函数功能:从DS18B20读取数据
说明:
**********************************************************************************************/
uchar DS18B20_read(void)//主机从DS18B20中读取一字节
{
 unsigned char i,in_data;
 in_data=0;
 for(i=8;i>0;i--)
    {
	 DQ=1;
	 delay(1);
	 DQ=0;            //给脉冲信号
	 in_data>>=1;
	 DQ=1;           //给脉冲信号
	 if(DQ) 
	   in_data|=0x80;
	 delay(4);
	}
 return(in_data);
}

/**********************************************************************************************
函数名称:显示函数
函数功能:显示函数
说明:
**********************************************************************************************/
void display()
{
	    P1=0xfe;
		P0=tab[t_shi];
		Delay1(4);
		P1=0xfd;
		P0=tab[t_ge]|0x80;
		Delay1(4);
		P1=0xfb;
		P0=tab[t_feng];
		Delay1(4);
		P1=0xf7;
		P0=tab[t_miao];
		Delay1(4);
		P1=P2|0x0f;
		P0=0x00;
}


/**********************************************************************************************
函数名称:主函数
函数功能:主函数
说明:
**********************************************************************************************/
void main()
{
    int i,j;
//	P1=0x00;
//	P0=0x00;
	EA=1;
	ES=1;
	init();
	while(1)
	{
		ReadTemperature();
		display();
		save();
		if(P3_2==0)
		{
			for(i=0;i<2;i++)
			for(j=200;j>0;j--);
			if(P3_2==0)
			{	
				send_str();
				while(P3_2==0);
			}

		}
	}
}
      
     

⌨️ 快捷键说明

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