




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include < reg51.h >#include < intrins.h >#define uchar unsigned char#define uint unsigned intsbit DQ = P27 ; /定义DS18B20端口DQ void reset();
2、 /DS18B20复位函数 void write_byte(uchar val); /DS18B20写命令函数 uchar read_byte(void);
3、 /DS18B20读1字节函数 void read_temp(); /温度读取函数 void work_temp(); &
4、#160; /温度数据处理函数 sbit BEEP=P25 ; /蜂鸣器驱动线 bit presence
5、160; ;sbit LCD_RS = P35 ; sbit LCD_RW = P36 ;sbit LCD_EN = P37 ;uchar code cdis1 = " SETTEMP: 50.C " ;uchar code cdis2 = " TESTTEMP:
6、60; . C " ;uchar code cdis3 = " DS18B20 ERR0R " ;uchar code cdis4 = " PLEASE CHECK " ;unsigned char data temp_data2 = 0x00,0x00 ;unsigned char data display5 = 0x
7、00,0x00,0x00,0x00,0x00 ;unsigned char code ditab16 = 0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09 ;void beep() ; unsigned char code mytab8 = 0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00 ;#define delayNOP() ; _nop_() ;_nop_() ;_
8、nop_() ;_nop_() ; ;/*/void delay1(int ms)unsigned char y ; while(ms-) for(y = 0 ; y<250 ; y+) _nop_() ; _nop_() ; _nop_() ; _nop_() ; /*/*检查LCD忙状态
9、 */*lcd_busy为1时,忙,等待。lcd
10、-busy为0时,闲,可写指令与数据。 */*/ bit lcd_busy() bit result ; LCD_RS = 0 ;
11、 LCD_RW = 1 ; LCD_EN = 1 ; delayNOP() ; result = (bit)(P1&0x80) ; LCD_EN = 0 ; return(result) ; /*写指令数据到LCD
12、60; */*RS=L,RW=L,E=高脉冲,D0-D7=指令码。
13、60; */*/void lcd_wcmd(uchar cmd) while(lcd_busy() ; LCD_RS = 0 ; &
14、#160; LCD_RW = 0 ; LCD_EN = 0 ; _nop_() ; _nop_() ; P1 = cmd ; delayNOP() ; LCD_EN = 1 ; delayNOP() ; LCD_E
15、N = 0 ; /*/*写显示数据到LCD */*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */*/void lcd_wdat(uchar dat)
16、; while(lcd_busy() ; LCD_RS = 1 ; LCD_RW = 0 ; LCD_EN = 0 ;
17、 P1 = dat ; delayNOP() ; LCD_EN = 1 ; delayNOP() ; LCD_EN = 0 ; /* LCD初始化设定
18、60; */*/void lcd_init() delay1(15) ; lcd
19、_wcmd(0x01) ; /清除LCD的显示内容 lcd_wcmd(0x38) ; /16*2显示,5*7点阵,8位数据 delay1(5) ; lc
20、d_wcmd(0x38) ; delay1(5) ; lcd_wcmd(0x38) ; delay1(5) ; lcd_wcmd(0x0c) ;
21、0; /显示开,关光标 delay1(5) ; lcd_wcmd(0x06) ; /移动光标 delay1(5) ; lcd_wcmd(0x01) ; /清除LCD的显示内容
22、 delay1(5) ;/* 设定显示位置 */*/void lcd_pos(uchar pos)
23、; lcd_wcmd(pos | 0x80) ; /数据指针=80+地址变量 /*自定义字符写入CGRAM
24、 */*/void writetab() unsigned char i ; lcd_wcmd(0x40) ;
25、60; /写CGRAM for (i = 0 ; i< 8 ; i+) lcd_wdat(mytab i ) ; /*us级延时函数 &
26、#160; */*/void Delay(unsigned int num) while( -num ) ;/*初始化ds1820 &
27、#160; */*/Init_DS18B20(void) DQ = 1 ; /DQ复位
28、60; Delay(8) ; /稍做延时 DQ = 0 ; /单片机将DQ拉低 Delay(90) ; /精确延时 大于 480us DQ = 1 ;
29、 /拉高总线 Delay(8) ; presence = DQ ; /如果=0则初始化成功 =1则初始化失败 Delay(100) ; DQ = 1 ;
30、; return(presence) ; /返回信号,0=presence,1= no presence /* 读一个字节 */*/ReadOneChar(void)unsigned char i = 0 ;unsigned char dat = 0
31、 ;for (i = 8 ; i > 0 ; i-) DQ = 0 ; / 给脉冲信号 dat >>= 1 ; DQ = 1 ; / 给脉冲信号 if(DQ) dat |= 0x80 ; Delay(4) ;
32、0; return (dat) ;/* 写一个字节 */*
33、/WriteOneChar(unsigned char dat) unsigned char i = 0 ; for (i = 8 ; i > 0 ; i-) DQ = 0 ; DQ = dat&0x01 ; Delay(5) ; DQ = 1 ; dat>>
34、=1 ; /* 读取温度 */*/Read_Temperature(void) Init_DS18B20() ;
35、60; WriteOneChar(0xCC) ; / 跳过读序号列号的操作 WriteOneChar(0x44) ; / 启动温度转换 Init_DS18B20() ; WriteOneChar(0xCC) ; /跳过读序号列号的操作
36、 WriteOneChar(0xBE) ; /读取温度寄存器 temp_data0 = ReadOneChar() ; /温度低8位 temp_data1 = ReadOneChar() ; /温度高8位 /* 数据转换与温度显示
37、60; */*/Disp_Temperature() display4=temp_data0&a
38、mp;0x0f ; display0=ditabdisplay4+0x30 ; /查表得小数位的值 display4=(temp_data0&0xf0)>>4)|(temp_data1&0x0f)<<4) ; display3=display4/100+0x30 ; display1=display4%100 ;
39、display2=display1/10+0x30 ; display1=display1%10+0x30 ; if(display3=0x30) /高位为0,不显示 display3=0x20 ; &
40、#160; if(display2=0x30) /次高位为0,不显示 display2=0x20 ; lcd_pos(0x48) ;
41、60; lcd_wdat(display3) ; /百位数显示 lcd_pos(0x49) ; lcd_wdat(display2) ; &
42、#160; /十位数显示 lcd_pos(0x4a) ; lcd_wdat(display1) ; /个位数显示 lcd_pos(0x4c) ;
43、60; lcd_wdat(display0) ; /小数位数显示 /*/* 蜂鸣器响一声
44、160; */*/void beep() unsigned char y ; for (y=0 ;y<100 ;y+) Delay(60) ; BEEP=!BEEP ; &
45、#160; /BEEP取反 BEEP=1 ; /关闭蜂鸣器 Delay(40000) ; /* DS18B20 OK 显示菜单&
46、#160; */*/void Ok_Menu (
47、) uchar m ; lcd_init() ; /初始化LCD lcd_pos(0) ;
48、 /设置显示位置为第一行的第1个字符 m = 0 ; while(cdis1m != '0')
49、60; /显示字符 lcd_wdat(cdis1m) ; m+ ; lcd_po
50、s(0x40) ; /设置显示位置为第二行的第1个字符 m = 0 ; while(cdis2m != '0')
51、 lcd_wdat(cdis2m) ; /显示字符 m+ ; writetab() ; /自定义字符写入CGRAM &
52、#160; delay1(5) ; lcd_pos(0x4d) ; lcd_wdat(0x00) ; /显示自定义字符 /* DS18B20 ERROR 显示菜单 */*/void Error_Menu ()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025园林景观设计劳务合同模板
- 商业使用版权合同协议
- 商品房装修协议合同协议
- 欺诈签订赔偿协议书范本
- 2025标准房屋抵押借款合同
- 2025年版单位房屋租赁合同样本
- 2025专业版设备融资租赁合同模板
- 2025届河南省新乡金太阳高三二模考试英语试题及答案
- 2025融资租赁合同样本
- 社区农业生产资源利用合作协议
- 工业管道的分类和分级
- 辽宁省高中毕业生登记表含成绩表学年评语表体检表家庭情况调查表完整版高中档案文件
- 壁饰设计(课堂PPT)
- 易拉罐回收机设计毕业设计
- 钢管扣件进场验收记录
- 安徽合肥住宅工程质量通病防治导则
- 《抑郁症健康教育》PPT课件.ppt
- 金属材料学答案戴起勋(复试).docx
- 试题的难度、区分度、信度和效度【最新】
- 26个英语字母棒棒体练字模板AZWord版
- 中华讲师网许春辉:理能养生法
评论
0/150
提交评论