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

📄 test.c

📁 STM32实现定时加热
💻 C
字号:
#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"		
#include "delay.h"	
#include "led.h" 
#include "key.h"
#include "exti.h"
#include "timer.h"
#include "lcd.h"	   
#include "rtc.h"
#include "wkup.h"
#include "remote.h"
#include "ds18b20.h"
#include "switch.h"
#include"settimer.h"
#include"temperature.h"
#include"operation.h"
/*const u8 *COMPILED_DATE=__DATE__;//获得编译日期
const u8 *COMPILED_TIME=__TIME__;//获得编译时间	//这句话为什么不能使用呢????*/	 
/*int set_timer_temp[10];
int maxtemp=100,mintemp=0;
const u8* Week[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};	 */
extern int maxtemp1;  //
extern int mintemp1;  //必须重新引用全局变量
extern int midtemp;
extern int Start;
extern int tempkeep;
extern short t[10];
int main(void)
{	

    u8 t=0;		 	
 	short temp; //8位信号 
	u8 key;
	u8 t1;//必须在前面定义,c语言的规则  				    
  	Stm32_Clock_Init(9);//系统时钟设置
	delay_init(72);		//延时初始化
	uart_init(72,9600); //串口1初始化  	  
	LCD_Init();			//初始化液晶 
	LED_Init();         //LED初始化	
	RTC_Init();	
	SWITCH_Init();//继电器控制端口初始化
    EXTIX_Init();//中断初始化	 
 	POINT_COLOR=RED;//设置字体为红色	   	   
	Remote_Init();	    //初始化红外接收   
//	POINT_COLOR=RED;//设置字体为红色
     SWITCH1=0;	
	 WARN=0; 
 	 while(DS18B20_Init())//初始化DS18B20,兼检测18B20
	{
	    //显示字符串
		//x,y:起点坐标  
		//*p:字符串起始地址
		//用16字体
		//void LCD_ShowString(u16 x,u16 y,const u8 *p)
			LCD_ShowString(0,130,"DS18B20 Check Failed!");
			delay_ms(500);		  
			LCD_ShowString(10,130,"Please Check!        ");
			delay_ms(500);
			LED0=!LED0;//DS0闪烁
	}
	temp_filter_init();
 	while(1)
	{	  
    /**********************温度显示部分************************/
	               // temp=DS18B20_Get_Temp();
					 temp=temp_filter();
					if(temp<0)
					{
						temp=-temp;
						//在指定位置显示一个字符
						//x:0~234
						//y:0~308
						//num:要显示的字符:" "--->"~"
						//size:字体大小 12/16
						//mode:叠加方式(1)还是非叠加方式(0)
						//在指定位置显示一个字符
						//x:0~234
						//y:0~308
						//num:要显示的字符:" "--->"~"
						//size:字体大小 12/16
						//mode:叠加方式(1)还是非叠加方式(0)
						//void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
						LCD_ShowChar(156,8,'-',16,0);//显示负号	
				}	
				//显示2个数字
						//x,y :起点坐标	 
						//len :数字的位数
						//size:字体大小	 16代表16*8 12代表12*6
						//color:颜色
						//num:数值(0~4294967295); 
						//void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size)
					LCD_ShowString(60,8,"Temperature:");
                	LCD_ShowNum(164,8,temp/10,2,16);//显示温度值	 
					LCD_ShowChar(180,8,'.',16,0);//显示负号
					LCD_ShowNum(188,8,temp%10,1,16);//显示温度值
					//printf("温度:%d %d",temp/10,temp%10);
					LCD_ShowChar(204,8,'C',16,0);//显示摄氏度
					//t2=temp/10;
				    //delay_ms(10);
				   // LCD_ShowNum(0,300,temp,8,16);//显示温度值
				   if(Start==1)	  //程序运行时进入此操作
				   {
				  
		                    if(temp>=(maxtemp1*10))
							{
								stop_temp();
								WARN=0;//停止时蜂鸣器停止
							}
							if(temp<(maxtemp1*10)&&temp>=(maxtemp1*10-50))	
							{
								warn_temp();
							}
						//	if(temp<(maxtemp1*10-50)&&temp>(mintemp1*10))
							if(tempkeep==1)
							{
								if(temp>=(midtemp*10+50))	
								{
									stop_temp();
									WARN=0;//停止时蜂鸣器停止
								}		
								 if(temp<=(midtemp*10-50))
								{
									 start_temp();
								}	
							}	 
							if(temp<=(mintemp1*10))
							{
							  start_temp();	
							}
					}	
	/************************************红外线遥控部分************************/
			if(Remote_Rdy)
		{
			key=Remote_Process();	  
			switch(key)
			{
	
				case 56:
					LCD_ShowString(86,150, "8     ");
				//	 printf("8 \n\n");
					break;
				case 104:
				//	LCD_ShowString(86,150, "1     ");
					 // printf("1\n\n");
					 start_temp();
				     break;
				case 152:
				     //LCD_ShowString(86,150, "2     ");
					 // printf("2 \n\n");
					   set_temperature();
					 LCD_Clear(WHITE);
					break;
				case 176:
			    	//	LCD_ShowString(86,150, "3     ");
					// printf("3 \n\n");
					 	set_temper_time();
						LCD_Clear(WHITE);
					break;
				case 48:
				//	LCD_ShowString(86,150, "4     ");
				 	   set_timer1();
					 LCD_Clear(WHITE);
					break;
				case 24:
				//	LCD_ShowString(86,150, "5     ");
					  // printf("5   \n\n");
					 	// LCD_ShowString(60,248,"unuseful operation!");
						pause_temp();
				    	LCD_Clear(WHITE);
				      	break;
				case 122:
			        	//	LCD_ShowString(86,150, "6     ");
						  LCD_Clear(WHITE);
						 LCD_ShowString(60,248,"Choose Standby?");
						 LCD_ShowString(60,268,"ALIENK(yes) else(no)");
						 if(judge()==1)
						 {
						  LCD_ShowString(60,288,"prepare for Standby");
						  delay_1s(5);
						  WARN=0;
						  SWITCH1=0;//关闭相应IO口
						  delay_ms(100);
						  Sys_Standby();
						 }
						 LCD_Clear(WHITE);
					break;
				case 16:
					LCD_ShowString(86,150, "7     ");
					// printf("7  \n\n");
					temp_keeptimer();
					break;
				case 90:
					LCD_ShowString(86,150, "9     ");
				//	printf("9  \n\n");
					break;
				case 66:
					LCD_ShowString(86,150, "0     ");
				//	printf("0   \n\n");
					break;	    
			}
		}
		else delay_ms(2);
		t1++;
		if(t1==200)
		{	  
		t1=0;
		LED0=!LED0;
		}  
/*************************时钟显示部分********************************/
			if(t!=timer.sec)
		{
			t=timer.sec;
			LCD_ShowNum(60,30,timer.w_year,4,16);									  
			LCD_ShowNum(100,30,timer.w_month,2,16);									  
			LCD_ShowNum(124,30,timer.w_date,2,16);	 
			switch(timer.week)
			{
				case 0:
					LCD_ShowString(60,48,"Sunday   ");
					break;
				case 1:
					LCD_ShowString(60,48,"Monday   ");
					break;
				case 2:
					LCD_ShowString(60,48,"Tuesday  ");
					break;
				case 3:
					LCD_ShowString(60,48,"Wednesday");
					break;
				case 4:
					LCD_ShowString(60,48,"Thursday ");
					break;
				case 5:
					LCD_ShowString(60,48,"Friday   ");
					break;
				case 6:
					LCD_ShowString(60,48,"Saturday ");
					break;  
			}
			LCD_ShowNum(60,66,timer.hour,2,16);									  
			LCD_ShowNum(84,66,timer.min,2,16);									  
			LCD_ShowNum(108,66,timer.sec,2,16);
		//	LED0=!LED0;
				 /***************菜单选项***************/
			   LCD_ShowString(0,100,"1,start");
			   LCD_ShowString(0,130,"2,set expected temperature");
			   LCD_ShowString(0,160,"3,set expected disinfect time");
			   LCD_ShowString(0,190,"4,resive present time");
			   LCD_ShowString(0,220,"5,pause");
			   LCD_ShowString(0,250,"6,Standby");
			   LCD_ShowString(0,280,"7,set keep time(origin:50C)");
		}		   
   }
}


				 






⌨️ 快捷键说明

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