基于单片机的温度传感器18b20的C语言程序

发布者:光明2599最新更新时间:2018-08-26 来源: eefocus关键字:单片机的  温度传感器  18b20 手机看文章 扫描二维码
随时随地手机看文章

代码是在12M的晶振的晶振下调试出来的,希望可以给大家带来参考价值

 

#include        //51芯片管脚定义头文件
#include   //内部包含延时函数 _nop_();
#include

#define uchar unsigned char
#define uint  unsigned int
uchar Flag=0;  //定义一个全局的标志位
uchar Feng=0;
sbit  ds= P3^1;        //接18B20
void delay(uint t)
{                           
   uint k;
   while(t--)
   {
     for(k=0; k<12; k++)
     { }
   }
}
void dsreset(void)//初始化函数
{
 uint i;
 ds=0;
 i=97;
 while(i>0)
 i--;
 ds=1;
 i=4;
 while(i>0)
 i--;
}
bit tempreadbit(void) //读一个字节
{
 uint i;
 bit  dat;
 ds=0;
 i++;
 ds=1;
 i++;  //i++起延时作用
 i++;
 dat=ds;
 i=8;
 while(i>0)
 i--;
 return(dat);
}
uchar tempread(void)//读一个数据
{
 uchar i=8,dat=0;
 bit j;
 for(i=1;i<=8;i++)
        {
            dat=dat>>1;
            j=tempreadbit();
            if(j==1)
            dat=dat|(0x80);
        }
 return(dat);
}
void tempwritebyte(uchar dat)//写一个字节
{
 uint  i;
 uchar j;
 bit   testb;
 for(j=1;j<=8;j++)
 {
  testb=dat&(0x01);
  dat=dat>>1;
  if(testb)
  {
   ds=0;
   i++;
   i++;
   ds=1;
   i=8;
   while(i>0)
   i--;
  }
  else
  {
   ds=0;
   i=8;
   while(i>0)
   i--;
   ds=1;
   i++;
   i++;
  }
 } 
}
void tempchange(void)
{   
 dsreset();
 delay(1);
    tempwritebyte(0xcc); //写跳过读rom
 tempwritebyte(0x44); //写温度转换
}
float get_temp()
{
 uchar a;
 uint b;
 float Read_Value;
 dsreset();
 
    //tempwritebyte(0xcc); //写跳过读rom
 //tempwritebyte(0x44); //写温度转换
  delay(10);
 //dsreset();
 tempwritebyte(0xcc);//写跳过读ROM
 tempwritebyte(0xbe);//读暂存器

 a = tempread();
 b = tempread();
 b = (b << 8) + a;
 Read_Value = b *0.0625;
// delay(1000);
 return(Read_Value);
}
void Display1()     //显示温度
{
    int temp,temp1;
    temp=get_temp();
 temp1 = temp*100; 
 P1 = 0x80|(temp1/1000);
 delay(10);
 P1 = 0x40|(temp1%1000/100);
  delay(10);
 P1 = 0x20|(temp1%1000%100/10);
  delay(10);
 P1 = 0x10|(temp1%1000%100%10);

 }
