基于单片机空调温度控制测温ds18b20系统Proteus仿真(含全部资料)

++全套资料包含:Proteus仿真源文件+keil C语言源程序+AD原理图+流程图+元器件清单+说明书等++

资料下载:

通过网盘分享的文件:资料分享

链接: 百度网盘 请输入提取码 提取码: tgnu


目录

资料下载:

Proteus仿真功能

项目文件资料:

一、Proteus仿真源文件

二、AD原理图文件

二、报告说明书

三、系统流程图

[四、Keil c语言程序源代码](#四、Keil c语言程序源代码)


项目功能:

基于51单片机的空调温度控制系统

由STC89C51单片机+LCD1602液晶显示屏+L298N控制模块+直流电机+DS18B20温度传感器构成

具体功能:

(1)实现L298N对电机的控制,利用LCD1602直接、清晰明了的显示温度;

(2) 基于测得的温度实现对电机转速的控制(利用电机模拟空调变频系统);

(3)在自动模式下,温度越高,占空越高,转数越快。手动模式下,通过按键可以实现电机转速的控制。


项目文件:

一、Proteus仿真源文件

​​

二、AD原理图文件

二、报告说明书

三、系统流程图

​​

四、器件清单

1.万用板9*15

2.DC电源插口

3.自锁开关

4.2.2K电阻*1

5.STC89C51单片机

6.40脚IC座

7.DC电源线

8.L298N驱动芯片

9.LCD1602液晶显示屏

10.10K排阻(103)

11.10K电阻*2

12.10uF电容

13.按键*2

14.单刀双掷开关

15.12M晶振

16.30Pf瓷片电容*2

17.3.3V直流电机

18.导线

19.焊锡

20.DS18B20温度传感器

21.万用板一块

五、Keil c语言程序源代码(部分)

复制代码
#include<REG52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar num=0;
bit flang;
sbit IN1=P3^5;
sbit IN2=P3^6;
sbit PWM1 =P3^7;//风扇控制引脚
uchar xianshi1[] ="TEMP       00.0C";// 内容
uchar xianshi2[] ="000%            ";// 内容
uchar jd=5;
bit work;	//开关标志
sbit DQ=P2^0; //定义DS18B20总线I/O
//Port Definitions**********************************************************
sbit LcdRs		= P2^5;
sbit LcdRw		= P2^6;
sbit LcdEn  	= P2^7;
sfr  DBPort 	= 0x80;		//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口
	void delay(uint z)
{
   uint a,b;
   for(a=z;a>0;a--)
     for(b=120;b>0;b--);
}
//向LCD写入命令或数据************************************************************
#define LCD_COMMAND			0      // Command
#define LCD_DATA			1      // Data
#define LCD_CLEAR_SCREEN	0x01      // 清屏
#define LCD_HOMING  		0x02      // 光标返回原点
void LCD_Write(bit style, unsigned char input)
{
	LcdEn=0;
	LcdRs=style;
	LcdRw=0;		_nop_();
	DBPort=input;	_nop_();//注意顺序
	LcdEn=1;		_nop_();//注意顺序
	LcdEn=0;		_nop_();
 delay(1);
}

//设置显示模式************************************************************
#define LCD_SHOW			0x04    //显示开
#define LCD_HIDE			0x00    //显示关	  

#define LCD_CURSOR			0x02 	//显示光标
#define LCD_NO_CURSOR		0x00    //无光标		     

#define LCD_FLASH			0x01    //光标闪动
#define LCD_NO_FLASH		0x00    //光标不闪动

void LCD_SetDisplay(unsigned char DisplayMode)
{
	LCD_Write(LCD_COMMAND, 0x08|DisplayMode);	
}
//设置输入模式************************************************************
#define LCD_AC_UP			0x02
#define LCD_AC_DOWN			0x00      // default

#define LCD_MOVE			0x01      // 画面可平移
#define LCD_NO_MOVE			0x00      //default

void LCD_SetInput(unsigned char InputMode)
{
	LCD_Write(LCD_COMMAND, 0x04|InputMode);
}
//初始化LCD************************************************************
void LCD_Initial()
{
	LcdEn=0;
	LCD_Write(LCD_COMMAND,0x38);           //8位数据端口,2行显示,5*7点阵
	delay(5);
	LCD_Write(LCD_COMMAND,0x38);
	delay(5);
	LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);    //开启显示, 无光标
	delay(5);
	LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
	delay(5);
	LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);       //AC递增, 画面不动
	delay(5);
}
//液晶字符输入的位置************************
void GotoXY(unsigned char x, unsigned char y)
{
	if(y==0)
		LCD_Write(LCD_COMMAND,0x80|x);
	if(y==1)
		LCD_Write(LCD_COMMAND,0x80|(x-0x40));
}
//将字符输出到液晶显示
void Print(unsigned char *str)
{
	while(*str!='\0')
	{
		LCD_Write(LCD_DATA,*str);
		str++;
		delay(1);
	}
}
void init()// 定时器初始化
{
	TMOD=0x01;
  TH0=TL0=(256-200); 
  ET0=1;//开定时器0中断
	TR0=1;
	EA=1;//开总中断
}

void Delay_DS18B20(int num);

