• 基于AT89C52和DS18B20的空调温度精准控制系统


    目录
    摘 要 1
    Abstract 2
    1 设计目的及要求 1
    1.1 设计目的和意义 1
    1.2 设计任务与要求 1
    2 硬件电路设计 2
    2.1 总体方案设计 2
    2.2 功能模块电路设计 3
    2.2.1 单片机的选型 3
    2.2.2 振荡电路设计 5
    2.2.3 复位电路设计 5
    2.2.4 键盘接口电路设计 6
    2.2.5 温度测量电路设计 6
    2.2.6 系统显示电路设计 7
    2.2.7 输出控制电路设计 8
    2.3 总电路设计 8
    2.4 系统所用元器件 9
    3 软件系统设计 10
    3.1 软件系统总体方案设计 10
    3.2 软件流程图设计 10
    4 系统调试 11
    5 总结 13
    5.1 本系统存在的问题及改进措施 13
    5.2 心得体会 13
    参考文献 14
    附录1:系统的源程序清单 15
    附录2:系统的PCB图 39

    系统要求利用单片机设计一空调温度控制器,能够实时检测并显示室温,能够利用键盘设定温度,并且和室温进行比较,当室温低于设定温度时,系统能够驱动加热系统工作,当室温高于设定温度时,系统能够驱动制冷系统工作,当两者温度相等时,不做动作。
    2 硬件电路设计
    2.1 总体方案设计
    空调温度控制系统,主要要完成对温度的采集、显示以及设定等工作,从而实现对空调的控制。传统采用铂电阻充当测温器件的方案,虽然其中段测量线性度好,精度较高,但是测量电路的设计难度高 ,且测量电路系统庞大,难于调试 ,而且成本相对较高。鉴于上述原因,本系统采用DS18B20充当测温器件。外部温度信号经 DS18B20将输入的模拟信号转换成8位的数字信号, 通过并 口传送到单片机系统( AT89C52) 。单片机系统将接收的数字信号译码处理,通过LCD1602将温度显示出来,同时单片机系统还将完成键盘扫描 、按键温度设定、超温报警等程序的处理 ,将处理的温度信号与系统设定温度值比较,形成可以控制空调制冷、制热与停止工作三种工作状态,从而实现空调的智能化。另外,键盘输入方面,本文转载自http://www.biyezuopin.vip/onews.asp?id=14756采用了软件来修正误操作输入 ,即输入的温度范围必须在系统硬件所确定的范围内,直接降低由于误操作带来的风险,提高了系统的可靠性 ,体现了人性化的系统设计原则。

    #include
    #include
    #define uchar unsigned char//宏定义
    #define uint unsigned int
    全局变量/
    float  TEMP_NOW=0.0;
    float  TEMP_SET=21.0;
    uint  T_Count=0;
    uint  S_Count=0;
    uint  P_Count=0;
    uint  N_Count=0;
    uint  M_Count=1;
    
    
    #define		K_UP		    0X20//定义键值
    #define		K_DOWN		 0X21
    #define		K_CLEAR 	    0X24
    #define		K_OK		    0X25
    #define		K_ONE		    0X30
    #define		K_FOUR		 0X31
    #define		K_SEVEN	    0X32
    #define		K_POINT		 0X33
    #define		K_TWO		    0X34
    #define		K_FIVE		    0X43
    #define		K_EIGHT		0X36
    #define		K_ZERO		0X37
    #define		K_THREE		0X38
    #define		K_SIX		    0X40
    #define		K_NINE		0X41
    #define		K_SET		   0X42
    extern float TEMP_NOW;
    extern float TEMP_SET;
    extern uint  T_Count;
    extern uint  S_Count;
    extern uint  P_Count;
    extern uint  N_Count;
    extern uint  M_Count;
    extern uchar Current_Temp_Display_Buffer[];
    extern uchar set_Temp_Display_Buffer[];
    extern int sel;
    sbit  lcden=P2^7;//液晶使能
    sbit  lcdrs=P2^6;//液晶数据/命令选择端
    sbit  DQ   =P3^7;//DS18B20数据端
    sbit  XX   =P2^5;//读写选择端
    sbit  cold =P2^0;//输出信号
    sbit  warm =P2^1;//输出信号
    uchar Current_Temp_Display_Buffer[]={"   NOW: 00.0"};
    uchar set_Temp_Display_Buffer[]=    {"   SET: 38.0"};
    int sel=0;							
    
    uchar code KeyCodeTable[]=
    {
      	0x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88
    };
    
    
    #define delayNOP() {_nop_();_nop_();_nop_();_nop_();}
    
    uchar code Temperature_Char[8] = {0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00};
    uchar code df_Table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};
    uchar CurrentT = 0;
    uchar Temp_Value[]={0x00,0x00};
    uchar Display_Digit[]={0,0,0,0};
    
    bit DS18B20_IS_OK = 1;
    
    void Read_Temperature();
    void Display_Temperature();
    
    void Comparison();
    //定时///
    void timer0_init(void)
    {
    	TMOD =	0x00  ; //设置定时器0的工作方式
    	TH0 = (8192-5000)/32;//单片机晶振为12MHz,机器周期为1us,t=5ms,
                          //N=5000/1=5000
    	TL0 = (8192-5000)%32;
    	IE  =	0x82;
    	TR0=1;			
    }
    void timer0() interrupt 1 
    {	    				
    	TH0 = (8192-5000)/32;
    	TL0 = (8192-5000)%32; 
    	if(++T_Count == 100)		   //100为0.5s	  
    	{  	 
    		TR0=0;				
    		Read_Temperature();
    		Display_Temperature() ;
    		T_Count=0;
    		if(++P_Count == 6)
    		{
    			 N_Count=1;
    		}
    	   	TR0=1;
    	}
    }
    void delay1(uint z)	  //延时函数
    {
    	uint x,y;
    	for(x=z;x>0;x--)
    		for(y=110;y>0;y--);
    }
    void write_com(uchar com)  //写命令函数
    {
    	lcdrs=0;  //选择写命令模式
    	P0=com;	  //将要写的命令字送到数据总线上
    	delay1(5); //稍作延时以待数据稳定
    	lcden=1;  //使能端给一高脉冲,因为初始化函数中已经将lcden置零
    	delay1(5); //稍作延时
    	lcden=0;  //将使能端置0完成高脉冲
    }
    void write_date(uchar date)	 //写数据函数
    {
    	lcdrs=1;   //选择写数据模式
    	P0=date;
    	delay1(5);
    	lcden=1;
    	delay1(5);
    	lcden=0;
    }
    void init_lcd()		   //初始化函数
    {
    	lcden=0;
    	write_com(0x38); //设置16*2显示,5*7点阵,8位数据接口
    	write_com(0x0c); //设置开显示,不显示光标
    	write_com(0x06); //写一个字符后地址指针加1
    	write_com(0x01); //显示清0,数据指针清0
    }
    void Print()
    {
    	uchar num;
    	write_com(0x80);
    	for(num=0;num<12;num++)
    	{
    		write_date(Current_Temp_Display_Buffer[num]);
    	}
    	write_date(0xdf);
    	write_date('C');
    	write_com(0x80+0x40);
    	for(num=0;num<12;num++)
    	{
    	 	write_date(set_Temp_Display_Buffer[num]);
    	}
    	write_date(0xdf);
    	write_date('C');
    }
    
    
    void Delay_INI(uint x)
    {
     	while(--x);
    }
    
    void Delay(unsigned int n)	
    {
    	do
    	{
    		_nop_();_nop_();
    		_nop_();_nop_();
    		_nop_();_nop_();
    		_nop_();_nop_();
    		_nop_();
    		n--;
    	}while(n);
    }
    
    
    uchar Init_DS18B20()
      {
     	uchar status;
    	DQ = 1;
    	Delay_INI(8);
    	DQ = 0;
    	Delay_INI(90);
    	DQ = 1;
    	Delay_INI(8);
    	status=DQ;
    	Delay_INI(100);
    	DQ = 1;
    	return status;
    }
    
    uchar ReadOneByte()
    {
     	uchar i,dat=0;
    	DQ = 1;
    	_nop_();
    	for(i=0;i<8;i++)
    	{
    	 	DQ = 0;
    		dat >>= 1;
    		DQ = 1;
    		_nop_();
    		_nop_();
    		if(DQ)
    			dat |= 0X80;
    		Delay(30);
    		DQ = 1;
    	}
    	return dat;
    }
    
    void WriteOneByte(uchar dat)
    {
     	uchar i;
    	for(i=0;i<8;i++)
    	{
    	 	DQ = 0;
    		DQ = dat& 0x01;
    		Delay(5);
    		DQ = 1;
    		dat >>= 1;
    	}
    }
    void Read_Temperature()
    {
     	if(Init_DS18B20()==1)
    		DS18B20_IS_OK=0;
    	else
    	{
    		WriteOneByte(0xcc);
    		WriteOneByte(0x44);
    		Init_DS18B20();
    		WriteOneByte(0xcc);
    		WriteOneByte(0xbe);
    		Temp_Value[0] = ReadOneByte(); 
    		Temp_Value[1] = ReadOneByte();
    		DS18B20_IS_OK=1;	
    	}	
    }
    void Display_Temperature()
    {
    	uchar t = 150, ng = 0;
    	if((Temp_Value[1]&0xf8)==0xf8)
    	{
    	 	Temp_Value[1] = ~Temp_Value[1];
    		Temp_Value[0] = ~Temp_Value[0]+1;
    		if(Temp_Value[0]==0x00)
    			Temp_Value[1]++;
    		ng = 1;	
    	}
    	Display_Digit[0] = df_Table[Temp_Value[0]&0x0f];
    	CurrentT = ((Temp_Value[0]&0xf0)>>4) | ((Temp_Value[1]&0x07)<<4);
    	Display_Digit[3] = CurrentT/100;
    	Display_Digit[2] = CurrentT%100/10;
    	Display_Digit[1] = CurrentT%10;
    	Current_Temp_Display_Buffer[11] = Display_Digit[0] + '0';
    	Current_Temp_Display_Buffer[10] = '.';
    	Current_Temp_Display_Buffer[9]  = Display_Digit[1] + '0';
    	Current_Temp_Display_Buffer[8]  = Display_Digit[2] + '0';
    	Current_Temp_Display_Buffer[7]  = Display_Digit[3] + '0';
    
    	TEMP_NOW=Display_Digit[2]*10+Display_Digit[1]+Display_Digit[0]*0.1	 ;
    
    	if(Display_Digit[3] == 0)
    		Current_Temp_Display_Buffer[7]  = ' ';
    	if(Display_Digit[2] == 0&&Display_Digit[3]==0)
    		Current_Temp_Display_Buffer[8]  = ' ';
    	if(ng)
    	{
    		TEMP_NOW=-(Display_Digit[2]*10+Display_Digit[1]+Display_Digit[0]*0.1);
    
    	 	if(Current_Temp_Display_Buffer[8]  == ' ')
    			Current_Temp_Display_Buffer[8]  = '-';
    		else if(Current_Temp_Display_Buffer[7]  == ' ')
    			Current_Temp_Display_Buffer[7]  = '-';
    		else 
    			Current_Temp_Display_Buffer[6]  = '-';
    	}  	
    }
    void Delay_key()
    {
     	uchar i;
    	for(i=0;i<200;i++);
    }
    
    uchar Keys_Scan()
    {
     	uchar sCode,kCode,k;
    	P1 = 0xf0;
    	if((P1&0xf0)!=0xf0)
    	{
    	 	Delay_key();
    		if((P1&0xf0)!=0xf0)
    		{
    		 	sCode = 0xfe;
    			for(k=0;k<4;k++)
    			{
    			 	P1 = sCode;
    				if((P1&0xf0)!=0xf0)
    				{
    				 	kCode = ~P1;
    					if(kCode == KeyCodeTable[0]) return K_ONE; 
    					else if(kCode == KeyCodeTable[1]) return K_TWO;
    					else if(kCode == KeyCodeTable[2]) return K_THREE;
    					else if(kCode == KeyCodeTable[3]) return K_FOUR;
    					else if(kCode == KeyCodeTable[4]) return K_FIVE;
    					else if(kCode == KeyCodeTable[5]) return K_SIX;
    					else if(kCode == KeyCodeTable[6]) return K_SEVEN;
    					else if(kCode == KeyCodeTable[7]) return K_EIGHT;
    					else if(kCode == KeyCodeTable[8]) return K_NINE;
    					else if(kCode == KeyCodeTable[9]) return K_UP;
    					else if(kCode == KeyCodeTable[10]) return K_DOWN;
    					else if(kCode == KeyCodeTable[11]) return K_CLEAR;
    					else if(kCode == KeyCodeTable[12]) return K_OK;
    					else if(kCode == KeyCodeTable[13]) return K_ZERO;
    					else if(kCode == KeyCodeTable[14]) return K_POINT;
    					else if(kCode == KeyCodeTable[15]) return K_SET;
    				}
    				else 
    					sCode = _crol_(sCode,1);
    			}
    		}
    	}
    	return -1;
    }
    void set_num()
    {		
    	uchar key;	
    	if(sel==0)
    	{
    		key = Keys_Scan(); 
    		if(K_CLEAR == key)
    		{
    			while(Keys_Scan() == K_CLEAR);
    			set_Temp_Display_Buffer[8] =' ';
    			set_Temp_Display_Buffer[9] =' ';
    			set_Temp_Display_Buffer[10]=' ';
    			set_Temp_Display_Buffer[11]=' ';  // 48(0)49(1)50(2)51(3)52(4)53(5)54(6)55(7)56(8)57(9)
    			M_Count=0;
    			cold=0;
    			warm=0;
    		} 
    		if(K_UP == key)
    		{
    			while(Keys_Scan() == K_UP);
    			if((set_Temp_Display_Buffer[11]>47)&&(set_Temp_Display_Buffer[11]<57))
    			{
    				set_Temp_Display_Buffer[11]+=1; 
    			}
    			else if(set_Temp_Display_Buffer[11]==57) 
    			{
    				set_Temp_Display_Buffer[11]=48;
    				if((set_Temp_Display_Buffer[9]>47)&&(set_Temp_Display_Buffer[9]<57))
    				{
    					set_Temp_Display_Buffer[9]+=1;
    				}
    				else if(set_Temp_Display_Buffer[9]==57)
    				{	
    					set_Temp_Display_Buffer[9]=48;
    					if((set_Temp_Display_Buffer[8]>47)&&(set_Temp_Display_Buffer[8]<57))
    					{
    						 set_Temp_Display_Buffer[8]+=1;
    					}
    					else if(set_Temp_Display_Buffer[8]==57)
    					{
    						 set_Temp_Display_Buffer[8]=48;
    					}
    				}
    			}      
    		}
    		if(K_DOWN == key)								  // 48(0)49(1)50(2)51(3)52(4)53(5)54(6)55(7)56(8)57(9)
    		{
    			while(Keys_Scan() == K_DOWN);
    			if((set_Temp_Display_Buffer[11]>48)&&(set_Temp_Display_Buffer[11]<58))
    			{
    				set_Temp_Display_Buffer[11]-=1; 
    			}
    			else if(set_Temp_Display_Buffer[11]==48) 
    			{
    				set_Temp_Display_Buffer[11]=57;
    				if((set_Temp_Display_Buffer[9]>48)&&(set_Temp_Display_Buffer[9]<58))
    				{
    					set_Temp_Display_Buffer[9]-=1;
    				}
    				else if(set_Temp_Display_Buffer[9]==48)
    				{	
    					set_Temp_Display_Buffer[9]=57;
    					if((set_Temp_Display_Buffer[8]>48)&&(set_Temp_Display_Buffer[8]<58))
    					{
    						 set_Temp_Display_Buffer[8]-=1;
    					}
    					else if(set_Temp_Display_Buffer[8]==48)
    					{
    						 set_Temp_Display_Buffer[8]=57;
    					}
    				}
    			} 
    		}                	
    		if(K_ONE == key)
    		{
    			while(Keys_Scan() == K_ONE);
    			set_Temp_Display_Buffer[11]='1';
    			sel++;	
    		}
    		if(K_TWO == key)
    		{
    			while(Keys_Scan() == K_TWO);
    			set_Temp_Display_Buffer[11]='2';
    			sel++;
    		}
    		if(K_THREE == key)
    		{
    			while(Keys_Scan() == K_THREE);
    			set_Temp_Display_Buffer[11]='3';
    			sel++;
    		}
    		if(K_FOUR == key)
    		{
    			while(Keys_Scan() == K_FOUR);
    			set_Temp_Display_Buffer[11]='4';
    			sel++;
    		}
    		if(K_FIVE == key)
    		{
    			while(Keys_Scan() == K_FIVE);
    			set_Temp_Display_Buffer[11]='5';
    			sel++;
    		}
    		if(K_SIX == key)
    		{
    			while(Keys_Scan() == K_SIX);
    			set_Temp_Display_Buffer[11]='6';
    			sel++;
    		}
    		if(K_SEVEN == key)
    		{
    			while(Keys_Scan() == K_SEVEN);
    			set_Temp_Display_Buffer[11]='7';
    			sel++;
    		}
    		if(K_EIGHT == key)
    		{
    			while(Keys_Scan() == K_EIGHT);
    			set_Temp_Display_Buffer[11]='8';
    			sel++;
    		}
    		if(K_NINE == key)
    		{
    			while(Keys_Scan() == K_NINE);
    			set_Temp_Display_Buffer[11]='9';
    			sel++;
    		}
    		if(K_ZERO == key)
    		{
    			while(Keys_Scan() == K_ZERO);
    			set_Temp_Display_Buffer[11]='0';
    			sel++;
    		}
    		if(K_OK == key)
    		{
    			while(Keys_Scan() == K_OK);
    			TEMP_SET=(set_Temp_Display_Buffer[8]-48)*10+(set_Temp_Display_Buffer[9]-48)+(set_Temp_Display_Buffer[11]-48)*0.1;
    			sel=0;
    			M_Count=1;	
    		}
    	}
    	if(sel==1)
    	{
    		key = Keys_Scan();
    		if(K_CLEAR == key)
    		{
    			while(Keys_Scan() == K_CLEAR);
    			set_Temp_Display_Buffer[8] =' ';
    			set_Temp_Display_Buffer[9] =' ';
    			set_Temp_Display_Buffer[10]=' ';
    			set_Temp_Display_Buffer[11]=' '; 
    			M_Count=0;
    			cold=0;
    			warm=0;
    			sel=0;
    		}                 	
    		if(K_ONE == key)
    		{
    			while(Keys_Scan() == K_ONE);
    			set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
    			set_Temp_Display_Buffer[11]='1';
    			sel++;	
    		}
    		if(K_TWO == key)
    		{
    			while(Keys_Scan() == K_TWO);
    			set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
    			set_Temp_Display_Buffer[11]='2';
    			sel++;
    		}
    		if(K_THREE == key)
    		{
    			while(Keys_Scan() == K_THREE);
    			set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
    			set_Temp_Display_Buffer[11]='3';
    			sel++;
    		}
    		if(K_FOUR == key)
    		{
    			while(Keys_Scan() == K_FOUR);
    			set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
    			set_Temp_Display_Buffer[11]='4';
    			sel++;
    		}
    		if(K_FIVE == key)
    		{
    			while(Keys_Scan() == K_FIVE);
    			set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
    			set_Temp_Display_Buffer[11]='5';
    			sel++;
    		}
    		if(K_SIX == key)
    		{
    			while(Keys_Scan() == K_SIX);
    			set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
    			set_Temp_Display_Buffer[11]='6';
    			sel++;
    		}
    		if(K_SEVEN == key)
    		{
    			while(Keys_Scan() == K_SEVEN);
    			set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
    			set_Temp_Display_Buffer[11]='7';
    			sel++;
    		}
    		if(K_EIGHT == key)
    		{
    			while(Keys_Scan() == K_EIGHT);
    			set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
    			set_Temp_Display_Buffer[11]='8';
    			sel++;
    		}
    		if(K_NINE == key)
    		{
    			while(Keys_Scan() == K_NINE);
    			set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
    			set_Temp_Display_Buffer[11]='9';
    			sel++;
    		}
    		if(K_ZERO == key)
    		{
    			while(Keys_Scan() == K_ZERO);
    			set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
    			set_Temp_Display_Buffer[11]='0';
    			sel++;
    		}
    	}
    	if(sel==2)
    	{
    		key = Keys_Scan(); 
    		if(K_CLEAR == key)
    		{
    			while(Keys_Scan() == K_CLEAR);
    			set_Temp_Display_Buffer[8] =' ';
    			set_Temp_Display_Buffer[9] =' ';
    			set_Temp_Display_Buffer[10]=' ';
    			set_Temp_Display_Buffer[11]=' '; 
    			M_Count=0;
    			cold=0;
    			warm=0;
    			sel=0;
    		}                  
    		if(K_POINT == key)
    		{
    			while(Keys_Scan() == K_POINT);
    			set_Temp_Display_Buffer[9]=set_Temp_Display_Buffer[10] ;
    			set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
    			set_Temp_Display_Buffer[11]='.';
    			sel++;	
    		}
    	}
    	if(sel==3)
    	{
    		key = Keys_Scan(); 
    		if(K_CLEAR == key)
    		{
    			while(Keys_Scan() == K_CLEAR);
    			set_Temp_Display_Buffer[8] =' ';
    			set_Temp_Display_Buffer[9] =' ';
    			set_Temp_Display_Buffer[10]=' ';
    			set_Temp_Display_Buffer[11]=' '; 
    			M_Count=0;
    			cold=0;
    			warm=0;
    			sel=0;
    		}               	
    		if(K_ONE == key)
    		{
    			while(Keys_Scan() == K_ONE);
    			set_Temp_Display_Buffer[8]=set_Temp_Display_Buffer[9] ;
    			set_Temp_Display_Buffer[9]=set_Temp_Display_Buffer[10] ;
    			set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
    			set_Temp_Display_Buffer[11]='1';
    			sel++;	
    		}
    		if(K_TWO == key)
    		{
    			while(Keys_Scan() == K_TWO);
    			set_Temp_Display_Buffer[8]=set_Temp_Display_Buffer[9] ;
    			set_Temp_Display_Buffer[9]=set_Temp_Display_Buffer[10] ;
    			set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
    			set_Temp_Display_Buffer[11]='2';
    			sel++;
    		}
    		if(K_THREE == key)
    		{
    			while(Keys_Scan() == K_THREE);
    			set_Temp_Display_Buffer[8]=set_Temp_Display_Buffer[9] ;
    			set_Temp_Display_Buffer[9]=set_Temp_Display_Buffer[10] ;
    			set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
    			set_Temp_Display_Buffer[11]='3';
    			sel++;
    		}
    		if(K_FOUR == key)
    		{
    			while(Keys_Scan() == K_FOUR);
    			set_Temp_Display_Buffer[8]=set_Temp_Display_Buffer[9] ;
    			set_Temp_Display_Buffer[9]=set_Temp_Display_Buffer[10] ;
    			set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
    			set_Temp_Display_Buffer[11]='4';
    			sel++;
    		}
    		if(K_FIVE == key)
    		{
    			while(Keys_Scan() == K_FIVE);
    			set_Temp_Display_Buffer[8]=set_Temp_Display_Buffer[9] ;
    			set_Temp_Display_Buffer[9]=set_Temp_Display_Buffer[10] ;
    			set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
    			set_Temp_Display_Buffer[11]='5';
    			sel++;
    		}
    		if(K_SIX == key)
    		{
    			while(Keys_Scan() == K_SIX);
    			set_Temp_Display_Buffer[8]=set_Temp_Display_Buffer[9] ;
    			set_Temp_Display_Buffer[9]=set_Temp_Display_Buffer[10] ;
    			set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
    			set_Temp_Display_Buffer[11]='6';
    			sel++;
    		}
    		if(K_SEVEN == key)
    		{
    			while(Keys_Scan() == K_SEVEN);
    			set_Temp_Display_Buffer[8]=set_Temp_Display_Buffer[9] ;
    			set_Temp_Display_Buffer[9]=set_Temp_Display_Buffer[10] ;
    			set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
    			set_Temp_Display_Buffer[11]='7';
    			sel++;
    		}
    		if(K_EIGHT == key)
    		{
    			while(Keys_Scan() == K_EIGHT);
    			set_Temp_Display_Buffer[8]=set_Temp_Display_Buffer[9] ;
    			set_Temp_Display_Buffer[9]=set_Temp_Display_Buffer[10] ;
    			set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
    			set_Temp_Display_Buffer[11]='8';
    			sel++;
    		}
    		if(K_NINE == key)
    		{
    			while(Keys_Scan() == K_NINE);
    			set_Temp_Display_Buffer[8]=set_Temp_Display_Buffer[9] ;
    			set_Temp_Display_Buffer[9]=set_Temp_Display_Buffer[10] ;
    			set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
    			set_Temp_Display_Buffer[11]='9';
    			sel++;
    		}
    		if(K_ZERO == key)
    		{
    			while(Keys_Scan() == K_ZERO);
    			set_Temp_Display_Buffer[8]=set_Temp_Display_Buffer[9] ;
    			set_Temp_Display_Buffer[9]=set_Temp_Display_Buffer[10] ;
    			set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[11] ;
    			set_Temp_Display_Buffer[11]='0';
    			sel++;
    		}
    	}
    	if(sel==4)
    	{
    		key = Keys_Scan(); 
    		if(K_CLEAR == key)
    		{
    			while(Keys_Scan() == K_CLEAR);
    			set_Temp_Display_Buffer[8] =' ';
    			set_Temp_Display_Buffer[9] =' ';
    			set_Temp_Display_Buffer[10]=' ';
    			set_Temp_Display_Buffer[11]=' '; 
    			M_Count=0;
    			cold=0;
    			warm=0;
    			sel=0;
    		}              	
    		if(K_OK == key)
    		{
    			while(Keys_Scan() == K_OK);
    			TEMP_SET=(set_Temp_Display_Buffer[8]-48)*10+(set_Temp_Display_Buffer[9]-48)+(set_Temp_Display_Buffer[11]-48)*0.1;
    			sel=0;
    			M_Count=1;	
    		}
    	}
    }	   
    主程序///
    void main()
    {		
    	init_lcd();
    	Init_DS18B20();
    	timer0_init();
    	while(1)
    	{	
    		Print();
    		set_num();
    		Comparison();
    	}
    }
    
    void Comparison()
    {
    	if(N_Count&&M_Count)
    	{
    		if(TEMP_NOWTEMP_SET)
    		{
    			cold=1;
    			warm=0;
    		}
    		if(TEMP_NOW==TEMP_SET)
    		{
    			cold=0;	
    			warm=0;
    		}
    	}
    }
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    【愚公系列】2022年05月 .NET架构班 069-分布式中间件 Elasticsearch集群的搭建
    IDEA常用插件(持续更新中......)
    如何在会计面试中展现自己的优势?
    抛砖系列之git仓库拆分工具git-filter-repo
    Java8 判空这样写,惊艳,又骚气
    Java常用工具类、包装类
    mysql 的 localhost 连接与 IP 地址连接有什么区别
    微信小程序剪切图片的功能
    【Shell】Shell脚本入门
    终于可以一行代码也不用改了!ShardingSphere 原生驱动问世
  • 原文地址:https://blog.csdn.net/sheziqiong/article/details/127121405