
你把倒数第三行改为
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])
}
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)