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

基于51单片机及DS18B20温度传感器的数字温度计设计

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

/**************************定时器1初始化函数***************************/ void timer1_init(bit t) {

TMOD=0x10; TH0=0x3c; TL0=0xb0; EA=1;

ET1=1; TR1=t; }

/**************************定时器1中断函数*****************************/ void timer1() interrupt 3 {

TH0=0x3c; TL0=0xb0; }

/*********************调整报警上下限显示选择函数**********************/ void selsct_1(uchar f,uchar k) {

if(f==0) }

void selsct_2(bit f,uchar k)

//消除十位的0显示,及正负温度的显示选择

{ } if(f==1) {

if(k0/10==0) P0=temperature3[0]; else P0=temperature3[2]; }

//若为负温度,若十位为0,百位不显示,否则百位显示‘-’

if(k/100==0) P0=temperature3[0]; else P0=temperature1[k/100];

//若为正温度,百位为0则不显示百位,不为0则显示 //消除百位的0显示,及正负温度的显示选择

num++;

//每进入一次定时器中断num加1(每50ms加1一次)

if(num<5)

{s=1;if(w==1){beer=1;led=1;}else{beer=1;led=1;}}

Else //进入4次中断,定时200ms时若报警标志位w为‘1’则启动报警,不为‘1’不启动

//实现间歇性报警功能 //进入20次中断,定时1s //num归0,重新定开始定时1s

{s=0;if(w==1){beer=0;led=0;}else{beer=1;led=1;}} if(num>20) num=0; s1=0; v1=1;

//重新赋初值,定时50ms

//设定定时器1工作在方式1,最大定时65.53ms //定时器赋初值,定时50ms

//开总中断 //开定时器1中断

// 局部变量t为1启动定时器1,为0关闭定时器1

{

//定时1s时间到时自动关闭报警上下限显示功能 //定时1s时间到时自动关闭报警上下限查看功能

}

{

if(f==0) }

/****************************主显示函数********************************/ void display(uchar t,uchar t_d) {

uchar i; for(i=0;i<4;i++) {

switch(i)

{ case 0:

if(a==1) { } if(a==2) { }

//关第二个数码管 //关第三个数码管 //关第四个数码管 //开第一个数码管

P0=temperature3[4]; //若a=2则在第一个数码管上显示‘L’ wei2=0; wei3=0; wei4=0; break;

//选通第二个数码管

if(a==0){selsct_2(f,t);} //若a=0则在第二个数码管上显示测量温度的十位或‘-’ if(a==1) {

if(s==0) selsct_1(f_max,max);//若s=0则显示第二个数码管,否则不显示 else P0=temperature3[0];

//通过s标志位的变化实现调节上下限报警温度时数码管的

//若a=1则在第二个数码管上显示上限报警温度的百位或‘-’

P0=temperature3[3]; //若a=1则在第一个数码管上显示‘H’

//选通第一个数码管

if(a==0){selsct_1(f,t);} //若a=0则在第一个数码管上显示测量温度的百位或‘-’

//依次从左至右选通数码管显示,实现动态显示 //用于实测温度、上限温度的显示

//若为正温度,百位十位均为0则不显示十位,否则显示十位

{ if((k/100==0)&&(k0/10==0)) P0=temperature3[0];

else P0=temperature1[k0/10]; } if(f==1)

//若为负温度,若十位为0,十位不显示,否则十位显示‘-’

{ if(k0/10==0) P0=temperature3[2];

else P0=temperature1[k0/10];

}

wei1=1; case 1:

闪烁

if(s1==1) selsct_1(f_max,max);//若s1=1则显示第二个数码管(s1标志位用于上下限查看时的 } if(a==2) {

if(s==0) selsct_1(f_min,min); else P0=temperature3[0]; if(s1==1) selsct_1(f_min,min); }

//选通第三个数码管

wei1=0; wei3=0; wei4=0; wei2=1; break;

if(a==0){P0=temperature2[t];}//若a=0则在第三个数码管上显示测量温度的个位 if(a==1) {

if(s==0) selsct_2(f_max,max);//若s=0则显示第三个数码管,否则不显示 } if(a==2) {

if(s==0) selsct_2(f_min,min);

else P0=temperature3[0]; if(s1==1) selsct_2(f_min,min);

//若a=2则在第三个数码管上显示下限报警温度的十位或‘-’

else P0=temperature3[0];

if(s1==1) selsct_2(f_max,max);//若s1=1则显示第三个数码管

//若a=1则在第三个数码管上显示上限报警温度的十位或‘-’

//若a=2则在第二个数码管上显示下限报警温度的百位或‘-’

显示)

case 2:

}

wei1=0; wei2=0; wei4=0; wei3=1; break;

//选通第四个数码管

//若a=1则在第四个数码管上显示上限报警温度的个位

if(a==0){P0=temperature1[t_d];}//若a=0则在第四个数码管上显示测量温度的小数位 if(a==1) {

if(s==0) P0=temperature1[max];//若s=0则显示第四个数码管,否则不显示 } if(a==2) {

if(s==0) P0=temperature1[min];

else P0=temperature3[0];

if(s1==1) P0=temperature1[min];

wei3=0; wei4=1; break;

//若a=2则在第四个数码管上显示下限报警温度的个位

else P0=temperature3[0];

if(s1==1) P0=temperature1[max];//若s1=1则显示第四个数码管

case 3:

}

wei1=0; wei2=0;

}

}

display_delay(3); //每个数码管显示3ms左右 }

/****************************开机显示函数******************************/ void display1(uint z) {

uchar i,j; bit f=0; for(i=0;i

for(j=0;j<4;j++) {

switch(j) }

{

case 0:P0=temperature3[2];//第一个数码管显示 wei2=0; wei3=0; wei4=0; wei1=1; break; case 1:P0=temperature3[2];//第二个数码管显示

wei1=0; wei3=0; wei4=0; wei2=1; break; case 2:P0=temperature3[2];//第三个数码管显示 wei1=0; wei2=0; wei4=0; wei3=1; break; case 3:P0=temperature3[2];//第四个数码管显示 wei1=0; wei2=0;

wei3=0; wei4=1; break;

//依次从左至右显示‘-’

//‘z’是显示遍数的设定

//用于开机动画的显示

}

display_delay(200); //每个数码管显示200ms左右

}

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