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

📄 usermain.c

📁 51开发板的源程序
💻 C
字号:
//包含文件如下

#include "c51base.h" 


uchar password[4];

uchar *I2c_pw	  =(uchar xdata *)0x8130;
struct SlineTable *I2c_humtable   = (struct SlineTable xdata *)0x8100;
struct Scheck	  *I2c_mhumtable  = (struct Scheck xdata *)0x8110;
struct Scheck	  *I2c_mtemptable = (struct Scheck xdata *)0x8120;
struct Scheck	  *I2c_yalitable  = (struct Scheck xdata *)0x8140;
struct Stimer     *I2c_timertable = (struct Stimer xdata *)0x8200;


/*************************
初始化函数。
*************************/
void DeviceInit()
{
	InitSFR_SM89516();
	CommInit();
	TimerInit();
	InitEPROM();
	EA = 1;
}


void GetData(uchar *Data_buf)
{
	uchar idata time[7],i,temp;
	static uint temp_count=0,temp_buf[5];
WDTReset_SM89516();
	GetTime(7,time);
	Data_buf[0] = time[4];
	Data_buf[1] = time[5];
	Data_buf[2] = time[6];
	Data_buf[3] = time[0];
	Data_buf[4] = time[1];
	Data_buf[5] = time[2];
	Data_buf[6] = time[3];

//	printf("电压= %d伏特",(int)Data_buf[8]);
	temp_buf[temp_count++] = GetTemper(10);
	if(temp_count>4)
		temp_count = 0;

	temp = temp_buf[i];
	for(i=0;i<3;i++)
	{
		if(temp <= temp_buf[i+1])
			temp = temp_buf[i+1];
	}

	Data_buf[7] = (temp_buf[0]+temp_buf[1]+temp_buf[2]+temp_buf[3]+temp_buf[4])/5;	
}


void ProcessData(uchar *Data_buf)
{
	uchar temp;
	temp = Data_buf[0];
}



/*******************************************
主界面显示函数,主要显示为:
	1,时间显示,在液晶最上面一行显示当前的时间
	2,温度显示,在液晶的第二行显示当前的温度
	3,湿度显示,在液晶的第二行显示当前的湿度
	4,下一个启动的定时器编号和时间
*******************************************/

void MainDisplay(uchar *Data_buf)
{
	uint value;
	uchar vol[4];
	DisplayStr(6,2,":");	
	DisplayStr(9,2,":");	//时间显示
	DisplayType(4,2,(Data_buf[0]%100)/10+'0');
	DisplayType(5,2,Data_buf[0]%10+'0');
	DisplayType(7,2,(Data_buf[1]%100)/10+'0');
	DisplayType(8,2,Data_buf[1]%10+'0');
	DisplayType(10,2,(Data_buf[2]%100)/10+'0');
	DisplayType(11,2,Data_buf[2]%10+'0');

//	printf("value = %d\n",(int)Data_buf[6]);
	DisplayStr(0,0,"20");
	DisplayStr(4,0,"年");
	DisplayStr(8,0,"月");
	DisplayStr(12,0,"日");
	DisplayStr(0,1,"星期");
	DisplayStr(0,2,"时间");
	DisplayStr(6,2,":");
	DisplayStr(9,2,":");
	DisplayType(2,0,(Data_buf[3]%100)/10+'0');
	DisplayType(3,0,Data_buf[3]%10+'0');
	DisplayType(6,0,(Data_buf[4]%100)/10+'0');
	DisplayType(7,0,Data_buf[4]%10+'0');
	DisplayType(10,0,(Data_buf[5]%100)/10+'0');
	DisplayType(11,0,Data_buf[5]%10+'0');
	switch(Data_buf[6])
	{
		case 0:DisplayStr(4,1,"一");
			break;
		case 1:DisplayStr(4,1,"二");
			break;
		case 2:DisplayStr(4,1,"叁");
			break;
		case 3:DisplayStr(4,1,"四");
			break;
		case 4:DisplayStr(4,1,"五");
			break;
		case 5:DisplayStr(4,1,"六");
			break;
		case 6:DisplayStr(4,1,"日");
			break;
		default:
			break;
	}

	DisplayStr(0,3,"室内温度  ");
	DisplayStr(10,3,"~    ");
//	printf("温度通道 %d\n",(int)Data_buf[7]);
	if(Data_buf[7]<=90 && Data_buf[7]>=0)
	{		
		if(Data_buf[7]>=10)
			DisplayType(8,3,(Data_buf[7]%100)/10+'0');
		else
			DisplayStr(8,3," ");
		DisplayType(9,3,Data_buf[7]%10+'0');
	}


		value = ADCRead(1);
		value = value/6;
		vol[0] = ((int)value)%100/10+'0';
//		printf("vol[0]=%d\n",(int)vol[0]);
		vol[1] = ((int)value)%100%10+'0';
		DisplayStr(7,1,"湿度");
		DisplayStr(12,1,vol);
		DisplayStr(14,1,"%");
}


