




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include #include #define uchar unsigned char#define uint unsigned intsbit DQ = P33; /定义DS18B20端口DQ sbit BEEP=P37 ; /蜂鸣器驱动线bit presence,flag;bit compare_th,compare_tl,alarm_on_off=0,temp_th,temp_tl;sbit LCD_RS = P20; sbit LCD_RW = P21;sbit LCD_EN = P22;sbit K1 = P14;sbit K2 = P15;sbit K3 = P16;sbit
2、K4 = P17;uchar code cdis1 = READ_ROMCORD ;uchar code cdis2 = ;uchar code cdis3 = DS18B20 ERROR ;uchar code cdis4 = PLEASE CHECK ;uchar code cdis5 = TEMP: ;uchar code cdis6 = TH: TL: ;unsigned char data temp_data2 = 0x00,0x00;unsigned char data temp_alarm2 = 0x00,0x00;unsigned char data display5 = 0x
3、00,0x00,0x00,0x00,0x00; /温度值显示unsigned char data display13 = 0x00,0x00,0x00; /温度报警值显示/unsigned char code ditab16 = 0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,/ 0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09;unsigned char data RomCode8 = 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00;unsigned char code mytab18 = 0x0C
4、,0x12,0x12,0x0C,0x00,0x00,0x00,0x00;unsigned char code mytab28 = 0x01,0x1b,0x1d,0x19,0x1d,0x1b,0x01,0x00;/小喇叭#define delayNOP(); _nop_();_nop_();_nop_();_nop_();unsigned char Temp,temp_comp,timecount,count;unsigned char crc;void Disp_Temp_alarm(uchar addr,uchar num);void spk(uchar addr);void set_tem
5、p_alarm();void temp_compare();void beep();/*/void delay1(int ms) unsigned char y; while(ms-) for(y = 0; y250; y+) _nop_(); _nop_(); _nop_(); _nop_(); /*/* */*检查LCD忙状态 */*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */* */*/ bit lcd_busy() bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP(); result
6、 = (bit)(P0&0x80); LCD_EN = 0; return(result); /*/* */*写指令数据到LCD */*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */* */*/void lcd_wcmd(uchar cmd) while(lcd_busy(); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; /*/* */*写显示数据到LCD */*RS=H,RW=L,E=高脉冲,D0-D7
7、=数据。 */* */*/void lcd_wdat(uchar dat) while(lcd_busy(); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; /*/* */*自定义字符写入CGRAM */* */*/void writetab() unsigned char i; lcd_wcmd(0x40); /写CGRAM for (i = 0; i 8; i+) lcd_wdat(mytab1i); for (i = 0; i 0; i-) DQ
8、= 0; / 给脉冲信号 dat = 1; DQ = 1; / 给脉冲信号 if(DQ) dat |= 0x80; Delay(4); return (dat);/*/* */* 写一个字节 */* */*/WriteOneChar(unsigned char dat) unsigned char i = 0; for (i = 8; i 0; i-) DQ = 0; DQ = dat&0x01; Delay(5); DQ = 1; dat=1; /*/* */* 温度报警值写入DS18B20 */* */*/Write_Temperature_alarm(void) Init_DS18B20
9、(); WriteOneChar(0xCC); /跳过读序号列号的操作 WriteOneChar(0x4e); /将设定的温度报警值写入 DS18B20WriteOneChar(temp_alarm0); /写THWriteOneChar(temp_alarm1); /写TL WriteOneChar(0x7f); /12位精确度Init_DS18B20(); WriteOneChar(0xCC); /跳过读序号列号的操作 WriteOneChar(0x48); /把暂存器里的温度报警值拷贝到EEROM/*/* */* 读取64位序列码 */* */*/Read_RomCord(void) u
10、nsigned char j; Init_DS18B20(); WriteOneChar(0x33); / 读序列码的操作 for (j = 0; j 8; j+) RomCodej = ReadOneChar() ; /*/* */*DS18B20的CRC8校验程序 */* */*/uchar CRC8() uchar i,x; uchar crcbuff; crc=0; for(x = 0; x 8; x+) crcbuff=RomCodex; for(i = 0; i = 1; else crc = 0x18; /CRC=X8+X5+X4+1 crc = 1; crc |= 0x80;
11、crcbuff = 1; return crc; /*/* */* 数据转换与显示 */* */*/Disp_RomCode(uchar H_num) uchar j; if(H_num=1) lcd_pos(0x00); if(H_num=2) lcd_pos(0x40); for(j=0;j4); if(display09) display0=display0+0x37; elsedisplay0=display0+0x30; lcd_wdat(display0); /高位数显示 display1=(Temp&0x0f); if(display19) display1=display1+0
12、x37; else display1=display1+0x30; lcd_wdat(display1); /低位数显示 /*/* */* 读取温度 */* */*/Read_Temperature(void) uchar i; TR0=0; /关中断,防止读数错误 Init_DS18B20(); WriteOneChar(0xCC); /跳过读序号列号的操作 WriteOneChar(0x44); /启动温度转换 Init_DS18B20(); WriteOneChar(0x55); /匹配ROM命令 for(i=0;i4)|(temp_data1&0x0f)127) /温度为负值 temp
13、_data0=(temp_data0)+1; /取反加一,将补码变成原码 if(temp_data0)=0xff) temp_data1=(temp_data1)+1; else temp_data1=temp_data1; s=1; display4=temp_data0&0x0f; display0=(display4*10/16)+0x30; display4=(temp_data0&0xf0)4)|(temp_data1&0x0f)4); display3=display4/100+0x30; display1=display4%100; display2=display1/10+0x
14、30; display1=display1%10+0x30; if(display3=0x30) /高位为0,不显示 display3=0x20; if(display2=0x30) /次高位为0,不显示 display2=0x20; if(s) display3=0x2d; /显示负号 lcd_pos(0x07); lcd_wdat(display3); /百位数显示 lcd_wdat(display2); /十位数显示 lcd_wdat(display1); /个位数显示 lcd_wdat(.); lcd_wdat(display0); /小数位数显示lcd_wdat(0x00); /显示
15、自定义字符 lcd_wdat(C); /显示C /*/* */* 蜂鸣器响一声 */* */*/void beep() unsigned char y; for (y=0;y100;y+) Delay(70); BEEP=!BEEP; /BEEP取反 BEEP=1; /关闭蜂鸣器Delay(25000);/*/* */* ROMCORD 显示菜单 */* */*/void RomCode_Menu () uchar m; lcd_init(); /初始化LCD lcd_pos(0); /设置显示位置为第一行 for(m=0;m16;m+) /显示字符 lcd_wdat(cdis1m); Rea
16、d_RomCord(); /读取64位序列码 CRC8(); /CRC效验 if(crc=0) /CRC效验正确 Disp_RomCode(2); /显示64位序列码 /*/* */* DS18B20 ERROR 显示菜单 */* */*/void Error_Menu () uchar m; lcd_init(); /初始化LCD lcd_pos(0); /设置显示位置为第一行的第1个字符 for(m=0;m16;m+) lcd_wdat(cdis3m); /显示字符 lcd_pos(0x40); /设置显示位置为第二行第1个字符 for(m=0;m16;m+) lcd_wdat(cdis4
17、m); /显示字符/*/* */* DS18B20 正常显示菜单 */* */*/void Natural_Menu () uchar m; lcd_init(); /初始化LCD lcd_pos(0); /设置显示位置为第一行的第1个字符 for(m=0;m16;m+) lcd_wdat(cdis5m); /显示字符 lcd_pos(0x40); /设置显示位置为第二行第1个字符 for(m=0;m16;m+) lcd_wdat(cdis6m); /显示字符 Read_Temperature(); Disp_Temp_alarm(0x43,0); /显示TH值 Disp_Temp_alarm
18、(0x4b,1); /显示TL值 Disp_Temperature(); /显示实时温度值/*/* */* 主函数 */* */*/void main() uchar m; TMOD=0x01; TH0=0x4c; TL0=0x00; /50ms定时 EA=1; ET0=1; TR0=1; while(1) Init_DS18B20(); if(presence) Error_Menu ();do Init_DS18B20(); beep(); while(presence); RomCode_Menu (); /显示RomCode for(m=0;m9) timecount=0; flag=flag; /*/* */*小喇叭闪动 */* */*/void spk(uchar addr) if(flag) lcd_pos(addr); lcd_wdat(0x01); /小喇叭显示 else
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乡村老人阅读题目及答案
- 现代刑侦推理题目及答案
- 葡萄糖知识培训课件
- 2024译林版八年级英语上册Unit3 单元测试卷及答案(含两套题)
- 2025计时工的劳动合同
- 物权法自考试题及答案
- 2025电气设备采购合同
- 新实英语综合教程(第二册) 课件 U6 China and the World
- 营销师操作规程培训课件
- 2025联营企业合作协议
- 鼓号队培训课件内容
- 液体外渗的预防与处理 2
- 2025山西吕梁文水县公办幼儿园幼儿业务辅助人员招聘120人笔试参考题库附答案解析
- 柚子树栽培技术
- 上腔静脉综合征护理查房
- 安徽省2025年公需科目培训测验答案(科目一)
- 2025年新退休返聘人员协议书
- 公共财产管理办法
- 《中国玫瑰痤疮诊疗指南》解读
- 造纸工艺工程师(涂布)岗位面试问题及答案
- 2025至2030中国高通量测序技术(NGS)行业产业运行态势及投资规划深度研究报告
评论
0/150
提交评论