




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#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 /启动温度变换 #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_TempData;/引脚定义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 char 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, 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 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(0x38);/设置显示模式: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 char 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 = 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 = 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;/读一个字节(从低位开始读)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(*(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 = 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(ROMData2); 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)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);D
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高效沟通技能培训
- 运动控制功能课件
- 动物小游戏课件
- 课件显示画图过程
- 广东会计自考试题及答案
- 广东法律自考试题及参考答案
- 控制数考试题及答案
- 装岩机司机岗前考核试卷及答案
- 离心铸管工三级安全教育(公司级)考核试卷及答案
- 矿山设备运行协调员基础考核试卷及答案
- 混凝土拌合物性能检验原始记录
- 沥青砼下面层试验段施工方案
- 固体料仓 (2.26)设计计算
- JJG 52-2013弹性元件式一般压力表、压力真空表和真空表
- GB/T 33009.2-2016工业自动化和控制系统网络安全集散控制系统(DCS)第2部分:管理要求
- GB/T 14534-1993电磁吸盘
- GA/T 718-2007枪支致伤力的法庭科学鉴定判据
- 工程常见质量通病防治课件
- 装备制造业研究报告
- 【课件】第6课 西方的文官制度 课件高中历史统编版(2019)选择性必修一国家制度与社会治理
- 进场人员、机械、材料报审表
评论
0/150
提交评论