main()
{while(1)
 {  
       
         tempchange(); 
      Display1();    //显示温度
       
      

}


关键字:单片机的  温度传感器  18b20 引用地址:基于单片机的温度传感器18b20的C语言程序

上一篇:基于51单片机及DS18B20温度传感器数码管显示程序
下一篇:STC89C52MCU -- 双机通信及多机通信

推荐阅读最新更新时间:2024-03-16 16:12

单片机状态机框架编写
在单片机裸机的编程方法中,状态机的方法是比较好的,经典的比如按键的检测判断等。 其实有很多地方可以使用这种思想。比如传感器的数据采集,因为单片机不可能一直等待着运行,那样的效率是很低的,通常都是结合fsm + timer的方式来提高CPU的使用率 一、传感器中使用fsm的方法。 大家都知道,ds18b20的采集是比较慢的,发送转换指令后,最慢需要等待720ms,这个时间有点太长了。简直不能忍受。 如下所示:我采用了11bit分辨率,0.125的分辨率足够了,作为温度参考而已。 The resolution of the temperature sensor is user - configurable to 9, 10,
[单片机]
51单片机自定义函数实现任意串口printf()
在嵌入式开发过程中,往往需要多个串口进行通讯,使用printf函数是个不错的选择,格式化输出后方便实用; 不论什么型号的单片机,只要支持标准C的编译器,都可以实现此功能, 添加如下头文件; #include stdio.h #include string.h #include stdarg.h 下面是函数定义,可以移植到任意的串口; bit S1_busy; unsigned char idata Put_buf ; //最大数量 void my_printf(char* fmt,...) { unsigned char i,len; va_list ap; va_start(ap,fmt);
[单片机]
51<font color='red'>单片机</font>自定义函数实现任意串口<font color='red'>的</font>printf()
如何正确划分51单片机RAM
前边介绍单片机资源的时候,我们提到过 STC89C52 共有 512 字节的 RAM,是用来保存数据的,比如我们定义的变量都是直接存在 RAM 里边的。但是单片机的这 512 字节的 RAM在地位上并不都是平等的,而是分块的,块与块之间在物理结构和用法上都是有区别的,因此我们在使用的时候,也要注意一些问题。 51 单片机的 RAM 分为两个部分,一块是片内 RAM,一块是片外 RAM。标准 51 的片内 RAM 地址从 0x00H~0x7F 共 128 个字节,而现在我们用的 51 系列的单片机都是带扩展片内 RAM 的,即 RAM 是从 0x00~0xFF 共 256 个字节。片外 RAM 最大可以扩展到 0x0000~0x
[单片机]
MCS-51系列单片机实现PWM输出功能方法解析
MCS-51系列单片机无PWM输出功能,可以采用定时器配合软件的方法实现,对精度要求不高的场合是非常实用的。采用高速光隔6N137输出,并将PWM的信号倒相。 一、 工作原理 二、PWM输出 1. 固定脉宽PWM输出 用T0定时器完成PWM输出,脉宽固定为65536us。T0定时器设置成16位定时器,PWM波形如图2所示。 程序清单:(12MHz) PwmData0;T0定时t1的初值(字) PwmData1;T0定时t2的初值(字) PwmF ;PWM输出标志 ;*************************** setb tr0;启动T0 …… ;T0中断服务程序 T0Int:JB,PwmF,PWMOUT ;PWM
[单片机]
飞思卡尔面向要求严苛家电和工业应用扩展32位ColdFire MCU组合
飞思卡尔扩展其32位ColdFire MCU组合,以满足最严格的家电和工业应用的性能需求。MCF51AG128 MCU新系列提供最佳的性能和功能,以加强应用的系统安全和完整性,包括洗衣机、洗碗机、冰箱、微波炉、空调、工业传动系统/泵、风扇/压缩机。 电源电压为2.7V – 5.5V时,AG128 MCU以高达50 MHz的处理器内核速度进行运行,同时包括128KB的Flash内存和16KB的 SRAM。多个封装选项,外加新的GPIO增强功能,这将在布局和生产过程中实现最大灵活性。 该外设集专为实现三相电机控制应用的有效控制而设计。它包括两个16位FlexTimers、高速模拟比较器,双通道16位PWM定
[单片机]
飞思卡尔面向要求严苛<font color='red'>的</font>家电和工业应用扩展32位ColdFire <font color='red'>MCU</font>组合
基于51单片机和数码管万年历程序
可实现功能: 启动程序数码管按照××-××-××格式显示时分秒并走时 按下C1按钮后按照××-××-××格式显示年月日 按下C3调时模式按钮时分秒/年月日静止,指示灯亮起,进入调时模式 先按C2选位按钮再按下C0加一按钮,对应的位置改变 再次按下C3按钮退出调时模式,继续走时 #include reg51.h #define uChar unsigned char #define uInt unsigned int uChar a ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uChar b ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,
[单片机]
基于单片机智能排插设计方案
  1 引言   随着节能减排、绿色环保意识的不断增强,人们对家用电器的节能减排提出了更高的要求。但并不是每家每户都有资金去更换使用多年、现在仍可以使用的家用电器。为此,本文设计研发了一款基于51 单片机控制的节能环保的智能排插,旧一代的家电通过使用这个排插可以蜕变为智能化家电,具备遥控、定时开关、无待机功耗等功能,节约了家电更新换代的成本。该排插现场运行效果良好,符合一般用户需求,具有一定的推广应用价值。   2 智能排插基本工作原理   为方便用户使用,本设计将系统分成两部分:排插控制系统和排插遥控器系统(如图1、图2 所示),它们分别由一片AT89S52 单片机控制。在排插控制系统中,单片机通过无线接收模块接收遥控器的
[单片机]
基于<font color='red'>单片机</font><font color='red'>的</font>智能排插<font color='red'>的</font>设计方案
一文详解80C51单片机中断系统
中断系统是计算机或者单片机的主要功能部件。 有了中断系统,便可以使微处理器具备对外部的异步事件进行处理的能力。 当微处理器的CPU正在执行程序的过程中,如果外部硬件或者内部组件有紧急的请求(如通信,断点,发生重大故障等),中断系统就可以将当前的程序暂停,优先处理这些中断请求。 这种处理方式,对整个系统的稳定性,健壮性至关重要,同时也能大大提高处理器的效率,使得系统的应用更加灵活多变。 中断的概念 中断是指单片机在执行程序的过程中,当出现异常情况或特殊请求时,单片机停止当前程序的运行,转向对这些异常情况或特殊请求进行处理,当处理结束后再返回原程序的间断处,继续执行原程序,这一现象称为中断。 中断是单片机实时处理内部或外部事件的一
[单片机]
一文详解80C51<font color='red'>单片机</font><font color='red'>的</font>中断系统
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved