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

📄 main.c

📁 51单片机实现的温湿度采集监控
💻 C
📖 第 1 页 / 共 2 页
字号:
					sysData[MIN]=0;
				break;
			case 5:BCDpp(&sysData[SEC]);
				if(sysData[SEC]>0x59)
					sysData[SEC]=0;
				break;
			case 6:BCDpp(&sysData[DAY]);
				if(sysData[DAY]>0x07)
					sysData[DAY]=1;
				break;
			case 7:tempLimit++;break;
			case 8:humiLimit++;break;
			default:break;
		}

	}
	if(flagDec)
	{
		flagDec=0;
		blinkCount=0;
		switch(flagOpt)
		{
			case 0:BCDmm(&sysData[YEAR]);
				if(sysData[YEAR]==0xf9)
					sysData[YEAR]=0x99;
				break;
			case 1:BCDmm(&sysData[MON]);
				if(sysData[MON]<1)
					sysData[MON]=0x12;
				break;
			case 2:BCDmm(&sysData[DATE]);
				if(sysData[DATE]<1)
					sysData[DATE]=MonSheet[CheckLeapyear(sysData[YEAR])][sysData[MON]];
				break;
			case 3:BCDmm(&sysData[HOUR]);
				if(sysData[HOUR]==0xf9)
					sysData[HOUR]=0x23;
				break;
			case 4:BCDmm(&sysData[MIN]);
				if(sysData[MIN]==0xf9)
					sysData[MIN]=0x59;
				break;
			case 5:BCDmm(&sysData[SEC]);
				if(sysData[SEC]==0xf9)
					sysData[SEC]=0x59;
				break;
			case 6:BCDmm(&sysData[DAY]);
				if(sysData[DAY]<1)
					sysData[DAY]=0x07;
				break;
			case 7:tempLimit--;break;
			case 8:humiLimit--;break;
			default:break;
		}
	}
	Set1302(sysData);
}
/********************************************************************
函数名称:ShowMonitorData()
功	能:显示年月日时分秒和监测数据
入口参数:无
返回参数:无
********************************************************************/
void ShowMonitorData()
{
	Display12864(ADDR_LINE1+1,"20");
	if(R1302(ADDR_YEAR)!=sysData[YEAR])
	{	
		sysData[YEAR]=R1302(ADDR_YEAR);
		DisplayYear();
	}
	if(R1302(ADDR_MON)!=sysData[MON])
	{
		sysData[MON]=R1302(ADDR_MON);
		DisplayMon();
	}
	if(R1302(ADDR_DATE)!=sysData[DATE])
	{
		sysData[DATE]=R1302(ADDR_DATE);
		DisplayDate();
	}
	if(R1302(ADDR_DAY)!=sysData[DAY])
	{
		sysData[DAY]=R1302(ADDR_DAY);
		DisplayDay();
	}
	if(R1302(ADDR_HOUR)!=sysData[HOUR])
	{
		sysData[HOUR]=R1302(ADDR_HOUR);
		DisplayHour();
	}
	if(R1302(ADDR_MIN)!=sysData[MIN])
	{
		sysData[MIN]=R1302(ADDR_MIN);
		DisplayMin();
	}
	if(R1302(ADDR_SEC)!=sysData[SEC])
	{
		sysData[SEC]=R1302(ADDR_SEC);
		DisplaySec();
	}
	if(SHTcount%256==0)				//执行256次程序读取SHT10一次,防止传感器过热
	{
		GetSHT10(&tempf,&humif);
		sprintf(temps,"%.1f",tempf);
		sprintf(humis,"%.1f",humif);
		Display12864(POS_TEMP,temps);
		Display12864(POS_HUMI,humis);
	}
}
/********************************************************************
函数名称:ShowSettingsData()
功	能:显示设置的数据
入口参数:无
返回参数:无
********************************************************************/
void ShowSettingsData()
{
	sprintf(temps,"%.1f",tempLimit);
	sprintf(humis,"%.1f",humiLimit);
	switch(flagOpt)
	{
		case 0:
			if(blinkCount%128<64)
			{
				Display12864(ADDR_LINE1+1,"20");
				DisplayYear();
				blinkCount++;
			}
			else
			{
				Display12864(ADDR_LINE1+1,"    ");
				blinkCount++;
			}
			DisplayMon();
			DisplayDate();
			DisplayHour();
			DisplayMin();
			DisplaySec();
			sysData[DAY]=GetDay(sysData[YEAR],sysData[MON],sysData[DATE]);			 
			DisplayDay();
			Display12864(POS_TEMP,temps);
			Display12864(POS_HUMI,humis);
			break;
		case 1:
			if(blinkCount%128<64)
			{
				DisplayMon();
				blinkCount++;
			}
			else
			{
				Display12864(POS_MON,"  ");
				blinkCount++;
			}
			Display12864(ADDR_LINE1+1,"20");
			DisplayYear();
			if(sysData[DATE]>MonSheet[CheckLeapyear(sysData[YEAR])][sysData[MON]])
				sysData[DATE]=MonSheet[CheckLeapyear(sysData[YEAR])][sysData[MON]];
			DisplayDate();
			DisplayHour();
			DisplayMin();
			DisplaySec();
			sysData[DAY]=GetDay(sysData[YEAR],sysData[MON],sysData[DATE]);
			DisplayDay();
			Display12864(POS_TEMP,temps);
			Display12864(POS_HUMI,humis);
			break;
		case 2:
			if(blinkCount%128<64)
			{
				DisplayDate();
				blinkCount++;
			}
			else
			{
				Display12864(ADDR_LINE1+6,"  ");
				blinkCount++;
			}
			Display12864(ADDR_LINE1+1,"20");
			DisplayYear();
			DisplayMon();
			DisplayHour();
			DisplayMin();
			DisplaySec();
			sysData[DAY]=GetDay(sysData[YEAR],sysData[MON],sysData[DATE]);
			DisplayDay();
			Display12864(POS_TEMP,temps);
			Display12864(POS_HUMI,humis);
			break;
		case 3:
			if(blinkCount%128<64)
			{
				DisplayHour();
				blinkCount++;
			}
			else
			{
				Display12864(POS_HOUR,"  ");
				blinkCount++;
			}
			Display12864(ADDR_LINE1+1,"20");
			DisplayYear();
			DisplayMon();
			DisplayDate();
			DisplayMin();
			DisplaySec();
			DisplayDay();
			Display12864(POS_TEMP,temps);
			Display12864(POS_HUMI,humis);
			break;
		case 4:
			if(blinkCount%128<64)
			{
				DisplayMin();
				blinkCount++;
			}
			else
			{
				Display12864(POS_MIN ,":  :");
				blinkCount++;
			}
			Display12864(ADDR_LINE1+1,"20");
			DisplayYear();
			DisplayMon();
			DisplayDate();
			DisplayHour();
			DisplaySec();
			break;
		case 5:
			if(blinkCount%128<64)
			{
				DisplaySec();
				blinkCount++;
			}
			else
			{
				Display12864(POS_SEC,"  ");
				blinkCount++;
			}
			Display12864(ADDR_LINE1+1,"20");
			DisplayYear();
			DisplayMon();
			DisplayDate();
			DisplayHour();
			DisplayMin();
			DisplayDay();
			Display12864(POS_TEMP,temps);
			Display12864(POS_HUMI,humis);
			break;
	    case 6:
			if(blinkCount%128<64)
			{
				DisplayDay();
				blinkCount++;
			}
			else
			{
				Display12864(POS_DAY,"  ");
				blinkCount++;
			}
			Display12864(ADDR_LINE1+1,"20");
			DisplayYear();
			DisplayMon();
			DisplayDate();
			DisplayHour();
			DisplayMin();
			DisplaySec();
			Display12864(POS_TEMP,temps);
			Display12864(POS_HUMI,humis);
			break;
		case 7:
			if(blinkCount%128<64)
			{
				Display12864(POS_TEMP,temps);
				blinkCount++;
			}
			else
			{
				Display12864(POS_TEMP,"    ");
				blinkCount++;
			}
			Display12864(ADDR_LINE1+1,"20");
			DisplayYear();
			DisplayMon();
			DisplayDate();
			DisplayHour();
			DisplayMin();
			DisplaySec();
			DisplayDay();
			Display12864(POS_HUMI,humis);
			break;
		case 8:
			if(blinkCount%128<64)
			{
				Display12864(POS_HUMI,humis);
				blinkCount++;
			}
			else
			{
				Display12864(POS_HUMI,"    ");
				blinkCount++;
			}
			Display12864(ADDR_LINE1+1,"20");
			DisplayYear();
			DisplayMon();
			DisplayDate();
			DisplayHour();
			DisplayMin();
			DisplaySec();
			DisplayDay();
			Display12864(POS_TEMP,temps); 
			break;
	
		default:break;
	
	}
}
	
