微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 多功能智能控制器

多功能智能控制器

时间:11-18 来源:互联网 点击:

******************************************

函 数 名:void Ow_Reset()

功 能:DS18B20复位

说 明:DS18B20使用时先要复位

入口参数:无

返 回 值:

*****************************************************/

void Ow_Reset()

{

DQ = 1; // DQ复位

Delay_DS(4); // 延时

DQ = 0; // DQ拉低

Delay_DS(100); // 精确延时大于480us

DQ = 1; // 拉高

Delay_DS(40);

}

/*****************************************************

函 数 名:uchar Read_byte()

功 能:从 1-wire 总线上读取一个字节

说 明:读总线上的数据有严格的时序

入口参数:

返 回 值:value

*****************************************************/

uchar Read_byte()

{

uchar i=0;

uchar value = 0;

for (i=8;i>0;i--)

{

DQ = 0; // 给脉冲信号

value>>=1;

DQ = 1; // 给脉冲信号

if(DQ)

value|=0x80;

Delay_DS(10);

}

return(value);

}

/*****************************************************

函 数 名:void Write_Byte()

功 能:向 1-WIRE 总线上写一个字节

说 明:写总线上的数据有严格的时序

入口参数:val

返 回 值:无

*****************************************************/

void Write_Byte(uchar val)

{

uchar i=0;

for (i=8; i>0; i--)

{

DQ = 0;

DQ = val&0x01;

Delay_DS(10);

DQ = 1;

val>>=1;

}

}

/*****************************************************

函 数 名:void Read_Temperature()

功 能:读温度并放入显示数组中

说 明:

入口参数:xx,yy

返 回 值:无

*****************************************************/

void Read_Temperature()

{

uchar a,b;

uchar tflag; // 温度正负标志

uint tvalue; // 温度值

Ow_Reset();

Write_Byte(0xcc); // 跳过读序列号*

Write_Byte(0x44); // 启动温度转换

Ow_Reset();

Write_Byte(0xcc); // 跳过读序列号

Write_Byte(0xbe); // 读取温度

a=Read_byte(); // 读出温度低8位

b=Read_byte(); // 读出温度高8位

tvalue=b;

tvalue<=8;

tvalue=tvalue|a;

if(tvalue<0x0fff)

tflag=0;

else

{

tvalue=~tvalue+1;

tflag=1;

}

tvalue=tvalue*(0.625); // 温度值扩大10倍,精确到1位小数

Tp[2]=tvalue%1000/100+0x30; // 十位数

Tp[3]=tvalue%100/10+0x30; // 个位数

Tp[4]=0x2e; // 显示小数点

Tp[5]=tvalue%10+0x30; // 显示温度小数位

Tp[6]=0x01; // 显示自定义字符

Tp[7]=0x43; // 显示字符"C"

if(tflag==0)

Tp[1]=0x20; // 正温度不显示符号

else

Tp[1]=0x2d; // 负温度显示负号:-

if(Tp[2]==0x30)

{

Tp[2]=0x20; // 如果十位为0,不显示

}

}

/*****************************************************

函 数 名:void Adjust_Res()

功 能:温度分辨率调整

说 明:此函数可以对温度的显示进行精度调节.

入口参数:res

返 回 值:无

*****************************************************/

void Adjust_Res(char res) // res 分别等于 0x1f, 0x3f, 0x5f 温度读数分辨率分别对应

// 0.5, 0.25, 0.125

{

Ow_Reset(); // 复位

Write_Byte(0xcc); // 跳过Rom

Write_Byte(0x4e); // 写暂存器

Write_Byte(0x02); // 写TH

Write_Byte(0x01); // 写TL

Write_Byte(res); // 温度转换分辨率设置

Ow_Reset(); // 复位

Write_Byte(0xcc); // 跳过Rom

Write_Byte(0x48); // 把暂存器内容写到EPRam中

}

#endif

3.红外部分:

/*--------------------------------------------------------------------------

IR.H

The user function is C51.

Copyright (c) 1988-2004 Keil Elektronik GmbH sum zhaojun

All rights reserved.

--------------------------------------------------------------------------*/

#ifndef __IR_H__

#define __IR_H__

#define uchar unsigned char

#define uint unsigned int

#define IRIN P3_2 // 红外引脚

#define BEEP P3_7 // 蜂鸣器引脚

uchar IRCOM[4]; // IRCOM[0]和IRCOM[1]存放用户编码;IRCOM[2]键值码暂存

// IRCOM[3]键值反码存放.

/*======================================== 红外解码部分 ======================================================*/

/*****************************************************

函 数 名:void DelayIR(uchar number)

功 能:延时程序

说 明:对红外信号进行解码时的时间比较

入口参数:无

返 回 值:无

*****************************************************/

void DelayIR(uchar number)//number*0.14MS

{

uchar i;

while(number--)

{

for(i=13;i>0;i--);

}

}

/*******************

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top