using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
//Write by ZhuShiWei
namespace WindowsFormsApplication1
{
private bool Reset() //DS18B20 复位
{
byte[] resetRom = { 0xE0 };
serialPort1.BaudRate = 9600;
if (serialPort1.IsOpen) { serialPort1.Close(); }
serialPort1.Open();
serialPort1.Write(resetRom, 0, 1);
if (serialPort1.ReadByte() >= resetRom[0])
{ serialPort1.Close(); return false; }
serialPort1.Close();
serialPort1.BaudRate = 115200;
serialPort1.Open();
serialPort1.DiscardInBuffer();
Delay(1000);
return true;
}
private void Delay(int usecond) //延时
{
int max, idx = 0;
Thread.CurrentThread.Priority = ThreadPriority.Highest;
float total = 10000 * usecond / value;
max = (int)total;
while (idx < max) { idx++; }
Thread.CurrentThread.Priority = ThreadPriority.Normal;
}
//-----------------发送命令-------------------------------
private void ConvertCommand(byte command1, byte[] command2)
{
byte seed = 0x01;
for (int i = 0; i < 8; i++)
{
if ((command1 & seed) == 0) { command2[i] = 0x00; }
else { command2[i] = 0xFF; }
seed <<= 1;
}
}
private void WriteCommand(byte command)
{
byte[] commandbyte = new byte[8];
ConvertCommand(command, commandbyte);
if (!serialPort1.IsOpen) { serialPort1.Open(); }
serialPort1.Write(commandbyte, 0, 8);
}
//--------------------发送DS18B20 的 ID 号----------------
private void ConvertRomID(byte[] rombyte, byte[] rombit)
{
for (byte i = 0; i < 8; i++)
{
byte seed = 0x01;
for (byte j = 0; j < 8; j++)
{
if ((rombyte[i] & seed) == 0) { rombit[i * 8 + j] = 0x00; }
else { rombit[i * 8 + j] = 0xFF; }
seed <<= 1;
}
}
}
private void WriteRomID(byte[] rombyte)
{
byte[] rombit = new byte[64];
ConvertRomID(rombyte, rombit);
serialPort1.Write(rombit, 0, 64);
}
//--------------------读写位---------------------------
private byte WriteOneBit(byte onebit)
{
byte[] bit0 = { 0x00 },bit1={0xFF};
if (!serialPort1.IsOpen) { serialPort1.Open(); }
serialPort1.DiscardInBuffer();
if (onebit == 0) { serialPort1.Write(bit0, 0, 1); }
else { serialPort1.Write(bit1, 0, 1); }
Delay(100);return (byte)serialPort1.ReadByte();
}
private byte WriteOneByte(byte onebyte)
{
byte[] byteone = { onebyte };
if (!serialPort1.IsOpen) { serialPort1.Open(); }
serialPort1.DiscardInBuffer();
serialPort1.Write(byteone, 0, 1);
Delay(100);return (byte)serialPort1.ReadByte();
}
private byte ReadOneBit()
{
byte[] startbyte = { 0xFF };
if (!serialPort1.IsOpen) { serialPort1.Open(); }
serialPort1.DiscardInBuffer();
serialPort1.Write(startbyte, 0, 1);Delay(100);
return (byte)serialPort1.ReadByte();
}
private byte ReadOneByte()
{
byte onebit, byteone = 0x00;
for (int i = 0; i < 8; i++)
{
byteone >>= 1; //Delay(500);
onebit = ReadOneBit();
if (onebit > 252) { byteone ^= 0x80; }
} return (byte)byteone;
}
//==========================搜索ID号等功能函数===============================
unsafe private byte SearchRom(ref Stack<byte> lastdiff, byte* buffer)
{
byte bit,topvalue,tmpdata=0;
if (!Reset()) { return over_time; }
WriteCommand(search_rom); // ROM search command
for(byte i=0;i<64;)
{
if ((i & 0x07) == 0) { tmpdata = *buffer; }
{
bit = ReadOneBit(); // read first bit
if (bit > 252) { bit = 1; } else { bit = 0; }
if (ReadOneBit() > 252) // x1
{ if ( bit==1 ) { return data_err; } } // 11 -data error
else if (bit ==0 ) // 00
{ if (lastdiff.Count > 0)
{ topvalue = lastdiff.Pop();
lastdiff.Push(topvalue);
if (i < topvalue) { if ((tmpdata & 0x01) == 1) { bit = 1; } }
else if (i == topvalue) { lastdiff.Pop(); bit = 1; }
else { lastdiff.Push(i); }
}else { lastdiff.Push(i); }
}
WriteOneBit(bit); // write bit
tmpdata >>= 1; // store bit
if (bit == 1) { tmpdata |= 0x80; }
}
if ((++i & 0x07) == 0)
{ *buffer = tmpdata; buffer++; } // next byte
}
if (lastdiff.Count == 0) { return search_finish; }
return search_continue; // to continue search
}
private void MatchRom(byte[] rombyte)
{
WriteCommand(match_rom);
WriteRomID(rombyte);
}
private void ConvertTemp(byte[] rombyte)
{
MatchRom(rombyte);
CheckPower();
WriteCommand(convert_temp);
Delay(666666);
}
private void ConvertTemp()
{
WriteCommand(skip_rom);
CheckPower();
WriteCommand(convert_temp);
Delay(666666);
}
//==============================================================
}
}
DS18B20 ID号搜索函数(C#)
2星 需积分: 32 48 浏览量
2010-01-02
18:40:19
上传
评论 1
收藏 2KB RAR 举报
badcpu
- 粉丝: 2
- 资源: 4
最新资源
- 散斑结构光测试图像-对应博客:https://mp.csdn.net/mp-blog/creation/editor/13817
- 20220823-1000-ts.dat
- Galaxy10CNN实现星系图像分类项目深度学习环境配置
- DVB-S2:GCS组帧数据.dat
- 基于强化学习Q-Learning方法实现机器人走迷宫源码.zip
- numpy+pandas_basics.ipynb
- 网络安全-Diffie Hellman密钥协商
- 双H桥电机驱动L298N芯片AD集成库ALTIUM库(原理图库+PCB封装库)文件.zip
- 计算机组成原理实验;16位运算器ALU CPU设计
- 毕设绝技 - 4天玩乐完成商城系统完整资料day04
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