18B20.rar

  • xuehuzaifei
    了解作者
  • C/C++
    开发工具
  • 36KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 1
    下载次数
  • 2013-11-09 17:32
    上传日期
单片机驱动18B20 18B20为单总线设计,此程序支持两路18B20设备 更多的可以自行扩展
18B20.rar
  • hj-c52.uvopt
    54.5KB
  • hj-c52
    13.3KB
  • hj-c52.M51
    20.5KB
  • hj-c52.plg
    462B
  • hj-c52_uvopt.bak
    54.5KB
  • main.OBJ
    15.8KB
  • hj-c52_Opt.Bak
    989B
  • hj-c52.hex
    2.2KB
  • hj-c52.uvproj
    12.9KB
  • main.c
    14.1KB
  • main.LST
    23.5KB
  • hj-c52.opt.bak
    994B
  • hj-c52_Uv2.Bak
    1.6KB
  • hj-c52.lnp
    42B
  • hj-c52.Uv2.bak
    2KB
内容介绍
/**********************慧净电子实验板例程************************ * 平台:HJ-C52 + Keil uVision4 + STC89C52 + AT89S52 + STC12C5A60S2 1T * 名称: * 公司:慧净电子科技有限公司 * 淘宝:http://shop37031453.taobao.com * 网站:www.hjmcu.com www.hlmcu.com * 编写HJMCU * 日期:2008-8-08 * QQ : 398115088 121350852 * 晶振:11.0592MHZ * 说明:免费开源,不提供源代码分析,有问题直接到慧净论坛交流 * 论坛:http://hjdz.5d6d.net * 硬件设置: * 使用说明: ******************************************************************/ //DS18B20温度检测及其液晶显示 #include<reg52.h> //包含单片机寄存器的头文件 #include<intrins.h> //包含_nop_()函数定义的头文件 unsigned char code digit[10]={"0123456789"}; //定义字符数组显示数字 unsigned char code Str[]={"Test by DS18B20"}; //说明显示的是温度 unsigned char code Error[]={"Error!Check!"}; //说明没有检测到DS18B20 unsigned char code Temp[]={"Temp:"}; //说明显示的是温度 unsigned char code Cent[]={"Cent"}; //温度单位 /******************************************************************************* 以下是对液晶模块的操作程序 *******************************************************************************/ sbit RS=P1^0; //寄存器选择位,将RS位定义为P1.0引脚 sbit RW=P1^1; //读写选择位,将RW位定义为P1.1引脚 sbit E=P2^5; //使能信号位,将E位定义为P2.5引脚 sbit BF=P0^7; //忙碌标志位,,将BF位定义为P0.7引脚 sbit cs88=P2^2; sbit DU = P2^0; sbit WE = P2^1; /***************************************************** 函数功能:延时1ms (3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒 ***************************************************/ void delay1ms() { unsigned char i,j; for(i=0;i<4;i++) for(j=0;j<33;j++) ; } void cmg88()//关数码管,点阵函数 { DU=1; P0=0X00; DU=0; } /***************************************************** 函数功能:延时若干毫秒 入口参数:n ***************************************************/ void delaynms(unsigned char n) { unsigned char i; for(i=0;i<n;i++) delay1ms(); } /***************************************************** 函数功能:判断液晶模块的忙碌状态 返回值:result。result=1,忙碌;result=0,不忙 ***************************************************/ bit BusyTest(void) { bit result; RS=0; //根据规定,RS为低电平,RW为高电平时,可以读状态 RW=1; E=1; //E=1,才允许读写 _nop_(); //空操作 _nop_(); _nop_(); _nop_(); //空操作四个机器周期,给硬件反应时间 result=BF; //将忙碌标志电平赋给result E=0; //将E恢复低电平 return result; } /***************************************************** 函数功能:将模式设置指令或显示地址写入液晶模块 入口参数:dictate ***************************************************/ void WriteInstruction (unsigned char dictate) { while(BusyTest()==1); //如果忙就等待 RS=0; //根据规定,RS和R/W同时为低电平时,可以写入指令 RW=0; E=0; //E置低电平(根据表8-6,写指令时,E为高脉冲, // 就是让E从0到1发生正跳变,所以应先置"0" _nop_(); _nop_(); //空操作两个机器周期,给硬件反应时间 P0=dictate; //将数据送入P0口,即写入指令或地址 _nop_(); _nop_(); _nop_(); _nop_(); //空操作四个机器周期,给硬件反应时间 E=1; //E置高电平 _nop_(); _nop_(); _nop_(); _nop_(); //空操作四个机器周期,给硬件反应时间 E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令 } /***************************************************** 函数功能:指定字符显示的实际地址 入口参数:x ***************************************************/ void WriteAddress(unsigned char x) { WriteInstruction(x|0x80); //显示位置的确定方法规定为"80H+地址码x" } /***************************************************** 函数功能:将数据(字符的标准ASCII码)写入液晶模块 入口参数:y(为字符常量) ***************************************************/ void WriteData(unsigned char y) { while(BusyTest()==1); RS=1; //RS为高电平,RW为低电平时,可以写入数据 RW=0; E=0; //E置低电平(根据表8-6,写指令时,E为高脉冲, // 就是让E从0到1发生正跳变,所以应先置"0" P0=y; //将数据送入P0口,即将数据写入液晶模块 _nop_(); _nop_(); _nop_(); _nop_(); //空操作四个机器周期,给硬件反应时间 E=1; //E置高电平 _nop_(); _nop_(); _nop_(); _nop_(); //空操作四个机器周期,给硬件反应时间 E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令 } /***************************************************** 函数功能:对LCD的显示模式进行初始化设置 ***************************************************/ void LcdInitiate(void) { delaynms(15); //延时15ms,首次写指令时应给LCD一段较长的反应时间 WriteInstruction(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口 delaynms(5); //延时5ms ,给硬件一点反应时间 WriteInstruction(0x38); delaynms(5); //延时5ms ,给硬件一点反应时间 WriteInstruction(0x38); //连续三次,确保初始化成功 delaynms(5); //延时5ms ,给硬件一点反应时间 WriteInstruction(0x0c); //显示模式设置:显示开,无光标,光标不闪烁 delaynms(5); //延时5ms ,给硬件一点反应时间 WriteInstruction(0x06); //显示模式设置:光标右移,字符不移 delaynms(5); //延时5ms ,给硬件一点反应时间 WriteInstruction(0x01); //清屏幕指令,将以前的显示内容清除 delaynms(5); //延时5ms ,给硬件一点反应时间 } /************************************************************************ 以下是DS18B20的操作程序 ************************************************************************/ sbit DQ=P2^4; unsigned char time; //设置全局变量,专门用于严格延时 /***************************************************** 函数功能:将DS18B20传感器初始化,读取应答信号 出口参数:flag ***************************************************/ bit Init_DS18B20(void) { bit flag; //储存DS18B20是否存在的标志,flag=0,表示存在;flag=1,表示不存在 DQ = 1; //先将数据线拉高 for(time=0;time<2;time++) //略微延时约6微秒 ; DQ = 0; //再将数据线从高拉低,要求保持480~960us for(time=0;time<200;time++) //略微延时约600微秒 ; //以向DS18B20发出一持续480~960us的低电平复位脉冲 DQ = 1; //释放数据线(将数据线拉高) for(time=0;time<10;time++) ; //延时约30us(释放总线后需等待15~60us让DS18B20输出存在脉冲) flag=DQ; //让单片机检测是否输出了存在脉冲(DQ=0表示存在) for(time=0;time<200;time++) //延时足够长时间,等待存在脉冲输出完毕 ; return (flag); //返回检测成功标志 } /***************************************************** 函数功能:从DS18B20读取一个字节数据 出口参数:dat ***************************************************/ unsigned char ReadOneChar(void) { unsigned char i=0; unsigned char dat; //储存读出的一个字节数据 for (i=0;i<8;i++) { DQ =1; // 先将数据线拉高 _nop_(); //等待一个机器周期 DQ = 0; //单片机从DS18B20读书据时,将数据线从高拉低即启动读时序 dat>>=1; _nop_(); //等待一个机器周期 DQ = 1; //将数据线"人为"拉高,为单片机检测DS18B20的输出电平作准备 for(time=0;time<2;time++) ; //延时约6us,使主机在15us内采样 if(DQ==1) dat|=0x80; //如果读到的数据是1,则将1存入dat else dat|=0x00;//如果读到的数据是0,则将0存入dat //将单片机检测到的电平信号DQ存入r[i] for(time=0;time<8;time++) ; //延时3us,两个读时序之间必须有大于1us的恢复期 } return (dat); //返回读出的十进制数据 } /***************************************************** 函数功能:向DS18B20写入一个字节数据 入口参数:dat ***********
评论
    相关推荐
    • 18b20.rar
      基于单片机stc89c51的温度检测,传感器为18b20
    • DS18B20.rar
      具有DS18B20测温功能,并将结果用显示屏显示出来。
    • 单片机+读取DS18B20序列号
      单片机读取DS18B20序列号,方便多级控制
    • 18B20PROTEUS
      18B20PROTEUS仿真 是一款较老,较优的应用型软件。
    • ds18b20
      DS18B20温度传感器 处理树莓派的DS18B20温度传感器的类和方法。 该文件将成为您的自述文件以及文档的索引。 安装 pip install ds18b20 如何使用 请填写我! 不要忘记代码示例: device = Device(base_dir='...
    • DS18B20-1.0.0.zip
      Temperature sensor ds18b20 code
    • DS18B20程序_2.zip
      DS18B20测温程序,STM32测温,基于STM32F103ZET6,可扩展。
    • dc18b20.rar
      18b20程序,用于RAM程序 包含了初始化 读,写
    • 25 DS18B20温度传感器实验.zip
      DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。 DS18B20测温原理如图3所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生...
    • ds18b20.rar
      ds18b20开发的资料,详细的有相关的介绍