/********************************************************************
函数名称:ShowData()
功	能:显示DS1302和SHT10的数据
入口参数:无
返回参数:无
********************************************************************/

void ShowData()
{		
	if(flagSettings==0)
	{
		ShowMonitorData();	
	}
	if(flagSettings==1)
	{
		ShowSettingsData();
	}	
}


/********************************************************************
函数名称: SystemInit
功	能:系统初始化
入口参数:无
返回参数:无
********************************************************************/
void SystemInit()
{
	TMOD=0x11;
	EA=1;
	ET0=1;
	TH0=(65536-10000)/256;
	TL0=(65536-10000)%256;
	ConnectionResetSHT10();
	if(R1302(0xC1)!=0x55)
	{
		W1302(0x8e,0x00);
		W1302(0xC0,0x55);
		W1302(0x8e,0x80);
		Set1302(sysData);
	}
	LcdInit();
	LcdClear();	
}
/********************************************************************
函数名称: main
功	能:主函数
入口参数:无
返回参数:无
********************************************************************/
void main()
{
	SystemInit();
	DisplayFrame();
	while(1)
	{	
		keyscan();
		if(flagSettings==0)
		{
			if(pFlagSettings==1)
				DisplayFrame();
			ShowData();
			CheckLimit(&tempf,&humif);
			SHTcount++;
		}
		if(flagSettings==1)

		{  
			Display12864(ADDR_LINE1,"*");
			if(pFlagSettings==0)
				DisplayFrame();
			ShowData();
			SystemSettings();
		}
		pFlagSettings=flagSettings;
	}
}

⌨️ 快捷键说明

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