⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tem_ctrl.c

📁 自己用51单片机做得温度控制系统
💻 C
字号:
/*****************************************/
/* Copyright (c) 2009, 电子信息工程学院  */
/* All rights reserved.                  */
/* 作    者:王明兴						 */
/*****************************************/

#include "main.h"
#include "DS18B20.h"
#include "MAX7219.h"

extern uint data Disp_Count ;
extern uint data Temp_Count ;
extern uint data Temp_Read;
extern uchar data Read_flag;
extern uchar data Key_Start_flag ;
extern uchar data Key_Setup_flag ;
extern uchar data Key_Up_flag ;
extern uchar data Key_Down_flag ;
extern uchar data Key_Enter_flag ;
extern uchar tplsb,tpmsb;		// 温度值低位、高位字节
extern uchar data Buffer0[4];
extern uchar data Buffer1[4];
extern char data Cur_Temp;
extern uchar DisBuffer[8];    // 显示缓存区

void Da_Trans(void)			  //温度传感器数据处理
{
	uchar n = 0;
	if(tpmsb & 0x80)
	{
		n = 1;
		tpmsb = ~tpmsb;
		tplsb = ~tplsb + 1;
	}
	Cur_Temp = 	(tpmsb << 4) | (tplsb >> 4);
	Buffer0[3] = ((tplsb & 0x0f) * 625 + 500) / 1000;
	Buffer0[2] = Cur_Temp % 10 | 0x80;
	Buffer0[1] = (Cur_Temp % 100) / 10;
	Buffer0[0] = Cur_Temp / 100;
	if(n)
	{
		if(Buffer0[1])
			Buffer0[0] = 0x0a;
		else 
		{
			Buffer0[0] = 0x0f;
			Buffer0[1] = 0x0a;
		}
	}
	else
		if(Buffer0[0] == 0)
		{
			Buffer0[0] = 0x0f;
			if(Buffer0[1] == 0)
				Buffer0[1] = 0x0f;
		}
}

void Display(uchar *addr)			//显示
{
	uchar i;
	for(i = 0;i < 4;i ++)
		DisBuffer[i]= *addr ++;
	WriteWord (Digit0,DisBuffer[0]);
    WriteWord (Digit1,DisBuffer[1]);
    WriteWord (Digit2,DisBuffer[2]);
    WriteWord (Digit3,DisBuffer[3]);
}

void Da_Tran(uchar temp)			  //设置模式数据处理
{
	Buffer1[3] = 0x00;
	Buffer1[2] = (temp % 10) | 0x80;
	Buffer1[1] = (temp % 100) / 10;
	Buffer1[0] = temp / 100;
	if(Buffer1[0] == 0)
	{
		Buffer1[0] = 0x0f;
		if(Buffer1[1] == 0)
			Buffer1[1] = 0x0f;
	}
}

void Key_Process()						 //键盘处理
{
	uchar Current_Key_Value,Last_Key_Value;
	if((P1 >> 3) != 0x1f)
	{
		Last_Key_Value = P1 >> 3;
		delay(100);
		Current_Key_Value = P1 >> 3;
		if(Current_Key_Value == Last_Key_Value)
		{
			switch(Current_Key_Value)
			{
				case 0x1e :
					Key_Start_flag = !Key_Start_flag;
					if(Key_Start_flag == 0)
					{
						Key_Setup_flag = 0;
						LED_NORMAL = 1;
						LED_WARING = 1;
						TEMP_CTRL = 1;
					}
					break;
				case 0x1d :
					Key_Setup_flag = 1;
					break;
				case 0x1b :
					Key_Up_flag = 1;
					break;
				case 0x17 :
					Key_Down_flag = 1;
					break;
				case 0x0f :
					Key_Enter_flag = 1;
					break;
			}
		}
	}
}

void T0_ISR() interrupt 1 using 1			   //T0中断服务程序
{
	static uint counter = 0;
	TH0 = 0xf0;
	TL0 = 0xd8;
	counter ++;
	if(counter == 200)
	{
		counter = 0;
		LED_STATE = !LED_STATE;
	}
}

void T1_ISR() interrupt 3 using 2			 //T1中断服务程序
{
	TH1 = 0xf0;
	TL1 = 0xd8;
	Disp_Count ++;
	Temp_Count ++;
	if(Read_flag)
		Temp_Read ++;
}
	
	
				


	
				



	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -