更新时间:2016-10-19 17:52:30人气:843
#include 51.H>
#include //信号端定义
#define jump_ROM 0xCC //跳过ROM命令
#define start 0x44 //启动转换命令
#define read_EEROM 0xBE
sbit lcde="P2^7;sbit rw="P2^6;sbit rs="P2^5; sbit DQ="P1^0; " //读存储器命令
unsigned char TMPH,TMPL; //温度值
unsigned int ds18b20_temp,ds_temp;
void get_temp(void);
void delayms(unsigned int t) /*1MS左右*/
{
while (t!=0)
{
unsigned int i;
for(i="0;i<123;i++);t--;
}
}
void delay(unsigned int N)
{
int i;
for(i="0;i}
void lcdwcom(unsigned char com)//写命令函数
{
rs="0;rw="0;P0=com;
delayms(5);
lcde="1;delayms(5);
lcde="0;}
void lcdwdate(unsigned char date)//写数据函数
{
rs="1;rw="0;P0=date;
delayms(5);
lcde="1;delayms(5);
lcde="0;}
void lcdinit()//液晶初始化函数
{
lcde="0;lcdwcom(0x38);
lcdwcom(0x08);
lcdwcom(0x01);
lcdwcom(0x06);
lcdwcom(0x0c);
lcdwcom(0x80+0x4);
}
//--------------------
// 函数名称: Reset
// 入口参数: 无
// 返回deceive_ready
// 函数功能:复位
//--------------------
unsigned char Reset(void)
{
unsigned char deceive_ready;
delay(10);
DQ="0; " //拉低DQ线
delay(29); //延时至少480us~960us
DQ="1; " //将DQ线设置位逻辑高
delay(3); //延时等待deceive_ready响应
deceive_ready="DQ; " //采样deceive_ready信号
delay(25); //等待时序结束
return(deceive_ready); //有deceive_ready信号时返回0,否则返回1
}
//---------------------------
// 函数名称:read_bit
// 入口参数: 无
// 返回接收的数据
// 函数功能:读一个bit子程序
//---------------------------
unsigned char read_bit(void)
{
unsigned char i;
DQ="0; " //拉低DQ线开始时序
DQ="1; " //升高DQ线
for(i="0;i<3;i++); " //延时至时序开始15us
return(DQ); //返回DQ值
}
//---------------------------
// 函数名称: write_bit
// 入口参数: bitval
// 函数功能:写一个bit子程序
//---------------------------
void write_bit(unsigned char bitval)
{
DQ="0; " //拉低DQ线开始时序
if(bitval="=1)DQ="1; " //如果写逻辑为高
delay(5); //延时
DQ="1; " //升高DQ线
}
//----------------------------
// 函数名称: write_byte
// 入口参数: val
// 函数功能:写一个byte子程序
//----------------------------
void write_byte(unsigned char val)
{
unsigned char i,temp;
for(i="0;i<8;i++){
temp="val">>i; //将val位右移i位赋值给比temp
temp="temp&0x01; " //取temp最低位
write_bit(temp);
delay(5); //延时至时序结束
}
}
//----------------------------
// 函数名称: read_byte
// 返回接收的数据 value
// 函数功能:读一个byte子程序
//----------------------------
unsigned char read_byte(void)
{
unsigned char i,m,receive_da
m="1;receive_data="0; " //初始化
for(i="0;i<8;i++){
if(read_bit())
{
receive_da
delay(6); //延时至时序结束
}
return(receive_da
}
//---------------------------
// 函数名称: get_temp
// 返回接收的数据 TMPL, TMPH
// 函数功能:取出温度值ds_temp
//---------------------------
void get_temp(void)
{
Reset();
write_byte(jump_ROM); //发跳过ROM命令
write_byte(start); //发启动转换命令
//delay(1000);
Reset();
write_byte(jump_ROM); //发跳过ROM命令
write_byte(read_EEROM); //发跳过ROM命令
TMPL="read_byte(); " //读低8位温度值
TMPH="read_byte(); " //读高8位温度值
ds18b20_temp = TMPH<< 8;
ds18b20_temp |=TMPL;
ds_temp="ds18b20_temp*0.0625;}
PREVIOUS数控机床对传感器的使用有什么要求?
【中国机床商务网 读者问答】由于高精度、高速度、高效率及安全可靠的特点,在制造业技术设备更新中,数控机床正迅速地在企业得到普及。数控机床是一种装有程序控制系统的自动化机床,能够根据已编好的程序,使机床动作并加工零件。读者:数控机床综合了机械、自动化、计算机、...
广泛应用于传感器的电流输入型前置放大器电路及工作原理NEXT
本放大器又称电流-电压转换器,是OP放大器的有效应用实例,由于本电路反相输入端是作为假设地而工作的,可以作为输入电阻极低的电流测量,也可作为各种传感器的前置放大器使用。在本电路输出端增加一个模拟表头,把输入电流转换成电压。则可构成高灵敏度的电流计。电路工作原...