数字温度计!现先将视频贴上。
#include <reg52.h>
#include<intrins.h>
#define DQ P1_3 //定义DS18B20数据端口DQ
#define dis_data P0 //定义数码管段码输入管脚
#define dis_E P3_7 //定义74HC573使能管脚LE
#define dis_bit P2 //定义74HC138输入管脚A0 A1 A2
/****P3.2和P3.3为调整温度报警增加键和减少键******/
signed char shangxian=38; //上限报警温度,默认值为38
uchar code LEDData[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x39,0x63,0x40,0x00};
//0 1 2 3 4 5 6 7 8 9 C 口 - 关
/*****延时子程序*****/
void Delay(uint i)
{
while( i-- );
}
/*****初始化DS18B20*****/
void Init_DS18B20(void)
{
unsigned char x=0;
DQ=1;
Delay(8); //稍做延时
DQ=0; //单片机将DQ拉低
Delay(80); //精确延时,大于480us
DQ=1; //拉高总线
Delay(14);
x=DQ; //稍做延时后,如果x=0则初始化成功,x=1则初始化失败
Delay(20);
}
/*****读一个字节*****/
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat=0;
for (i=8;i>0;i--)
{
DQ=0; // 给脉冲信号
dat>>=1;
DQ=1; // 给脉冲信号
if(DQ)
dat|=0x80;
Delay(4);
}
return(dat);
}
/*****写一个字节*****/
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ=0;
DQ=dat&0x01;
Delay(5);
DQ=1;
dat>>=1;
}
}
void Tmpchange(void) //发送温度转换命令
{
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0x44); //启动温度转换
}
/*****读取温度*****/
unsigned int ReadTemperature(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;
Tmpchange();
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器
a=ReadOneChar(); //读低8位
b=ReadOneChar(); //读高8位
。
。
。
。
。
。
************************************
/*****显示开机初始化等待画面*****/
Disp_init()
{
。。
。
。。
。。。
}
/*****显示温度子程序*****/
Disp_Temperature() //显示温度
{
。。
。。
。
。
。
。
。
。。
。。。。
。
。。。;(注:再这里可精确到小数点后四位。)
}
/*****外部中断0服务程序*****/
void int0(void) interrupt 0
{
EX0=0; //关外部中断0
sign=1;
if(SET==1) shangxian++;
else xiaxian++;
Delay(500);
EX0=1;
}
/*****外部中断1服务程序*****/
void int1(void) interrupt 2
{
EX1=0; //关外部中断0
sign=1;
if(SET==1) shangxian--;
else xiaxian--;
Delay(500);
EX1=1;
}
/*****主函数*****/
void main(void)
{
uint z;
IT0=1;
IT1=1;
EX0=1;
EX1=1;
EA=1;
ReadTemperature();
LING=0;
for(z=0;z<100;z++)
{
Disp_init();
}
while(1)
{
Disp_Temperature();
if(sign==1)
{
for(z=0;z<300;z++)
disptiaozheng();
sign=0;
}
}
}
现在期末考到了,这个视频作为今年最后一个视频,其中省略若干步,有兴趣的可以自己改编!。DIY制作学习到此告一段落!这个寒假我还会继续做下去,希望大家能够多多支持!