18B20温度传感器C语言编程实例.doc_第1页
18B20温度传感器C语言编程实例.doc_第2页
18B20温度传感器C语言编程实例.doc_第3页
18B20温度传感器C语言编程实例.doc_第4页
18B20温度传感器C语言编程实例.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

温度传感器C语言编程实例 #include #include/含有nop_(); #include /含有运算 #define uchar unsigned char #define uint unsigned int sbit DQ=P37;/数据、时钟线 uchar duanma=0XFC,0X60,0XDA,0XF2,0X66,0XB6,0XBE,0XE0, 0XFE,0XF6; uint wendu; /定义温度值存储位置 / uchar bdata date; 原来是用来移动数据的 float f_num;/因为温度传感器的精度为0.0625所以设一个float行的变量 / sbit d=date0; void delay_ms(uint ms) uchar i,j; for(i=ms;i0;i-) for(j=110;j0;j-); void delay_us()/25us延时 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); /* init()初始化复位程序 变量i;还有nop是用来延时的 时序:1、2us、0、480us、等待确认;在延时20us、1 */ void init() uint i; DQ=1; _nop_(); DQ=0; delay_us();/1 delay_us();/2 delay_us();/3 delay_us();/4 delay_us();/5 delay_us();/6 delay_us();/7 delay_us();/8 delay_us();/9 DQ=1; i=10; while(i-)&(DQ=1); i=10; while(i-); DQ=1; /* 字节写:write_byte变量x用来产生for循环 在写的过程中,0和一是分开写的 时序:0、15us、把数据植入、45us、1、重复前面、1 当进行写数据时0和1是分开写的;但是时序也要分开写; */ void write_byte(uchar date)/传递过来的参数是操作指令例如:0xcc,0x44;0xbe uchar x; bit testb; for(x=0;x=1;/没去一次向左移动一次 if(testb) DQ=0;_nop_();_nop_();DQ=1;delay_us();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_(); DQ=1; delay_us(); else DQ=0;_nop_();_nop_();DQ=0; delay_us();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_(); DQ=1; DQ=1; /* 位读程序:这样做的目的是为了把程序写的更有条理性而且程序的类型是bit型的,因此返回值为bit型的时序:0、15us、把数据置入、45us、1 */ bit read_bit() bit bt; DQ=1; _nop_(); _nop_();DQ=0; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); DQ=1; _nop_();_nop_();_nop_();_nop_();bt=DQ;return bt; /* 字节读程序: 为了将上面的位读程序组合起来 变量:shuju是用来将独处的数据存入 */ uchar read_byte() uchar n,k,shuju; shuju=0; for(n=0;n8;n+) k=read_bit(); shuju=(k1); /这是一个将位数据转换成字节数据,先接受的是低位 delay_us(); return shuju; /* 启动温度转换: 在进行对传感器操作之前必须先写入初始化程序 先写入跳跃器件地址指令0xcc 再写入启动温度转换指令0x44 */ void start() init(); delay_ms(1);write_byte(0xcc);write_byte(0x44);/向18b20写入启动温度转换指令 /* 温度转换及处理程序: 他的做用是将温度值读出 因为读出0的数据是两个char型数据需要将它转换成一个uint型的这样才能把显示做出来 */ uint wenduchange() uchar a,b; init(); /初始化;必须要有的delay_ms(1);write_byte(0xcc);/向18b20写入跳跃地址指令write_byte(0xbe);/向18b20写入读取温度指令a=read_byte(); /先读低八位b=read_byte();/再读高八位P0=b; /程序标志!检测用wendu=b;wendu=8;wendu=wendu|a;f_num=wendu*0.0625;/读出的温度值乘以18b20的精度wendu=f_num*10+0.5;/ 保留一位小数,加0.5为了四舍五入f_num=f_num+0.5; /在设定变量时一定注意F_num的类型为float型return wendu; /*显示程序: 运用的并口显示方式*/ void display(uint datt) P2=0xfd; P0=duanmadatt/100; delay_ms(5); P2=0xff; P2=0xfb; P0=duanmadatt/10%10; delay_ms(5); P2=0xff; P2=0xf7; P0=duanmadatt%10;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论