基于51单片机DS1621温度传感器测温系统仿真

仿真图:

在这里插入图片描述

芯片/模块的特点:

DS1621特点:
处理器和内存:DS1621采用AMD Ryzen V1500B四核处理器,时钟速度为2.2 GHz,配备8GB DDR4内存,可以处理多种任务和应用。

存储容量:DS1621具有6个硬盘插槽,支持6个SATA硬盘或固态驱动器(SSD),可以达到最大容量48TB(使用8TB硬盘),满足大量数据存储需求。

数据保护:DS1621支持多种RAID级别,包括RAID 0、1、5、6和10,可提供数据冗余和保护,防止数据丢失。

高速连接:DS1621具有双1GbE以太网端口,可提供快速和稳定的网络连接。此外,它还支持多种扩展连接,如USB 3.0和eSATA,以方便外部存储设备的连接。

数据备份和同步:DS1621内置了多种备份和同步选项,包括远程数据备份、云存储备份和跨平台文件同步,确保数据安全和灵活性。

管理和监控:DS1621通过Synology的操作系统DSM提供易于使用的管理界面。用户可以轻松设置和监控存储设备,包括用户权限管理、网络设置和应用程序安装等。

主程序:

#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
bit I2C_Busy, NO_Ack,Bus_Fault,point;

uchar bdata a;
sbit LSB = a^0;
sbit MSB = a^7;
sbit SDA = P3^7;
sbit SCL = P3^6;
uchar Array[] = {'0','1','2','3','4','5','6','7','8','9'};
uchar command_data[]=
{
 	0xac,0x00,0xee,0xa1,0x00,0x00,0xa2,0x00,0x00,0xaa
};
uchar Prompt[]="Waiting for a while...\r";
uchar i;
void DelayMS(uint ms)
{
 	uchar i;
	while(ms--)
	{
	 	for(i=0;i<120;i++);
	}
}

void SendStop()
{
 	SDA = 0;
	SCL = 1;
	_nop_();
	SDA = 1;
	I2C_Busy = 0;
}

void SendByte(uchar wd)
{
 	uchar i;
	a = wd;
	for(i=0;i<8;i++)
	{
	 	SCL = 0;
		_nop_();
		_nop_();
		SDA = MSB;
		a <<= 1;
		_nop_();
		_nop_();
		SCL = 1;
		_nop_();
		_nop_();
		SCL = 0;
	}
	SDA = 1;
	SCL = 1;
	_nop_();
	_nop_();

	if(!SDA)
	{
	 	SCL = 0;
		_nop_();
		_nop_();
	}
	else
	{
	 	NO_Ack = 1;
		SCL = 0;
		_nop_();
		_nop_();
	}
}

void Master(uchar slave_addr)
{

 	I2C_Busy = 1;
	NO_Ack = 0;
	Bus_Fault = 0;
	if(!SCL || !SDA)
		Bus_Fault = 1;
	else
	{
	 	SDA = 0;
		_nop_();
		_nop_();
		SCL = 0;
		_nop_();
		_nop_();
		SendByte(slave_addr);
	}
}

uchar RecvByte(uchar cnt)
{
	uchar i,rcv_data;
	for(i=0;i<8;i++)
	{
	 	SDA = 1;
		SCL = 1;
		_nop_();
		LSB = SDA;
		if(i<7)
			a <<= 1;
		_nop_();
		SCL = 0;
		_nop_();
	} 
	
	if(cnt == 1)
		SDA = 1;
	else
		SDA = 0;
	SCL = 1;
	_nop_();
	SCL = 0;
	SDA = 1;
	_nop_();
	rcv_data = a;
	return rcv_data;	
}

void SendData(uchar slave_address,uchar start,uchar end)
{
 	Master(slave_address);
	for(i=start;i<=end;i++)
		SendByte(command_data[i]);	
	SendStop();
}

void InitialiseSerialPort()
{
 	TMOD = 0x20;
	TH1  = 0xfd;
	SCON = 0x50;
	TR1  = 1;
}

void SendCharToSerialPort(uchar ch)
{
 	SBUF = ch;
	while(!TI);
	TI = 0;
}

void SendTemperatureToSerialPort(uchar val)
{
 	if(val>200)
	{
	 	val = 255-val;
		SendCharToSerialPort('-');
		if(!point)
			val+=1;
	}
	SendCharToSerialPort(Array[(val/10)/10]);
	SendCharToSerialPort(Array[(val/10)%10]);
	SendCharToSerialPort(Array[val%10]);
	SendCharToSerialPort('.');
	if(point)
		SendCharToSerialPort('5');
	else
		SendCharToSerialPort('0');
	SendCharToSerialPort(' ');
	SendCharToSerialPort('C');
	SendCharToSerialPort('\r');	
}

void SetTemperatureLimit(uchar HI,uchar LO)
{
	command_data[4] = HI;
	command_data[5]	= 0;
	command_data[7] = LO;
	command_data[8] = 0;
	SendData(0x90,3,5);
	DelayMS(10);
	SendData(0x90,6,8);	
}

void StartConversion()
{
 	SendData(0x90,2,2);
	DelayMS(750);
}

uchar ReadTemp()
{
 	uchar d;
	SendData(0x90,9,9);
	Master(0x91);
	d = RecvByte(0);
	point = RecvByte(1)>>7;
	SendStop();
	return d;
}
void main()
{
 	uchar i;
   	InitialiseSerialPort();
	while(Prompt[i]!='\0')
		SendCharToSerialPort(Prompt[i++]);
	WriteConfig(0x02);
	StartConversion();
	SetTemperatureLimit(40,35);
	while(1)
	{
	 	DelayMS(50);
		SendTemperatureToSerialPort(ReadTemp());
	}	
}

设计文件:

链接:https://pan.baidu.com/s/1isws5pzh-vUY_5wkO77iZA?pwd=gkrj

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值