基于DS18B20数字温度计设计报告正文 - 图文(7)

2020-04-14 23:16

西华大学电气信息学院智能化电子系统设计报告 11 附录二:基于DS18B20数字温度计的设计PCB图

第 24 页

西华大学电气信息学院智能化电子系统设计报告

12 附录三:基于DS18B20数字温度计的设计的实物图

实际 实际测得温度

报警上限值

报警下限值

第 25 页

西华大学电气信息学院智能化电子系统设计报告 13 附录四:基于DS18B20数字温度计的设计C语言程序

#include //****************************** #include //Keil library void set_ds18b20() #include //Keil library { #include while(1) #define uchar unsigned char { #define uint unsigned int uchar delay,flag; #define display1 0xfe flag=0; //数码管1从左至右 #define display2 0xfd DQ=1; //数码管2从左至右 #define display3 0xfb delay=1; //数码管3从左至右 #define display4 0xf7 //数码管while(--delay); 4从左至右 #define display5 0xef DQ=0; //数码管5从左至右 #define display6 0xdf delay=250; //数码管6从左至右 #define display7 0xbf while(--delay); //数码管7从左至右 #define display8 0x7f //数码管8DQ=1; 从左至右 sbit DQ=P3^6; delay=30; //根据实实际情况设定 sbit setth=P1^0; //设定 th while(--delay); sbit up=P1^1; //加 while(DQ==0) sbit down=P3^2; //减 { sbit beep= P3^3; delay=210; //根据实实际情况设定 uchar tempint,f,bb,tempth,settem while(--delay); //温度整数部分和小数部分 int tempdf,c; if(DQ) code unsigned char {

ledmap[]={0xc0,0xf9,0xa4,0xb0,0x99, flag=1; 0x92,0x82,0xf8,0x80,0x90,0xbf}; break;

code unsigned char } ledmap1[]={0x40,0x79,0x24,0x30, } 0x19,0x12,0x02,0x78,0x00,0x10}; if(flag)

void set_ds18b20(); {

//初始化DS18B20子程序 delay=240;

void get_temperature(); while(--delay);

//获得温度子程序 break; void read_ds18b20(); }

//读DS18B20子程序 } void write_ds18b20(uchar command); }

//向DS18B20写1字节子程序 //******获得温度子程序********** void delayms(uchar count); //******************************

//延时count毫秒子程序 void get_temperature() void disp_temp(tempint,tempdf); {

//显示温度子程序 set_ds18b20(); //*****初始化DS18B20子程序****** write_ds18b20(0xcc);

第 26 页

西华大学电气信息学院智能化电子系统设计报告 write_ds18b20(0x44); f=0; disp_temp(tempint,tempdf); if((temph & 0xf8)!=0x00) set_ds18b20(); //若温度为负的处理 write_ds18b20(0xcc); { write_ds18b20(0xbe); f=1;

//发出读温度命令 temph=~temph;

read_ds18b20(); templ=~templ; } templ=k; //*****读DS18B20子程序********** if(k>255) //****************************** { void read_ds18b20() temph++; { } uchar } delay,i,j,k,temp,temph,templ; tempdf=templ & 0x0f;

float wendu; c=(tempdf*625); j=4; tempdf=c; do templ>>=4; // { temph<<=4; for(i=8;i>0;i--) tempint=temph|templ; { if

temp>>=1; (tempint>th|tempint==th|tempint

//延时8us //******************************

if(DQ) void write_ds18b20(uchar command) temp|=0x80; { delay=25; uchar delay,i; while(--delay); for(i=8;i>0;i--) } { if(j==4) DQ=0; templ=temp; delay=6; if(j==3) //延时12us temph=temp; while(--delay); if(j==2) DQ=command&0x01; tempth=temp; delay=25; if(j==1) //延时50us temptl=temp; while(--delay); }while(--j); command=command>>1;

第 27 页

西华大学电气信息学院智能化电子系统设计报告 DQ=1; if (f==0) } { } P0=display1; //*******显示子程序************ P2=ledmap[0]; //****************************** } void disp_temp( tempint,tempdf) else { { uchar P0=display1; tempinth,tempintl,tempinbai,shifen,b//符号位 aifen,gefen,qianfen; P2=ledmap[10];

if (bb==1) } { delayms(2); tempinbai=th/100; P0=display2; tempinth=(th0)/10;

tempintl=th; P2=ledmap[tempinbai];//开百位

gefen=0/1000; delayms(2); shifen=000/100; P0=display3; baifen =00/10; P2=ledmap[tempinth];//开十位 qianfen=0; delayms(2); } P0=display4; else P2=ledmap1[tempintl];//开个位

if(bb==2) delayms(2);

{ P0=display5;

tempinbai=tl/100; P2=ledmap[gefen];//开个分位

tempinth=(tl0)/10; delayms(2); tempintl=tl; P0=display6; gefen=0/1000; P2=ledmap[shifen]; //开十分位 shifen=000/100; delayms(2); baifen =00/10; P0=display7; qianfen=0; P2=ledmap[baifen]; //开百分位 } delayms(2); else P0=display8; { P2=ledmap[qianfen];//开千分位 tempinbai=tempint/100; } //*********沿时子程序***********

tempinth=(tempint0)/10; //****************************** tempintl=tempint; void delayms(uchar count) gefen=tempdf/1000; //延时count ms子程序 shifen=tempdf00/100; { baifen =tempdf0/10; uchar i,j; qianfen=tempdf; do } {

第 28 页


基于DS18B20数字温度计设计报告正文 - 图文(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:图形变换复习讲义

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: