ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:36.94KB ,
资源ID:26611259      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/26611259.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ds18b20多路温度采集程序.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ds18b20多路温度采集程序.docx

1、ds18b20多路温度采集程序本程序为 ds18b20 的多路温度采集程序,是我自己参考其他程 序后改写而成,可显示 4 路正负温度值,并有上下限温度报警 (声 音、灯光报警) 亲测,更改端口即可使用。 (主要器件: 51 单片机, ds18b20 , lcd 显示器)附有 proteus 仿真图,及序列号采集程序/* 上限 62 度 下限 -20 度*/#include#define uchar unsigned char #define uint unsigned int sbit ds=P11;sbit rs=P14;sbit e=P16;sbit sp=P10;sbit d1=P12;

2、sbit d2=P13;uchar lcdrom48=0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e,0x28,0x31,0xc5,0xb8,0x00,0x00,0x00,0xb9,0x28,0x32,0xc5,0xb8,0x00,0x00,0x00,0xe0,0x28,0x33,0xc5,0xb8,0x00,0x00,0x00,0xd7;unsigned char code table0=TEMPERARTURE:U ;unsigned char code table1=0123456789ABCDEF;int f4;int tvalue;float ftva

3、lue;uint warnl=320;uint warnh=992;/*lcd程序 */void delayms(uint ms)/ uint i,j; for(i=ms;i0;i-)for( j=110;j0;j-); void wrcom(uchar com)/delayms(1);rs=0;延时写指令P3=com; delayms(1); e=1;delayms(1);e=0;void wrdat(uchar dat)/rs=1;e=0;写数据P3=dat;delayms(5);e=1;delayms(5);e=0;void lcdinit()/ 初始化 lcddelayms(15);w

4、rcom(0x38);delayms(5);wrcom(0x0c);delayms(5);wrcom(0x06);delayms(5);wrcom(0x01);delayms(5);void display(uchar *p)/ 显示while(*p!=0)wrdat(*p);p+;delayms(1);displayinit()/ 初始化显示lcdinit();wrcom(0x80);display(table0);复位/*ds18b20 程序 */void dsrst()/ds18b20uint i;ds=0;i=103;while(i0)i-;ds=1;i=4;while(i0)i-;b

5、it dsrd0()/ 读一位数据uint i;bit dat;ds=0;i+; ds=1;i+;i+;dat=ds;i=8;while(i0)i-;return(dat);uchar dsrd()/ 读 1 个字节数据uchar i,j,dat;dat=0;for(i=8;i0;i-)j=dsrd0();dat=( j1);return(dat);void dswr(uchar dat)/ 写数据uint i;uchar j;bit testb;for( j=8;j0;j-)testb=dat&0x01; dat=dat1;if(testb)ds=0; i+;i+;ds=1; i=8;whi

6、le(i0)i-;elseds=0;i=8;while(i0)i-; ds=1;i+;i+;void tmstart()/ 初始化 ds18b20sp=1;d1=1;d2=1;dsrst();delayms(1);dswr(0xcc);dswr(0x44);void read_dealtemp()/ 读取并处理温度uchar i,j,t;uchar a,b;for( j=0;j4;j+)dsrst();delayms(1);dswr(0x55);for(i=0;i8;i+)dswr(lcdrom ji);/ 发送 64 位序列号 dswr(0xbe); a=dsrd(); b=dsrd();

7、tvalue=b; tvalue=8; tvalue=tvalue|a; if(tvaluewarnl) d2=0;sp=0; elsed2=1;sp=1;elsed2=1; wrcom(0xc0); wrdat( );if(tvaluewarnh) d1=0; sp=0;elsed1=1; sp=1;if( j=0)wrcom(0x8e); wrdat(2);if( j=1)wrcom(0x8e); wrdat(3);if( j=2)wrcom(0x8e); wrdat(4);if( j=3)wrcom(0x8e); wrdat(5);ftvalue=tvalue*0.0625;tvalue

8、=ftvalue*10+0.5;ftvalue=ftvalue+0.05;f j=tvalue;/ 温度扩大十倍,精确到一位小数 tvalue=f j;t=tvalue/1000;wrcom(0x80+0x41);wrdat(table1t);/ 显示百位 t=tvalue%1000/100;wrdat(table1t);/ 显示十位 t=tvalue%100/10;wrdat(table1t);/ 显示个位wrdat(0x2e); / 显示小数点儿 t=tvalue%10/1;wrdat(table1t);/ 显示小数位 delayms(5000);/*主函数 */void main() d

9、1=1;d2=1;sp=1;displayinit();/ 初始化显示 while(1)tmstart();/ 初始化 read_dealtemp();/ 读取温度/* 序列号读取程序 */#include #define uchar unsigned char#define uint unsigned intsbit DQ = P11; 感器信号线sbit rs = P14;据/ 命令选择端 (H/L) 位声明 sbit lcden = P16;端位声明/ 温度传/LCD 数/LCD 使能信号void delay(uint z);/ 延voidDS18B20_Reset(void);时函数/

