基于51单片机的空调温度控制系统—LCD1602显示

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

(仿真+程序+原理图+设计报告)

功能介绍

具体功能:

1.L298N控制电机,DS18B20测温;

2.LCD1602实时显示温度和电机转速;

3.温度越高,转速越快;

4.可以切换成手动模式,手动控制电机转速;

​演示视频:

基于51单片机的空调温度控制系统—LCD1602显示

#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%            ";// ÄÚÈÝ
uint    wendu=0;
uchar count;
uchar jd=5;
bit work;	//¿ª¹Ø±êÖ¾

sbit k1=P1^0; //
sbit k2=P1^1; //
sbit k3=P1^2; //
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);  //Ìø¹ý¶ÁÐòºÅÁкŵIJÙ×÷
  WriteOneChar(0x44);  //Æô¶¯Î¶Èת»»
  Init_DS18B20();
  WriteOneChar(0xCC);  //Ìø¹ý¶ÁÐòºÅÁкŵIJÙ×÷
  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;
}

硬件设计

使用元器件:

单片机:STC89C51;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

万用板9*15;DC电源插口;

自锁开关;2.2K电阻*1;

40脚IC座;DC电源线;

L298N驱动芯片;10K排阻(103);

LCD1602液晶显示屏;按键*2;

10uF电容;10K电阻*2;

单刀双掷开关;12M晶振;

30Pf瓷片电容*2;3.3V直流电机;

DS18B20温度传感器;

导线:若干;

流程图:

设计资料

01 仿真图

本设计使用proteus8.9版本设计,资料里有安装教程,无需担心!具体如图!

02 原理图

本系统原理图采用Altium Designer19设计,具体如图!

03 程序

本设计使用软件keil5版本编程设计,资料里有安装教程,无需担心!具体如图!

04 设计报告

六千字设计报告,具体如下!

05 设计资料

全部资料包括仿真源文件 、程序(含注释)、AD原理图、参考论文、流程图、任务书、元件清单、讲解视频等。具体内容如下,全网最全! !

资料获取请观看前面演示视频!

点赞分享一起学习成长。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值