读取DS18B20温度,通过LCD1602显示出来,并输出控制汇总_第1页
读取DS18B20温度,通过LCD1602显示出来,并输出控制汇总_第2页
读取DS18B20温度,通过LCD1602显示出来,并输出控制汇总_第3页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、电路原理图程序K1=P20; sbit K2=P21; sbit K3=P22; sbit K4=P23; extern int th=20; extern int tl=-10; sbit beep=P10;void main()LcdInit();LcdWriteCom(0xc7);LcdWriteData('C');while(1)if(K1=0)Delay1ms(500);if(K1=0);th+;if(K2=0)Delay1ms(500);if(K2=0);th-;if(K3=0)Delay1ms(500);if(K3=0);tl+;if(K4=0)Delay1ms(

2、500);if(K4=0);tl-;LcdDisplay(Ds18b20ReadTemp();void LcdDisplay(int temp)int i,tt,rr,mm;unsigned char datas = 0, 0, 0, 0,datas1 = 0, 0, 0,datas2 = 0, 0, 0;float tp;if(temp< 0)LcdWriteCom(0xc0);LcdWriteData('-');i=1;temp=temp-1; temp=temp; tp=temp; temp=tp*0.0625*10+0.5; mm=-temp;elseLcdWri

3、teCom(0xc0);LcdWriteData('+');tp=temp;temp=tp*0.0625*10+0.5; mm=temp;datas0 = temp / 1000; datas1 = temp % 1000 / 100; datas2 = temp % 100 / 10; datas3 = temp% 10;if(th < 0)LcdWriteCom(0x89);LcdWriteData('-'); tt=-th; else LcdWriteCom(0x89);LcdWriteData('+');tt=th;datas10

4、= tt / 100; datas11 = tt% 100 / 10; datas12 = tt % 10; LcdWriteCom(0x87); LcdWriteData('H'); LcdWriteCom(0x88); LcdWriteData(':'); LcdWriteCom(0x8a); LcdWriteData('0'+datas10); LcdWriteCom(0x8b);LcdWriteData('0'+datas11); LcdWriteCom(0x8c);LcdWriteData('0'+dat

5、as12);if(tl < 0)LcdWriteCom(0x90); LcdWriteData('-');rr=-tl; else LcdWriteCom(0x90);LcdWriteData('+');rr=tl;datas20 = rr / 100; datas21 = rr% 100 / 10; datas22 = rr % 10; LcdWriteCom(0x8e); LcdWriteData('L'); LcdWriteCom(0x8f); LcdWriteData(':'); LcdWriteCom(0x91);

6、 LcdWriteData('0'+datas20); LcdWriteCom(0x92);LcdWriteData('0'+datas21);LcdWriteCom(0x93);LcdWriteData('0'+datas22);if(mm>=(th*10)|mm<=(tl*10)|th<=tl) beep=0;elsebeep=1;LcdWriteCom(0x80);LcdWriteData('T');LcdWriteCom(0x81);LcdWriteData('A');LcdWriteCo

7、m(0x82);LcdWriteData('I');LcdWriteData(' ');LcdWriteCom(0x84);LcdWriteData('A');LcdWriteCom(0x85);LcdWriteData('N');LcdWriteCom(0xc1);LcdWriteData('0'+datas0);LcdWriteCom(0xc2);LcdWriteData('0'+datas1);LcdWriteCom(0xc3); LcdWriteData('0'+datas2

8、);LcdWriteCom(0xc4); LcdWriteData('.');LcdWriteCom(0xc5); LcdWriteData('0'+datas3);LcdWriteCom(0xc6); LcdWriteData('"');#ifndef _LCD_H_#define _LCD_H_ /* 当使用的是 4 位数据传输的时候定义, 使用 8 位取消这个定义*/ #define LCD1602_4PINS/*包含头文件#include<reg51.h>/- 重定义关键词 -/#ifndef uchar#defin

9、e uchar unsigned char#endif#ifndef uint#define uint unsigned int#endif/*PIN 口定义*/ #define LCD1602_DATAPINS P0 sbit LCD1602_E=P27;sbit LCD1602_RW=P25;sbit LCD1602_RS=P26;/*函数声明 /*在 51 单片机 12MHZ 时钟下的延时函数 */ void Lcd1602_Delay1ms(uint c); / 误差 0us /*LCD1602 写入 8 位命令子函数 */ void LcdWriteCom(uchar com);/*

10、LCD1602 写入 8 位数据子函数 */ void LcdWriteData(uchar dat) ;/*LCD1602 初始化子程序 */void LcdInit();#endif#ifndef _TEMP_H_#define _TEMP_H_#include<reg51.h>sbit DSPORT=P37;void Delay1ms(unsigned int ); unsigned char Ds18b20Init();void Ds18b20WriteByte(unsigned char com); unsigned char Ds18b20ReadByte();void

11、 Ds18b20ChangTemp();void Ds18b20ReadTempCom();int Ds18b20ReadTemp();#endif#include"lcd.h"void Lcd1602_Delay1ms(uint c)/ 延时uchar a,b;for (; c>0; c-)for (b=19;b>0;b-)for(a=1;a>0;a-);#ifndef LCD1602_4PINS /LCD1602_4PINS 时void LcdWriteCom(uchar com)当没有定义这个/写入一个字节命令LCD1602_E = 0;LCD160

12、2_RS = 0;LCD1602_RW = 0;LCD1602_DATAPINS = com;Lcd1602_Delay1ms(1);LCD1602_E = 1;Lcd1602_Delay1ms(5);LCD1602_E = 0;#elsevoid LcdWriteCom(uchar com)LCD1602_E = 0;LCD1602_RS = 0;LCD1602_RW = 0;P0LCD1602_DATAPINS = com; /由于 4 位的接线是接到 口的高四位,所以传送高四位不用改Lcd1602_Delay1ms(1);LCD1602_E = 1;Lcd1602_Delay1ms(5)

13、;LCD1602_E = 0;LCD1602_DATAPINS = com << 4; / 发送低四位Lcd1602_Delay1ms(1);LCD1602_E = 1;Lcd1602_Delay1ms(5);LCD1602_E = 0;#endif#ifndef LCD1602_4PINSvoid LcdWriteData(uchar dat) /写入一个字节数据 LCD1602_E = 0;LCD1602_RS = 1;LCD1602_RW = 0;LCD1602_DATAPINS = dat;Lcd1602_Delay1ms(1);LCD1602_E = 1;Lcd1602_

14、Delay1ms(5);LCD1602_E = 0;#elsevoid LcdWriteData(uchar dat)LCD1602_E = 0;LCD1602_RS = 1;LCD1602_RW = 0;P0LCD1602_DATAPINS = dat;/由于 4 位的接线是接到口的高四位,所以传送高四位不用改Lcd1602_Delay1ms(1);LCD1602_E = 1;/写入时序Lcd1602_Delay1ms(5);LCD1602_E = 0;LCD1602_DATAPINS = dat << 4; / 写入低四位Lcd1602_Delay1ms(1);LCD1602_

15、E = 1;/写入时序Lcd1602_Delay1ms(5);LCD1602_E = 0;#endif#ifndef LCD1602_4PINSvoid LcdInit() /LCD 初始化子程序 LcdWriteCom(0x38);LcdWriteCom(0x0c);LcdWriteCom(0x06);LcdWriteCom(0x01);LcdWriteCom(0x80);#elsevoid LcdInit()LcdWriteCom(0x32);LcdWriteCom(0x28);LcdWriteCom(0x0c);LcdWriteCom(0x06);LcdWriteCom(0x01);Lc

16、dWriteCom(0x80);#endif#include"temp.h"void Delay1ms(unsigned int y) / 延时 unsigned int x;for(y;y>0;y-)for(x=110;x>0;x-);unsigned char Ds18b20Init() / 初始化 unsigned int i;DSPORT=0;i=70;while(i-);DSPORT=1;i=0;while(DSPORT) i+;if(i>5000)return 0;/ 失败return 1;/ 成功void Ds18b20WriteByte(u

17、nsigned char dat) / 写字节 unsigned int i,j;for(j=0;j<8;j+)DSPORT=0; / 每写入一位数据之前先把总线拉 低 1us (数据手册上模糊)i+;DSPORT=dat&0x01;i=6;while(i-);DSPORT=1;dat>>=1;unsigned char Ds18b20ReadByte() unsigned char byte,bi;unsigned int i,j;for(j=8;j>0;j-)DSPORT=0;i+;DSPORT=1;i+;i+;bi=DSPORT;byte=(byte>>1)|(bi<<7);i=4;while(i-);return byte;void Ds18b20ChangTemp() / 温度转换Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc);Ds18b20WriteByte(0x44);/读取温度命令void Ds18b20Re

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论