云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 基于51单片机及DS18B20温度传感器的数字温度计设计

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

  • 62 次阅读
  • 3 次下载
  • 2025/6/3 21:13:08

/**************************定时器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左右

}

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

/**************************定时器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; } /*********************调整报警上下限显示选择函数***************

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com