多功能智能控制器
******************************************
函 数 名: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--);
}
}
/*******************
多功能智能控制 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)