/*****初始化DS18B20*****/  //探头1
void Init_DS18B20()
{
  unsigned char x;
  DQ=1;                //DQ复位
  Delay_DS18B20(8);    //稍做延时
  DQ = 0;         //单片机将DQ拉低
  Delay_DS18B20(80);   //精确延时,大于480us
  DQ = 1;         //拉高总线
  Delay_DS18B20(14);
  x = DQ;           //稍做延时后,如果x=0则初始化成功,x=1则初始化失败
  Delay_DS18B20(20);
}


/*****延时子程序*****/
void Delay_DS18B20(int num)
{
  while(num--) ;
}


/*****写一个字节*****/
void WriteOneChar(unsigned char dat)
{
  unsigned char i=0;
  for (i=8; i>0; i--)
  {
    DQ = 0;
    DQ = dat&0x01;
    Delay_DS18B20(5);
    DQ = 1;
    dat>>=1;
  }
}

/*****读一个字节*****/
unsigned char ReadOneChar(void)
{
  unsigned char i=0;
  unsigned char dat = 0;
  for (i=8;i>0;i--)
  {
    DQ = 0;     // 给脉冲信号
    dat>>=1;
    DQ = 1;     // 给脉冲信号
    if(DQ)
    dat|=0x80;
    Delay_DS18B20(4);
  }
  return(dat);
}



/*****读取温度*****/
unsigned int ReadTemperature(void)	 //读取温度并转换
{
  unsigned char a=0;
  unsigned char b=0;
  unsigned int t=0;
	 unsigned int tempb20;
  float f_temp=0;
	
  Init_DS18B20();
  WriteOneChar(0xCC);  //跳过读序号列号的操作
  WriteOneChar(0x44);  //启动温度转换
  Init_DS18B20();
  WriteOneChar(0xCC);  //跳过读序号列号的操作
  WriteOneChar(0xBE);  //读取温度寄存器
  a=ReadOneChar();     //读低8位
  b=ReadOneChar();    //读高8位
  
 tempb20=b;
	tempb20<<=8;
	tempb20=tempb20|a;
  
	if((b&0xfc)==0xfc)//负温度
   {
	    flang=1;
	   	tempb20=((~tempb20)+1);
			  f_temp=tempb20*0.0625;
		 		tempb20=f_temp*10+0.5;

  }
  else//正温度
  {
		flang=0;
		f_temp=tempb20*0.0625;
		tempb20=f_temp*10+0.5;

 }
	 return tempb20;
}

main()
{	

	uchar k;
	LCD_Initial();
	
	PWM1=0;
	IN1=0;
	IN2=1;
	init();

while(1)
{			
	  if(k==0)
			{
				EA=0;
        wendu=ReadTemperature();//读取温度数据
				EA=1;
	 	  } 
		if(k++>25) k=0;

	if(k1)
	{		
		if(wendu>=270)
		{
		 jd=(wendu/10)-27;
		}
		else jd=0;
	}
	else
	{
	

		 if(k2==0)//PWM+
	    {
		   delay(10);	
	 	    jd++;
				if(jd>=10)jd=10;
			 while(k2==0);
			}
			
			if(k3==0)//PWM-
	    {
		    delay(10);
			  if(jd>0) jd--;
			  while(k3==0);
			}		
	}

		if(flang==1)
		xianshi1[10]='-';
		else
		xianshi1[10]=' ';	

    xianshi1[11]=wendu/100+0x30;
	  xianshi1[12]=wendu/10%10+0x30;
	  xianshi1[14]=wendu%10+0x30;
		
		
	  xianshi2[0]=jd/10+0x30;
	  xianshi2[1]=jd%10+0x30;
	 

		GotoXY(0,0);
		Print(xianshi1);
		GotoXY(0,1);
		Print(xianshi2);	
		
 }
}

六、全套资料包含

​​

七:项目资源获取

需要完整的资料可以点击下面的名片关注,回复"资料"!

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

相关推荐
易享电子3 小时前
基于单片机步进电机控制电机正反转加减速系统Proteus仿真(含全部资料)
单片机·嵌入式硬件·51单片机·proteus·智能家居
点灯小铭4 小时前
基于51单片机汽车自动照明灯超声波光敏远近光灯设计
单片机·嵌入式硬件·汽车·毕业设计·51单片机·课程设计
小刘爱玩单片机5 小时前
【stm32简单外设篇】-4×4 薄膜键盘
stm32·单片机·计算机外设
小白嘎嘎6 小时前
ESP8266:Arduino学习
单片机·嵌入式硬件
源远流长jerry6 小时前
STM32之Systick与基础定时器
c语言·stm32·单片机·嵌入式硬件
爱睡觉的王宇昊9 小时前
GD32和STM32的区别在哪里?
stm32·单片机·嵌入式硬件
代码总长两年半11 小时前
STM32物联网项目---ESP8266微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制---AT固件篇(二)
stm32·单片机·物联网
点灯小铭11 小时前
基于STM32单片机无线ZIGBEE智能大棚土壤湿度光照检测
stm32·单片机·嵌入式硬件·毕业设计·课程设计
代码总长两年半14 小时前
STM32物联网项目---ESP8266微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制---MQTT篇(三)
stm32·单片机·物联网