第一范文网 - 专业文章范例文档资料分享平台

单片机原理及应用课程设计八路温度巡回检测系统

来源:用户分享 时间:2025/11/9 12:41:36 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

delay(6); //66 us

presence=DQ; //presence=0 复位成功,继续下一步 }

delay(45); //延时500 us presence=~DQ; }

DQ=1; //拉高电平 }

/****************DS18B20写命令函数************************/ //向1-WIRE 总线上写1个字节 void write_byte(uchar val) {

uchar i;

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

DQ=1;_nop_();_nop_(); //从高拉倒低 DQ=0;_nop_();_nop_();_nop_();_nop_(); //5 us DQ=val&0x01; //最低位移出 delay(6); //66 us val=val/2; //右移1位 } DQ=1; delay(1); }

/****************DS18B20读1字节函数************************/ //从总线上取1个字节 uchar read_byte(void)

28 / 32

{ uchar i; uchar value=0; for(i=8;i>0;i--) {

DQ=1;_nop_();_nop_(); value>>=1;

DQ=0;_nop_();_nop_();_nop_();_nop_(); //4 us DQ=1;_nop_();_nop_();_nop_();_nop_(); //4 us if(DQ)value|=0x80;

delay(6); //66 us } DQ=1;

return(value); } //

/****************读出温度函数************************/ //

read_temp() {

ow_reset(); //总线复位 delay(200);

write_byte(0xcc); //发命令 write_byte(0x44); //发转换命令 ow_reset(); delay(1);

write_byte(0xcc); //发命令 write_byte(0xbe);

temp_data[0]=read_byte(); //读温度值的低字节

29 / 32

temp_data[1]=read_byte(); //读温度值的高字节 temp=temp_data[1];

temp<<=8; temp=temp|temp_data[0]; // 两字节合成一个整型变量。 return temp; //返回温度值 } //

/****************温度数据处理函数************************/

//二进制高字节的低半字节和低字节的高半字节组成一字节,这个 //字节的二进制转换为十进制后,就是温度值的百、十、个位值,而剩 //下的低字节的低半字节转化成十进制后,就是温度值的小数部分

/********************************************************/ work_temp(uint tem) {

uchar n=0;

if(tem>6348) // 温度值正负判断

{tem=65536-tem;n=1;} // 负温度求补码,标志位置1 display[4]=tem&0x0f; // 取小数部分的值 display[0]=ditab[display[4]]; // 存入小数部分显示值

display[4]=tem>>4; // 取中间八位,即整数部分的值 display[3]=display[4]/100; // 取百位数据暂存 display[1]=display[4]0; // 取后两位数据暂存 display[2]=display[1]/10; // 取十位数据暂存 display[1]=display[1];

/******************符号位显示判断**************************/ if(!display[3]) {

30 / 32

display[3]=0x0a; //最高位为0时不显示 if(!display[2]) {

display[2]=0x0a; //次高位为0时不显示 } }

if(n){display[3]=0x0b;} //负温度时最高位显示\}

/****************主函数************************/ main() {

Disdata=0xff; //初始化端口 discan=0xff;

for(h=0;h<4;h++) //开机显示\ {display[h]=0;}

ow_reset(); //开机先转换一次 write_byte(0xcc); //Skip ROM write_byte(0x44); //发转换命令 for(h=0;h<100;h++) //开机显示\ {scan();} while(1) {

work_temp(read_temp()); //处理温度数据 scan(); //显示温度值 } }

//***********************结束**************************//

31 / 32

单片机原理及应用课程设计八路温度巡回检测系统.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c59d4t3lpq903ypi6bk157e16g2f4sy00oqx_8.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top