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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

DS18B20温度测量报警 设定温度上下限.docx

1、DS18B20温度测量报警 设定温度上下限DS18B20温度测量报警 设定温度上下限 分类: 单片机 2011-10-07 19:42 719人阅读 评论(1) 收藏 举报 #include #include uchar DQ; uchar k;sbit ds=P24; /温度传感器引脚;sbit beep=P20; /蜂鸣器uint temp;float ftemp; uchar g1=22,g2=24,d1=20,d2=18;sbit b=P23; /定义按键;sbit a=P22; /定义按键;sbit E=P27;/使能信号;sbit RW=P26;/读写选择 写指令 RS=0;RW=

2、0;D0D7指令码;E高脉冲;sbit RS=P25;/数据/命令选择 写数据 RS=1;RW=0;D0D7数据;E高脉冲uchar code table1=DS18B20 OK ! ;uchar code table2=TEMP IS: . ;/自定义字符显示C ;uchar code table8 = 0x16,0x09,0x08,0x08,0x08,0x09,0x06,0x00 ;uchar code table3=DS18B20 ERR0R !;uchar code table4=PLEASE CHECK !;uchar code table7=set standard ;uchar

3、code table8= tempreture ! ;uchar code table5=G1= ,G2= .;uchar code table6=D1= ,D2= .;void delay(uint z) /延时函数uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void write_com(uchar com) /液晶写指令;P1=com;RS=0;RW=0;E=1;delay(5);E=0;delay(5);void write_date(uchar date) /液晶写数据;P1=date;RS=1;RW=0;E=1;delay(5);E=0;delay

4、(5);void chushi()uchar f;write_com(0x80);f=0;while(table7f!=0)write_date(table7f);f+;write_com(0x80+0x40);f=0;while(table8f!=0)write_date(table8f);f+;void init() /液晶初始化状态;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);chushi();dsreset(void) /DS18B20复位 初始化函数uint i;ds=0;i=103;while(i0

5、) i-;ds=1;i=4;while(i0) i-;DQ=ds;i=4;while(i0) i-;return DQ;bit tempreadbit(void) /读一位数据函数uint i;bit dat;ds=0;i+;ds=1;i+;i+;dat=ds;i=8;while(i0) i-;return(dat);uchar tempread(void) /读一个字节数据函数uchar i,j,dat;dat=0;for(i=1;i=8;i+)j=tempreadbit();dat=(j1);return(dat);void tempwritebyte(uchar dat) /写一个字节数

6、据函数uint i;uchar j;bit testb;for(j=1;j1;if(testb) /写1ds=0;i+;i+;ds=1;i=8;while(i0) i-;else /写0ds=0;i=8;while(i0) i-;ds=1;i+;i+; void tempchange(void) /DS18B20 开始获取温度并转换dsreset();delay(1);tempwritebyte(0xcc);tempwritebyte(0x44);uint get_temp() /读取寄存器中存储的温度数据uchar a,b;dsreset();delay(1);tempwritebyte(0

7、xcc);tempwritebyte(0xbe);a=tempread();b=tempread();temp=b;temp=8;temp=temp|a;ftemp=temp*0.0625;temp=ftemp*10+0.5;ftemp=ftemp+0.05;return temp;void init_com(void) /串口初始化;PCON=0x00;SCON=0x50;TMOD=0x20;TH1=0xfd;TL1=0xfd;TR1=1;void comm(char *parr) /串口发送;doSBUF=*parr+;while(!TI);TI=0;while(*parr!=0);voi

8、d zdy() /自定义字符显示C; uchar i;write_com(0x40);for(i=0;i9;i+)write_date(tablei);write_com(0x80+0x40+14);write_date(0x00);void ok() /温度传感器存在显示温度;uchar i;write_com(0x80);for(i=0;i16;i+)write_date(table1i);write_com(0x80+0x40);for(i=0;i16;i+)write_date(table2i);void error() /温度传感器不存在 显示错误;uchar i;write_com

9、(0x80);for(i=0;i16;i+)write_date(table3i);write_com(0x80+0x40);for(i=0;i16;i+)write_date(table4i);void display() /液晶显示温度;write_com(0x80+0x40+10);write_date(temp/100+0x30);write_com(0x80+0x40+11);write_date(temp%100/10+0x30);write_com(0x80+0x40+13);write_date(temp%100%10+0x30); void fmq(uint i) /蜂鸣器滴

10、答;beep=0;delay(i);beep=1;void dywd(uchar add,uchar date) /定义温度 液晶显示;uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_date(0x30+shi);write_date(0x30+ge);void di() /蜂鸣器滴答;beep=0;delay(100);beep=1; uint keyscan() /按键扫描,调标准温度;uchar f;if(a=0)delay(10);if(a=0)k+;while(!a);di();write_com(0x80)

11、;f=0;while(table5f!=0)write_date(table5f);f+;write_com(0x80+0x40);f=0;while(table6f!=0)write_date(table6f);f+;dywd(4,g1);dywd(12,g2);dywd(4+0x40,d1);dywd(12+0x40,d2);if(k=1)write_com(0x80+5); write_com(0x0f); if(k=2)write_com(0x80+13); write_com(0x0f); if(k=3)write_com(0x80+0x40+5); write_com(0x0f);

12、 if(k=4)write_com(0x80+0x40+13); write_com(0x0f); if(k=5)write_com(0x0c);if(k!=0)if(b=0)delay(10);if(b=0)while(!b);di();if(k=1)g1-;if(g1=0)g1=60;dywd(4,g1);write_com(0x80+5);if(k=2)g2-;if(g1=0)g2=60;dywd(12,g2);write_com(0x80+13);if(k=3)d1-;if(g1=0)d1=60;dywd(4+0x40,d1);write_com(0x80+0x40+5);if(k=4

13、)d2-;if(g1=0)d2=60;dywd(12+0x40,d2);write_com(0x80+0x40+13);return g1;return g2;return d1;return d2;void warn(uint temp) /温度报警;uchar a=d2,b=d1,c=g1,d=g2;if(temp=a*10) /灯 1,2 亮;P0=0xfc;fmq(250);display(); else if(temp=a*10) /灯 3 亮;P0=0xfb;fmq(20);display(); else if(temp=a*10) /灯 4,5 亮;P0=0xe7;display

14、();beep=1; if(tempc*10)&(temp=d*10) /灯 7,8 亮;P0=0x3f;fmq(250);display(); void main() /主函数uchar buff4;init_com(); /串口初始化;init(); /液晶初始化状态;dsreset(); /DS18B20复位 初始化函数; tempchange(); /DS18B20 开始获取温度并转;get_temp(); /读取寄存器中存储的温度数据while(1)keyscan(); if(k=5)ok(); /温度传感器存在程序;dotempchange();sprintf(buff,%f,ftemp);comm(buff); /串口发送;zdy();warn(get_temp();while(!DQ); error(); /温度传感器不存在程序;dofmq(1);dsreset();P0=0x00;while(DQ);

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

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