毕设仿真分享 多路测温报警系统(AT89C51、多个DS18B20、LCD1602)

51单片机多路测温报警系统(AT89C51、多个DS18B20、LCD1602)

一、简介

此系统主要由AT89C51、多个DS18B20温度模块和LCD1602组成。
大致的原理是多个DS18B20按顺序采集温度到的数据传送给AT89C51的P2.7,最后通过LCD1602显示当前的实时温度,按键可以设置上下限温度,根据温度判断是否需要报警。

二、运行效果图

模拟仿真运行
在这里插入图片描述
在这里插入图片描述

三、部分代码


/想要更多项目私wo!!!/
#include
#include

unsigned int iTempDataH;
unsigned int SetTemp = 30;
int SetTemp1 = 1;
int num = 0;

//ÅжÏæָÁî
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++;									//ÁÐÊý¼ÓÒ»
   	}
}

//ÑÓʱ1ms×Óº¯Êý
void Delayms(unsigned int x)
{
 	unsigned char i;
	while(x--)
	{
	 	for(i=0;i<200;i++);
	}
}

//ÑÓʱ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(); 			//ÑÓʱ480us
		DQ = 1;
		Delay60us();			//ÑÓʱ60us
		if(!DQ)  				//ÊÕµ½ds18b20µÄÓ¦´ðÐźÅ
		{	
			DQ = 1;
			Delay240us();		//ÑÓʱ240us
			break;		
		}
	}
}

//дһ¸ö×Ö½Ú(´ÓµÍλ¿ªÊ¼Ð´)
void WriteByte(unsigned char btData)
{
	unsigned char i, btBuffer;

	for (i = 0; i < 8; i++)
	{
		btBuffer = btData >> i;
		if (btBuffer & 1)
		{
			DQ = 0;
			_nop_();
			_nop_();
			DQ = 1;
			Delay60us();
		}
		else
		{
			DQ = 0;
			Delay60us();
			DQ = 1;			
		}
	}
}

//¶ÁÒ»¸ö×Ö½Ú(´ÓµÍλ¿ªÊ¼¶Á)
unsigned char ReadByte()
{
	unsigned char i, btDest;

	for (i = 0; i < 8; i++)
	{
		btDest >>= 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));	

}

//Êý¾Ý´¦Àí×Ó³ÌÐò
void DataProcess()
{
	m_TempData = ReadTemperature();
	if (m_TempData.btNegative) DisplayOne(1, 6, '-', 0);
	else DisplayOne(1, 6, m_TempData.btThird, 1);
	DisplayOne(1, 7, m_TempData.btSecond, 1);
	DisplayOne(1, 8, m_TempData.btFirst, 1);
	DisplayOne(1, 10, m_TempData.btDecimal, 1);
}

int main(void)
{
	Clear();
	Init();
	DisplayString(0, 0, "T1:    T2:    ");
	DisplayString(1, 0, "CurT:");
	DisplayOne(1, 9, '.', 0);
	while (1) 
		DataProcess();
}

🔥 项目分享:

https://gitee.com/feifei1122/simulation-project

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值