这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 温度数字温度计!

共6条 1/1 1 跳转至

温度数字温度计!

菜鸟
2011-12-28 13:13:42     打赏

数字温度计!现先将视频贴上。



#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制作学习到此告一段落!这个寒假我还会继续做下去,希望大家能够多多支持!




关键词: 温度     数字     温度计     unsigned    

菜鸟
2011-12-28 13:47:26     打赏
2楼

助工
2011-12-28 13:53:38     打赏
3楼
这代码还挺眼熟!
弄一个帖子就够了吧,然后再慢慢更新上去!

专家
2011-12-28 19:14:59     打赏
4楼
就一个么?

菜鸟
2011-12-28 22:32:19     打赏
5楼
一个视频就对应一个程序!前面的帖子里也有!

菜鸟
2011-12-28 22:36:43     打赏
6楼

楼主见过的。只是刚刚调试出来而已,现在先告一段落,放寒假再学习!


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]