




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.#include #include #defineDATAP1 /1602驱动端口/ROM操作命令#define READ_ROM 0x33 /读ROM #define SKIP_ROM 0xCC /跳过ROM #define MATCH_ROM 0x55 /匹配ROM #define SEARCH_ROM 0xF0 /搜索ROM #define ALARM_SEARCH 0xEC /告警搜索/存储器操作命令#define ANEW_MOVE 0xB8 /重新调出E2数据#define READ_POWER 0xB4 /读电源#define TEMP_SWITCH 0x44 /启动温度变换
2、#define READ_MEMORY 0xBE /读暂存存储器#define COPY_MEMORY 0x48 /复制暂存存储器#define WRITE_MEMORY 0x4E /写暂存存储器/数据存储结构typedef struct tagTempDataunsigned char btThird;/百位数据unsigned char btSecond;/十位数据unsigned char btFirst;/个位数据unsigned char btDecimal;/小数点后一位数据unsigned charbtNegative;/是否为负数TEMPDATA;TEMPDATA m_Temp
3、Data;/引脚定义sbit DQ = P27;/数据线端口sbit RS=P20;sbit RW=P21;sbit E=P22;/DS18B20序列号,通过调用GetROMSequence()函数在P1口读出(读8次)const unsigned char code ROMData18 = 0x28, 0x33, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0xD7;/U1const unsigned char code ROMData28 = 0x28, 0x30, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x8E;/U2const unsigned c
4、har code ROMData38 = 0x28, 0x31, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0xB9;/U3const unsigned char code ROMData48 = 0x28, 0x32, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0xE0;/U4const unsigned char code ROMData58 = 0x28, 0x34, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x52;/U5const unsigned char code ROMData68 = 0x28, 0x35, 0xC5,
5、0xB8, 0x00, 0x00, 0x00, 0x65;/U6const unsigned char code ROMData78 = 0x28, 0x36, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x3C;/U7const unsigned char code ROMData88 = 0x28, 0x37, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x0B;/U8/判断忙指令void Busy()DATA = 0xff;RS = 0;RW = 1; while(DATA & 0x80) E = 0; E = 1; E = 0;/写指令程序void
6、WriteCommand(unsigned char btCommand)Busy();RS = 0;RW = 0;E = 1;DATA = btCommand;E = 0;/写数据程序void WriteData(unsigned char btData)Busy();RS = 1;RW = 0;E = 1;DATA = btData;E = 0;/清屏显示void Clear()WriteCommand(1);/初始化void Init()WriteCommand(0x0c);/开显示,无光标显示WriteCommand(0x06);/文字不动,光标自动右移WriteCommand(0x3
7、8);/设置显示模式:8位2行5x7点阵/显示单个字符void DisplayOne(bit bRow, unsigned char btColumn, unsigned char btData, bit bIsNumber)if (bRow) WriteCommand(0xc0 + btColumn);else WriteCommand(0x80 + btColumn);if (bIsNumber) WriteData(btData + 0x30);else WriteData(btData);/显示字符串函数void DisplayString(bit bRow, unsigned cha
8、r btColumn, unsigned char *pData)while (*pData != 0) if (bRow) WriteCommand(0xc0 + btColumn);/显示在第1行 else WriteCommand(0x80 + btColumn);/显示在第0行WriteData(*(pData+);/要显示的数据btColumn+;/列数加一 /延时16us子函数void Delay16us()unsigned char a;for (a = 0; a 4; a+);/延时60us子函数void Delay60us()unsigned char a;for (a =
9、0; a 18; a+);/延时480us子函数void Delay480us()unsigned char a;for (a = 0; a 158; a+);/延时240us子函数void Delay240us()unsigned char a;for (a = 0; a 78; a+);/延时500ms子函数void Delay500ms()unsigned char a, b, c;for (a = 0; a 250; a+)for (b = 0; b 3; b+)for (c = 0; c 220; c+);/芯片初始化void Initialization()while(1)DQ =
10、 0;Delay480us(); /延时480usDQ = 1;Delay60us();/延时60usif(!DQ) /收到ds18b20的应答信号DQ = 1;Delay240us();/延时240usbreak;/写一个字节(从低位开始写)void WriteByte(unsigned char btData)unsigned char i, btBuffer;for (i = 0; i i;if (btBuffer & 1)DQ = 0;_nop_();_nop_();DQ = 1;Delay60us();elseDQ = 0;Delay60us();DQ = 1;/读一个字节(从低位开
11、始读)unsigned char ReadByte()unsigned char i, btDest;for (i = 0; i = 1;DQ = 0;_nop_();_nop_();DQ = 1;Delay16us();if (DQ) btDest |= 0x80; Delay60us();return btDest;/序列号匹配void MatchROM(const unsigned char *pMatchData)unsigned char i;Initialization();WriteByte(MATCH_ROM);for (i = 0; i 8; i+) WriteByte(*(
12、pMatchData + i);/得到64位ROM序列(在P1口显示,必须与Proteus联调且在单步调试下才能得到)/*void GetROMSequence()unsigned char i;Initialization();WriteByte(READ_ROM);for (i = 0; i 8; i+)P1 = ReadByte();*/读取温度值TEMPDATA ReadTemperature()TEMPDATA TempData;unsigned int iTempDataH;unsigned char btDot, iTempDataL;static unsigned char i
13、 = 0;TempData.btNegative = 0;/为0温度为正i+;if (i = 9) i = 1;Initialization();WriteByte(SKIP_ROM);/跳过ROM匹配WriteByte(TEMP_SWITCH);/启动转换Delay500ms(); /调用一次就行Delay500ms(); Initialization();/多个芯片的时候用MatchROM(ROMData)换掉WriteByte(SKIP_ROM)switch (i)case 1 : MatchROM(ROMData1); break;/匹配1case 2 : MatchROM(ROMDa
14、ta2); break;/匹配2case 3 : MatchROM(ROMData3); break;/匹配3case 4 : MatchROM(ROMData4); break;/匹配4case 5 : MatchROM(ROMData5); break;/匹配5case 6 : MatchROM(ROMData6); break;/匹配6case 7 : MatchROM(ROMData7); break;/匹配7case 8 : MatchROM(ROMData8); break;/匹配8/WriteByte(SKIP_ROM);/跳过ROM匹配(单个芯片时用这句换掉上面的switch)
15、WriteByte(READ_MEMORY);/读数据iTempDataL = ReadByte();iTempDataH = ReadByte();iTempDataH = 4;/得到整数部分btDot *= 5; /btDot*10/16得到转换后的小数数据btDot = 3;/数据处理TempData.btThird = (unsigned char)iTempDataH / 100;TempData.btSecond = (unsigned char)iTempDataH % 100 / 10;TempData.btFirst = (unsigned char)iTempDataH % 10;TempData.btDecimal = btDot;return TempData;/数据处理子程序void DataProcess()m_TempData = ReadTemperature();if (m_TempData.btNegative) DisplayOne(1, 6, -, 0);else DisplayOne(1, 6, m_TempData.btThird, 1);Di
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 员工培训计划与资源模板
- 多项目管理统筹的标准化流程
- 2025内蒙古鄂温克族自治旗融媒体中心多元化岗位招聘2人考前自测高频考点模拟试题及答案详解(新)
- 改编音乐的考试题及答案
- 医师卫生职称考试试题及答案
- 2025福建省市场监督管理局直属事业单位招聘高层次人才20人考前自测高频考点模拟试题及答案详解(典优)
- 2025年北京高教岗前培训考试题及参考答案
- 2025年保育员鉴定题库及答案
- 守秘义务与信息安全保障保证承诺书9篇
- 项目成本分析与控制工具包
- 《植物组织培养》课件 项目3 无菌操作技术
- 2025届广东省广州市高三4月二模生物试题(原卷版+解析版)
- 大中型企业安全生产标准化管理体系要求变化解读
- 装修装饰工程技术施工方案
- 非计划拔管的患者安全隐患及改善措施
- 《白银投资深度解析》课件
- 《煤的形成过程》课件
- 新版手术室护理实践指南解读
- 2024-2025学年浙江省宁波市鄞州区九年级(上)期末数学试卷(含答案)
- 发电机的工作原理
- AI一体化智慧校园建设方案中学版
评论
0/150
提交评论