这个51单片机数码管显示温度程序

这个51单片机数码管显示温度程序,第1张

你把倒数第三行改为

dsxianshi(get_temp())

试试看?你现在这样不会启动18b20采集温度,全局变量temp得不到温度值。

另外,这种用全局变量传值的玩法很不好看,能不用就不要用。

另外2, 全局变量和局部变量或函数参数同名字也不是好玩法。

#include<reg52.h>

#include<ds1820.h>

#include"disp.h"

#define date P0

//各数据口定义

sbit disp1=P2^7

sbit disp2=P2^6

sbit disp3=P2^5

sbit disp4=P2^4

sbit key1=P1^4

sbit key2=P1^5

sbit key3=P1^6

sbit beerr=P3^7

sbit jdx=P3^4

sbit dj=P3^5

unsigned char disp[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc7,0x89} //数码管显示内码

unsigned char disptemp[4]={0,2,1,4}

unsigned char dispnum=0

char THtem=0,TLtem=0

float temtemp/****************************************************************

延时程序

*****************************************************************/

delay(unsigned int ms)

{

unsigned char i

while(--ms)

for(i=0i<200i++)}

/**************************************************************

读取温度后显示程序

***************************************************************/

display()

{

date=disp[disptemp[0]]

disp1=0

disp2=1

disp3=1

disp4=1

delay(3)

date=disp[disptemp[1]]&0x7f

disp1=1

disp2=0

disp3=1

disp4=1

delay(3)

date=disp[disptemp[2]]

disp1=1

disp2=1

disp3=0

disp4=1

delay(3)

date=disp[disptemp[3]]

disp1=1

disp2=1

disp3=1

disp4=0

delay(3)

}/**************************************************************

读取温度后显示程序

***************************************************************/

display2()

{

date=disp[disptemp[0]]

disp1=0

disp2=1

disp3=1

disp4=1

delay(3)

date=disp[disptemp[1]]&0x7f

disp1=1

disp2=0

disp3=1

disp4=1

delay(3)

date=disp[disptemp[2]]

disp1=1

disp2=1

disp3=0

disp4=1

delay(3)

date=0xc7

disp1=1

disp2=1

disp3=1

disp4=0

delay(3)

}

/**************************************************************

读取温度后显示程序

***************************************************************/

display3()

{

date=disp[disptemp[0]]

disp1=0

disp2=1

disp3=1

disp4=1

delay(3)

date=disp[disptemp[1]]&0x7f

disp1=1

disp2=0

disp3=1

disp4=1

delay(3)

date=disp[disptemp[2]]

disp1=1

disp2=1

disp3=0

disp4=1

delay(3)

date=0x89

disp1=1

disp2=1

disp3=1

disp4=0

delay(3)

}

/***************************************************************

设置上下限时的温度显示程序

****************************************************************/

display1(dat1,dat2,dat3,dat4)

{

date=dat1

disp1=0 //第一位数码管显示

disp2=1

disp3=1

disp4=1

delay(3)

date=dat2

disp1=1

disp2=0//第二位数码管显示

disp3=1

disp4=1

delay(3)

date=dat3

disp1=1

disp2=1 //第三位数码管显示

disp3=0

disp4=1

delay(3)

date=dat4

disp1=1

disp2=1

disp3=1

disp4=0 //第四位数码管显示

delay(3)

}

/*********************************************************

***************蜂鸣器*************************************

**********************************************************/

void beer()

{

unsigned char i

beerr=!beerr

for(i=0i<60i++)

}

/********************************************************

主程序

*********************************************************/

main()

{

bit i=0

delay(1000) //开机延时

ReadTHTLTemperature(&TLtem,&THtem) //从DS18B20里读取温度上下限度

while(1){

if(key3==0){

delay(10)

if(key3==0){

dispnum++

if(dispnum>=3)

dispnum=0

P2=0XFF

while(key3==0)beer()

WriteTHTLTemperature(&TLtem,&THtem) //当设置完温度上下限后写入DS18B20

}

}

if(key1==0){

delay(10)

if(key1==0){ if(dispnum==3||dispnum==4)

dispnum=0

if(dispnum==1){ //设置温度加

THtem++

if(THtem>=100)

THtem=0

} if(dispnum==2){

TLtem++

if(TLtem>=100)

TLtem=0

}P2=0XFF

while(key1==0)beer()

}

}

if(key2==0){

delay(10)

if(key2==0){ i=!iif(dispnum==3&&i==0)

dispnum=4

if((dispnum==0||dispnum==4)&&i==1)

dispnum=3

if(dispnum==1){

THtem--

if(THtem<=0) //设置温度减

THtem=99

} if(dispnum==2){

TLtem--

if(TLtem<=0)

TLtem=99

}

P2=0XFF

while(key2==0)beer()

}

}

if(dispnum==0){//只显示温度状态

temtemp=ReadTemperature()

if((temtemp>TLtem)&&(temtemp<THtem))

{

display()

}

temp_data_turn(temtemp)

if((temtemp>TLtem)&&(temtemp<THtem))

{

display()

jdx=0

dj=0

}

// display()

if(temtemp<TLtem)

{

jdx=1

dj=0

display2()

} //

if(temtemp>THtem)

{

jdx=0

dj=1

display3()

} //

}

if(dispnum==1||dispnum==4){ //数码管显示设置上限温度 display1(0xf8,0x89,disp[THtem/10],disp[THtem%10]) }

if(dispnum==2||dispnum==3){ //数码管显示设置下限温度

display1(0xf8,0xc7,disp[TLtem/10],disp[TLtem%10])

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/yw/12193829.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存