10、 读 1 位数/DQ18B20 复位,初始化函数bit DS18B20_Readbit(void);/ 读 1 个据函数uchar DS18B20_ReadByte(void);字节数据函数void DS18B20_WriteByte(uchardat);/ 向DQ18B20 写一个字节数据函数void LCD_WriteCom(ucharcom);/1602液晶命令写入函数void LCD_WriteData(uchardat);/1602液晶数据写入函数voidLCD_Init();/LCD 初始化函数void Display18B20Rom(char Rom); / 显示 18B20 序

11、列号函数/*主函数*/ /*void main() uchar a,b,c,d,e,f,g,h;LCD_Init(); DS18B20_Reset();delay(1);DS18B20_WriteByte(0x33); delay(1);a = DS18B20_ReadByte();b = DS18B20_ReadByte();c = DS18B20_ReadByte();d = DS18B20_ReadByte();e = DS18B20_ReadByte();f = DS18B20_ReadByte();g = DS18B20_ReadByte();h = DS18B20_ReadByte

12、();LCD_WriteCom(0x80+0x40);Display18B20Rom(h);Display18B20Rom(g);Display18B20Rom(f);Display18B20Rom(e);Display18B20Rom(d);Display18B20Rom(c);Display18B20Rom(b);Display18B20Rom(a);while(1);/*/delay()函数/* 延 时 函 数 :void*/* 功 能 : 延 时*/ void delay(uint z)/ 延时函数uint x,y;for( x = z; x 0; x- )for( y = 110;

13、y 0; y- );/*/*DS18B20 函 数 :void DS18B20_Reset()*/*功能复 位 18B20*/复位,初始化函数/*/ void DS18B20_Reset(void)/DQ18B20uint i;DQ = 0;i = 103;while( i 0 ) i-;DQ = 1;i = 4;while( i 0 ) i-;/*/*DS18B20 函 数 :void DS18B20_Readbit()*/*功 能 : 读 1 个 字 节 数 据 函 数*/bit DS18B20_Readbit(void) / 读 1 位数据函数uint i;bit dat;DQ = 0;

14、i+; /i+ 起延时作用DQ = 1;i+;i+; dat = DQ;i = 8;while( i 0 )i-; return( dat );/*/* DS18B20 函 数 :void DS18B20_ReadByte() */* 功 能 : 读 1 个 字 节 数 据 函 数 */uchar DS18B20_ReadByte(void) / 读 1 个字节数据函数uchar i,j,dat;dat = 0;for( i = 1; i = 8; i+ )j = DS18B20_Readbit();dat = ( j 1 ); return(dat);/*/* DS18B20 函 数 :vo

15、id DS18B20_WriteByte()*/* 功 能: 向 DQ18B20 写 一 个字 节 数 据 函 数*/ 向 DQ18B20void DS18B20_WriteByte(uchar dat)写一个字节数据函数 uint i;uchar j;bit testb;for( j=1; j1;if(testb) / 写 1DQ = 0; i+;i+;DQ = 1;i = 8;while(i0)i-;elseDQ = 0; / 写 0i = 8;while(i0)i-;DQ = 1;i+;i+;/*LCD 函数:voidLCD_WriteCom()*/*功能:向LCD写入命令*/void

16、LCD_WriteCom(uchar com) rs = 0;P3= com;delay(5);lcden = 0;delay(5);lcden = 1;delay(5);lcden = 0;/* LCD 函 数 :void LCD_WriteData(uchar dat)*/* 功 能 : 向 LCD 写 入 数 据*/ /*/void LCD_WriteData(uchar dat)rs1;/ 选择 LCD 为写入数据状态lcden = 0;P3= dat;/ 将待写入数据放到总线上delay(5);lcden = 1;/ 给LCD 使能端一个脉冲delay(5);/ 信号将之前放到总线上

17、lcden = 0;/ 的数据写入 LCDdelay(5);/*/*LCD函数:voidLCD_Init()*/*功 能 : 初 始 化 LCD , 设 定 LCD的初始状态*/*void LCD_Init()LCD_WriteCom(0x38);模式设定delay(15);LCD_WriteCom(0x08);显示delay(3);LCD_WriteCom(0x01);清屏delay(3);LCD_WriteCom(0x06);地址指针为自动加 1delay(3);LCD_WriteCom(0x0c);显示,但不显示光标/*/*/LCD 显示/ 关闭 LCD/LCD 显示/ 设定光标/ 打开 LCD*/* 显 示 18B20 序 列 号 */*/*/void Display18B20Rom(char Rom)uchar h,l;l = Rom & 0x0f; / 取低 4 位h = Rom & 0xf0; / 取高 4 位h = 4;if( ( h = 0x00 )&( h = 0x00 )&( l = 0x09 ) )LCD_WriteData(l+0x30);/ 取 ASCII 码elseLCD_WriteData(l+0x37);/ 取 ASCII 码

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1