void SendData()
{
	uchar key_value,temper;
	CLEAR_SCREEN();	
	DisplayStr(3,0,"DATA CHECK");
	while(1)
	{
		key_value = WaitKey(1000);
		if(key_value == 'x' || key_value == 0xff)
			return;
		if(key_value == 'e')
		{
			temper = GetTemper(10);
			putchar(0x01);
			putchar(0x0f);
			printf("2003年12月1日星期一");
			printf("现在房间温度");
			putchar(0x11);
			printf("%d",(int)temper);
			putchar(0x0f);
			printf("摄氏度");
			putchar(0x04);
			DisplayStr(0,1,"Data Send success");
			WaitKey(30);
			CLEAR_SCREEN();	
			DisplayStr(3,0,"DATA CHECK");
		}
	}
}


void MenuSec()
{
	uchar key_value,i;
	i = 0;
	CLEAR_SCREEN();	
	while(1)
	{
		if(i<=3)
		{
			DisplayStr(0,i,">");
			DisplayStr(2,0,"时间日期设定 ");
			DisplayStr(2,1,"密码设定     ");
			DisplayStr(2,2,"Send Data    ");
			DisplayStr(2,3,"             ");
		}
		key_value = WaitKey(1000);
		if(key_value == 'x' || key_value == 0xff)
			return;
		if(key_value == 'e')
		{
			switch(i)
			{
				case 0:TimeSetup();CLEAR_SCREEN();
					break;
				case 1:PWSeting();CLEAR_SCREEN();
					break;
				case 2:SendData();CLEAR_SCREEN();
					break;
				default:
					break;
			}
		}else if(key_value == 'd')
		{
			if(i<2)
			{
				if(i<=3)
					DisplayStr(0,i," ");
				else if(i>=4 && i<=7)
					DisplayStr(0,i-4," ");
				else if(i>=8)
					DisplayStr(0,i-8," ");
				i++;
			}
		}else if(key_value == 'u')
		{
			if(i>0)
			{
				if(i<=3)
					DisplayStr(0,i," ");
				else if(i>=4 && i<=7)
					DisplayStr(0,i-4," ");
				else if(i>=8)
					DisplayStr(0,i-8," ");
				i--;
			}
		}		
	}
}


/****************************************************************
						主函数
****************************************************************/

uchar xdata ad_value[] ={"24"};

code uint *table[]=
{
	ad_value,
};




void main()
{
	uchar key_value,temper;
	uchar Data_buf[9];
	DeviceInit();
	printf("51测试板, %s\n",__DATE__);
	LcdInit();
	CLEAR_SCREEN();
	I2CDataCheck();
//	while(1);
	CLEAR_SCREEN();
	printf("测试%s\n",table[0]);
	while(1)
	{
		LcdRs();
		GetData(Data_buf);		//取读取显示的数据
		ProcessData(Data_buf);
		MainDisplay(Data_buf);

		if(IsKeyCheck())//	if(SerialCheck())
		{
			key_value = WaitKey(10);//ReadSerialBuf(10);
		//	printf("key_value = %c\n",key_value);

			switch(key_value)
			{
				case 'e':if(PWcompare())
							MenuSec();
						 CLEAR_SCREEN();
					break;
				case 'x':TimeDisplay();CLEAR_SCREEN();
					break;
				case 'u':
					temper = GetTemper(10);	
					putchar(0x01);
					putchar(0x0f);
					printf("现在时间是");
					printf("%d",(int)Data_buf[0]);
					printf("点");
					printf("%d",(int)Data_buf[1]);
					printf("分");
					printf("%d",(int)Data_buf[2]);
					printf("秒");
					printf("房间温度");
					printf("%d",(int)temper);
					printf("摄氏度");
					putchar(0x04);
					WaitKey(30);
					CLEAR_SCREEN();	
					DisplayStr(3,0,"DATA CHECK");
					break;
				default:
					break;
			}
		}
	}
}

⌨️ 快捷键说明

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