版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include < reg51.h >#include < intrins.h >#define uchar unsigned char#define uint unsigned intsbit DQ = P2A7 ;void reset(); void write_byte(uchar val); uchar read_byte(void);void read_temp(); void work_temp();sbit BEEP=P2A5 ;/定义 DS18B20 端口 DQ/DS18B20 复位函数 /DS18B20 写命令函数/DS18B20 读 1 字节函数/
2、 温度读取函数/温度数据处理函数/蜂鸣器驱动线bit presence ;sbit LCD_RS = P3A5 ;sbit LCD_RW = P3A6 ;sbit LCD_EN = P3A7 ;uchar code cdis1 = " SETTEMP: 50.C " ;uchar code cdis2 = " TESTTEMP:. C " ;uchar code cdis3 = " DS18B20 ERR0R " ;uchar code cdis4 = " PLEASE CHECK " ;unsigned char
3、 data temp_data2 = 0x00,0x00 ;unsigned char data display5 =0x00,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_() ;
4、_nop_() ;_nop_() ;_nop_() ; ;/*/void delay1(int ms)unsigned char y ;while(ms-)for(y = 0 ; y<250 ; 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 = (bit)(
5、P1&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_() ;P1 = cmd ;delayNOP() ;LCD_EN = 1 ;delayNOP() ;LCD_EN = 0 ;*/* 写显示数据到 LCD*/*/*RS=H , RW=L , E=高脉冲,D0-D7=数据。*v
6、oid lcd_wdat(uchar dat)while(lcd_busy() ;LCD_RS = 1 ;LCD_RW = 0 ;LCD_EN = 0 ;P1 = dat ;delayNOP() ;LCD_EN = 1 ;delayNOP() ;LCD_EN = 0 ;/* LCD 初始化设定 */*/void lcd_init()delay1(15) ;lcd_wcmd(0x01) ;/ 清除 LCD 的显示内容lcd_wcmd(0x38) ; /16*2 显示, 5*7 点阵, 8 位数据delay1(5) ;lcd_wcmd(0x38) ;delay1(5) ;lcd_wcmd(0x38
7、) ;delay1(5) ;lcd_wcmd(0x0c) ;/显示开,关光标delay1(5) ;lcd_wcmd(0x06) ; / 移动光标delay1(5) ;lcd_wcmd(0x01) ; / 清除 LCD 的显示内容delay1(5) ;/* 设定显示位置 */*/void lcd_pos(uchar pos)lcd_wcmd(pos | 0x80) ;/ 数据指针 =80+ 地址变量/* 自定义字符写入 CGRAM*/void writetab()unsigned char i ;lcd_wcmd(0x40) ;/写 CGRAMfor (i = 0 ; i< 8 ; i+)
8、lcd_wdat(mytab i ) ;*/*us 级延时函数*/void Delay(unsigned int num)while( -num ) ;/*初始化 ds1820*/*/Init_DS18B20(void)DQ = 1 ; /DQ 复位Delay(8) ;/ 稍做延时DQ = 0 ;/单片机将 DQ 拉低Delay(90) ;/精确延时 大于 480usDQ = 1 ;/拉高总线Delay(8) ;presence = DQ ;/如果 =0 则初始化成功 =1 则初始化失败Delay(100) ;DQ = 1 ;return(presence) ; / 返回信号, 0=prese
9、nce,1= no presence/* 读一个字节 */*ReadOneChar(void)unsigned char i = 0 ;unsigned char dat = 0 ;for (i = 8 ; i > 0 ; i-)DQ = 0 ; / 给脉冲信号dat >>= 1 ;DQ = 1 ; / 给脉冲信号if(DQ)dat |= 0x80 ;Delay(4) ;return (dat) ;lcd_pos(0x40) ;/设置显示位置为第二行的第1 个字符*/* 写一个字节*WriteOneChar(unsigned char dat)unsigned char i
10、= 0 ;for (i = 8 ; i > 0 ; i-)DQ = 0 ;DQ = dat&0x01 ;Delay(5) ;DQ = 1 ;dat>>=1 ;/* 读取温度 */lcd_pos(0x40) ;/设置显示位置为第二行的第1 个字符lcd_pos(0x40) ;/设置显示位置为第二行的第1 个字符Read_Temperature(void)Init_DS18B20() ;WriteOneChar(0xCC) ;/ 跳过读序号列号的操作WriteOneChar(0x44) ; / 启动温度转换Init_DS18B20() ;WriteOneChar(0xCC
11、) ;/跳过读序号列号的操作WriteOneChar(0xBE) ;/读取温度寄存器temp_data0 = ReadOneChar() ;/温度低 8 位temp_data1 = ReadOneChar() ;/温度高 8 位/* 数据转换与温度显示 */*/Disp_Temperature()display4=temp_data0&0x0f ;display0=ditabdisplay4+0x30 ;/查表得小数位的值 display4=(temp_data0&0xf0)>>4)|(temp_data1&0x0f)<<4) ;display3
12、=display4/100+0x30 ;display1=display4%100 ;display2=display1/10+0x30 ;display1=display1%10+0x30 ;if(display3=0x30)/高位为 0 ,不显示display3=0x20 ;if(display2=0x30)/次高位为 0 ,不显示display2=0x20 ;lcd_pos(0x48) ;lcd_wdat(display3) ;/ 百位数显示lcd_pos(0x49) ;lcd_wdat(display2) ;/ 十位数显示lcd_pos(0x4a) ;lcd_wdat(display1
13、) ;/ 个位数显示lcd_pos(0x4c) ;lcd_wdat(display0) ; / 小数位数显示lcd_pos(0x40) ;/设置显示位置为第二行的第1 个字符lcd_pos(0x40) ;/设置显示位置为第二行的第1 个字符/* 蜂鸣器响一声 */lcd_pos(0x40) ;/设置显示位置为第二行的第1 个字符lcd_pos(0x40) ;/设置显示位置为第二行的第1 个字符void beep()unsigned char y ;for (y=0 ;y<100 ;y+)Delay(60) ;BEEP=!BEEP ;/BEEP 取反BEEP=1 ;/ 关闭蜂鸣器Delay
14、(40000) ;*/* DS18B20 OK 显示菜单void Ok_Menu ()uchar m ;lcd_init() ;/初始化 LCDlcd_pos(0) ;/设置显示位置为第一行的第 1 个字符m = 0 ;while(cdis1m != '0')/ 显示字符lcd_wdat(cdis1m) ;m+ ;m = 0 ;while(cdis2m != '0')lcd_wdat(cdis2m) ;/ 显示字符m+ ;writetab() ;/ 自定义字符写入 CGRAMdelay1(5) ;lcd_pos(0x4d) ;lcd_wdat(0x00) ;/ 显示自定义字符/* DS18B20 ERROR 显示菜单 */*/void Error_Menu () uchar m ;lcd_init() ;/ 初始化 LCDlcd_pos(0) ;/设置显示位置为第一行的第 1 个字符m = 0 ;while(cdis3m != '0')/ 显示字符lcd_wdat(cdis3m) ;m+ ;lcd_pos(0x40) ;/设
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度商铺租赁合同解除及商业风险评估及解决方案合同
- 南京市公司2025年度劳务派遣工工作绩效考核协议
- 2025年度商铺租赁及附属设施经营权转让合同
- 二零二五年度美团商家入驻平台市场拓展协议2篇
- 二零二五年度厂区门卫安全教育与培训服务合同细则2篇
- 二零二五年度品质生活商品房预售资金监管与品质管理协议
- 小学数学课堂教学质量提升的途径与方法
- 二零二五年度商铺经营权放弃及转让协议
- 二零二五年度新型城镇化背景下医院双向转诊合作协议
- 二零二五年度货物装卸与城市物流配送优化合同6篇
- 中海地产设计管理程序
- 万吨钛白粉项目建议
- 简谱视唱15942
- 化妆品购销合同范本
- 7725i进样阀说明书
- 银监会流动资金贷款需求量测算表
- 榴园小学寒假留守儿童工作总结(共3页)
- 初中物理-电功率大题专项
- 时光科技主轴S系列伺服控制器说明书
- 社会组织绩效考核管理办法
- 苏州智能数控机床项目投资计划书(模板)
评论
0/150
提交评论