版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本程序为 ds18b20 的多路温度采集程序,是我自己参考其他程序后改写而成,可显示4 路正负温度值,并有上下限温度报警(声音、灯光报警)。亲测,更改端口即可使用。(主要器件:51 单片机, ds18b20, lcd显示器)附有 proteus 仿真图,及序列号采集程序/*上限 62 度 下限 -20 度*/#include<>#define uchar unsigned char#define uint unsigned intsbit ds=P11;sbit rs=P14;sbit e=P16;sbit sp=P10;sbit d1=P12;sbit d2=P13;ucharl
2、cdrom48=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 "int f4;int tvalue;float ftvalue;uint warnl=320;uint warnh=992;/*lcd程序 */void de
3、layms(uint ms)/延时uint i,j;for(i=ms;i>0;i-)for(j=110;j>0;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);wrcom(0x38);delayms(5);wrcom(0x0c);delayms(5);wrcom
4、(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()/ds18b20 复位uint i;ds=0;i=103;while(i>0)i-;ds=1;i=4;while(i>0)i-;bit dsrd0()/读一位数据uint i;bit dat;ds
5、=0;i+;ds=1;i+;i+;dat=ds;i=8;while(i>0)i-;return(dat);uchar dsrd()/读 1 个字节数据uchar i,j,dat;dat=0;for(i=8;i>0;i-)j=dsrd0();dat=(j<<7)|(dat>>1);return(dat);void dswr(uchar dat)/写数据uint i;uchar j;bit testb;for(j=8;j>0;j-)testb=dat&0x01;dat=dat>>1;if(testb)ds=0;i+;i+;ds=1;i=
6、8;while(i>0)i-;elseds=0;i=8;while(i>0)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;j<4;j+)dsrst();delayms(1);dswr(0x55);for(i=0;i<8;i+)dswr(lcdromji);/发送 64 位序列号dswr(0xbe);a=dsrd(
7、);b=dsrd();tvalue=b;tvalue<<=8;tvalue=tvalue|a;if(tvalue<0)d1=1;tvalue=tvalue+1;wrcom(0xc0);wrdat(0x2d);if(tvalue>warnl)d2=0;sp=0;elsed2=1;sp=1;elsed2=1;wrcom(0xc0);wrdat(' ');if(tvalue>warnh)d1=0;sp=0;elsed1=1;sp=1;if(j=0)wrcom(0x8e);wrdat('2');if(j=1)wrcom(0x8e);wrda
8、t('3');if(j=2)wrcom(0x8e);wrdat('4');if(j=3)wrcom(0x8e);wrdat('5');ftvalue=tvalue*;tvalue=ftvalue*10+;ftvalue=ftvalue+;fj=tvalue;/温度扩大十倍,精确到一位小数tvalue=fj;t=tvalue/1000;wrcom(0x80+0x41);wrdat(table1t);/显示百位t=tvalue%1000/100;wrdat(table1t);/显示十位t=tvalue%100/10;wrdat(table1t);/显
9、示个位wrdat(0x2e); /显示小数点儿t=tvalue%10/1;wrdat(table1t);/显示小数位delayms(5000);/*主函数 */void main()d1=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;/LCD数据/ 命令选择端
10、 (H/L)位声明sbit lcden = P16;/LCD使能信号端位声明void delay(uintz);/延时函数void DS18B20_Reset(void);/DQ18B20复位,初始化函数bit DS18B20_Readbit(void);/读 1 位数据函数uchar DS18B20_ReadByte(void);/读 1 个字节数据函数void DS18B20_WriteByte(uchar dat);/向 DQ18B20写一个字节数据函数void LCD_WriteCom(uchar com);/1602液晶命令写入函数void LCD_WriteData(uchar d
11、at);/1602液晶数据写入函数void LCD_Init();/LCD 初始化函数void Display18B20Rom(charRom);/显示 18B20 序列号函数/*/*主函数*/*/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 = DS
12、18B20_ReadByte();f = DS18B20_ReadByte();g = DS18B20_ReadByte();h = DS18B20_ReadByte();LCD_WriteCom(0x80+0x40);Display18B20Rom(h);Display18B20Rom(g);Display18B20Rom(f);Display18B20Rom(e);Display18B20Rom(d);Display18B20Rom(c);Display18B20Rom(b);Display18B20Rom(a);while(1);/*/*延时函数 :void delay()*/*功能:延
13、时函数*/*/void delay(uint z)/延时函数uint x,y;for( x = z; x > 0; x- )for( y = 110; y > 0; y- );/*/*DS18B20函数 :void DS18B20_Reset()*/*功能:复位 18B20*/*/void DS18B20_Reset(void)/DQ18B20复位,初始化函数uint i;DQ=0;i = 103;while( i > 0 ) i-;DQ=1;i = 4;while( i > 0 ) i-;/*/*DS18B20函数 :void DS18B20_Readbit()*/*
14、功能:读 1 个字节数据函数*/*/bit DS18B20_Readbit(void)/读 1 位数据函数uint i;bit dat;DQ=0;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 = DS18
15、B20_Readbit();dat = ( j << 7 ) | ( dat >> 1 );return(dat);/*/*DS18B20函数 :void DS18B20_WriteByte()*/*功能:向 DQ18B20写一个字节数据函数*/*/void DS18B20_WriteByte(uchar dat)/向 DQ18B20写一个字节数据函数uint i;uchar j;bit testb;for( j=1; j<=8; j+)testb = dat&0x01;dat= dat>>1;if(testb)/写1DQ=0;i+;i+;DQ
16、=1;i = 8;while(i>0)i-;elseDQ=0;/写 0i = 8;while(i>0)i-;DQ=1;i+;i+;/*/* LCD函数 :void LCD_WriteCom()*/*功能:向 LCD写入命令*/*/void 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
17、(uchar dat)rs = 1;/择 LCD为写入数据状态lcden = 0;P3=dat;/到总线上delay(5);选将待写入数据放lcden = 1;/给 LCD使能端一个脉冲delay(5);/信号将之前放到总线上lcden = 0;/的数据写入 LCDdelay(5);/*/* LCD函数 :void LCD_Init()*/*功能:初始化LCD,设定 LCD的初始状态*/*/void LCD_Init()LCD_WriteCom(0x38);/LCD显示模式设定delay(15);LCD_WriteCom(0x08);/关闭LCD显示delay(3);LCD_WriteCom(0x01);/LCD显示清屏delay(3);LCD_WriteCom(0x06);/设定光标地址指针为自动加 1delay(3);LCD_WriteCom(0x0c);/打开 LCD显示,但不显示光标/*/*/*显示 18B20 序列号*/*/*/void Display18B20Rom(char Rom)uchar h,l;l = Rom & 0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 室内设计风格分类与空间布局优化指南
- 2026年定制产品验收催办函3篇
- 工程师在线团队协作工具使用手册
- 关于财务岗位绩效评定表
- 2026年全球市场推广活动动员信6篇
- 汽车行业销售顾问车辆销售与服务满意度绩效衡量表
- 数据分析师岗位数据准确性绩效评定表
- 电子商务公司运营团队主管绩效考评表
- 通信设备维护技术人员KPI考核表
- 技术合作提议回复函4篇
- 2026中国高端装备润滑材料技术门槛与军事应用价值报告
- 2026年抗菌药物合理使用全员培训计划表
- 电梯维修保养标准操作规程
- 戒烟健康科普 拥抱美好人生
- 2025山东沂蒙山天蒙旅游区社会招聘2人笔试历年备考题库附带答案详解
- 华北科技学院《电力电子技术》2025-2026学年第一学期期末试卷(A卷)
- 2025新初任检察官遴选考试核心题库试题及答案
- 碳排放管理与碳减排知识考试复习题库(附答案)
- (正式版)T∕CCASC 0057.2-2025 离子膜法烧碱生产安全操作规程 第2部分:电解
- 软件测试策略全面模板实例
- 浙江强基联盟2026年3月高一联考化学+答案
评论
0/150
提交评论