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

📄 menu.c.bak

📁 一个以前开发的实际应用的交通灯控制器程序
💻 BAK
📖 第 1 页 / 共 2 页
字号:
		t1=ADDR_GENARAL_SCH;
	else if((MenuID&0x000f)==0x0002)
		t1=ADDR_HOLIDAY_SCH;
	else
		return;
	t=MenuID&0x00f0;
	t>>=4;
	t-=1;
	t1=t1+t*PHASE_GROUP_LEN;
	
	t=MenuID&0x0f00;
	t>>=8;
	t-=1;
	t=t1+t*PHASE_LEN;//t指向当前相位
//输入
	kv=KEY_NOTKEY;
	while(1)
	{
		while(kv==KEY_NOKEY)
		{
			kv=GetKey();
			if(SecondFlag)
			{
				SecondCheck();
				AutoLockCnt--;
				SecondFlag=0;
				if(AutoLockCnt<SYS_AUTO_LOCK_TIME)
				{
					DeskTopFlag=1;
					PswLock=1;
					return;
				}
			}
		}
		AutoLockCnt=SYS_LCD_OFF_TIME;
		switch(kv)
		{
			case KEY_UP:
			case KEY_LEFT:
				LcdChar(hang,0,0x20);
				if(hang>=1)
					hang--;
				LcdChar(hang,0,CHOSEN_CH);
				break;
			case KEY_DOWN:
			case KEY_RIGHT:
				LcdChar(hang,0,0x20);
				if(hang<3)
					hang++;
				LcdChar(hang,0,CHOSEN_CH);
				break;
			case KEY_ENTER:
				t1=Get256Key(hang,5);
				if(t1!=255)
				{	
					if(hang==1)//绿闪
					t2=(unsigned int)EPR_Read(t+GT_ADJ);//GT
					if(t1>=t2)
					{
						LcdInit();
						LcdCnString(0,3,"警告");
						LcdCnString(2,1,"绿灯时间必需大");
						LcdCnString(3,0,"于绿闪时间");
						kv=KEY_NOKEY;
						while(kv==KEY_NOKEY)
							kv=GetKey();					
					}
					EPR_Page_0();
					Write(t+3+hang,t1);	
					EPR_Page_1();
					PrintNum(hang,5,t1);
				}
				return;
			case KEY_MENU:
				DeskTopFlag=1;
				MenuID=0x0000;
			case KEY_CANCEL:
				return;
			default:
				;	
		}
		t1=(unsigned int)EPR_Read(t+GT_ADJ);//GT
		PrintNum(0,5,t1);
		t1=(unsigned int)EPR_Read(t+GST_ADJ);//GST
		PrintNum(1,5,t1);
		t1=(unsigned int)EPR_Read(t+YT_ADJ);//YT
		PrintNum(2,5,t1);
		t1=(unsigned int)EPR_Read(t+RT_ADJ);//RT
		PrintNum(3,5,t1);
		LcdChar(hang,0,CHOSEN_CH);
		kv=KEY_NOKEY;
	}
}

void CopyPhaseGroup()
{//复制时段
	//输入:MenuID
//
	unsigned int xdata t,t1;
	unsigned char xdata i,k;
	LcdInit();
	if((MenuID&0x000f)==0x0001)
	{
		t1=ADDR_GENARAL_SCH;
		LcdCnString(0,2,"平时设置");
	}
	else if((MenuID&0x000f)==0x0001)
	{
		t1=ADDR_HOLIDAY_SCH;
		LcdCnString(0,2,"节日设置");
	}
	else
		return;
	t=MenuID&0x00f0;
	t>>=4;
	t-=1;
	t=t1+t*PHASE_GROUP_LEN;//t指向当前相组
	
	LcdCnString(2,0,"来自时段:");
	t2=Get44Key(2,5);
	if(t2<12)
	{
		t2=t1+t2*PHASE_GROUP_LEN;//源相组
		EPR_Page_0();
		for(i=0;i<8*7;i++)
		{
			k=EPR_Read(t2+i);
			EPR_Write(t+i,k);	
		}
		EPR_Page_1();
	}
}

void SetSysTime()
{
//输入:无,返回:无
	unsigned char xdata kv,i,k;

	kv=KEY_NOTKEY;
	while(1)
	{
		while(kv==KEY_NOKEY)
		{
			kv=GetKey();
			if(SecondFlag)
			{
				SecondCheck();
				AutoLockCnt--;
				SecondFlag=0;
				if(AutoLockCnt<SYS_AUTO_LOCK_TIME)
				{
					DeskTopFlag=1;
					PswLock=1;
					return;
				}
			}
		}
		AutoLockCnt=SYS_LCD_OFF_TIME;
		switch(kv)
		{
			case KEY_ENTER:
				LcdInit();
				LcdCnString(1,0,"小时:");
				k=Get256Key(1,3);
				if(k<24)
					XBYTE[RTC_BASE+RegHours]=k;
				LcdCnString(1,0,"分钟:");
				k=Get256Key(1,3);
				if(k<60)
					XBYTE[RTC_BASE+RegMinutes]=k;
				LcdCnString(1,0,"秒:");
				k=Get256Key(1,3);
				if(k<60)
					XBYTE[RTC_BASE+RegSeconds]=k;
				return;
			case KEY_MENU:
				DeskTopFlag=1;
				MenuID=0x0000;
			case KEY_CANCEL:			
				return;
			default:
				;
		}
		LcdInit();
		{//显示当前时间
		LcdCnString(0,2,"当前时间");
		k=XBYTE[RTC_BASE+RegHours];//小时
		i=0;
		while(k>=10)
		{
			k-=10;
			i++;
		}
		i+='0';
		LcdChar(1,2,i);
		k+='0';
		LcdAddChar(k);
		LcdAddChar(':');
		k=XBYTE[RTC_BASE+RegMinutes];//分钟
		i=0;
		while(k>=10)
		{
			k-=10;
			i++;
		}
		i+='0';
		LcdAddChar(i);
		k+='0';
		LcdAddChar(k);
		LcdAddChar(':');
		k=XBYTE[RTC_BASE+RegSeconds];//秒
		i=0;
		while(k>=10)
		{
			k-=10;
			i++;
		}
		i+='0';
		LcdAddChar(i);
		k+='0';
		LcdAddChar(k);
		}
		kv=KEY_NOKEY;
	}	
	
}

void SetSysDate()
{
//输入:无,返回:无
	unsigned char xdata kv,i,k;

	kv=KEY_NOTKEY;
	while(1)
	{
		while(kv==KEY_NOKEY)
		{
			kv=GetKey();
			if(SecondFlag)
			{
				SecondCheck();
				AutoLockCnt--;
				SecondFlag=0;
				if(AutoLockCnt<SYS_AUTO_LOCK_TIME)
				{
					DeskTopFlag=1;
					PswLock=1;
					return;
				}
			}
		}
		AutoLockCnt=SYS_LCD_OFF_TIME;
		switch(kv)
		{
			case KEY_ENTER:
				LcdInit();
				LcdCnString(1,0,"年:");
				k=Get256Key(1,2);
				if(k<100)
					XBYTE[RTC_BASE+RegYear]=k;
				LcdCnString(1,0,"月:");
				k=Get256Key(1,2);
				if(k<=12)
					XBYTE[RTC_BASE+RegMonth]=k;
				LcdCnString(1,0,"日:");
				k=Get256Key(1,2);
				if(k<=31)
					XBYTE[RTC_BASE+RegDate]=k;
				return;
			case KEY_MENU:
				DeskTopFlag=1;
				MenuID=0x0000;
			case KEY_CANCEL:
				return;
			default:
				;	
		}
		LcdInit();
		{//显示当前时间
		LcdCnString(0,2,"当前日期");
		k=XBYTE[RTC_BASE+RegYear];//年
		i=0;
		while(k>=10)
		{
			k-=10;
			i++;
		}
		i+='0';
		LcdChar(1,2,i);
		k+='0';
		LcdAddChar(k);
		LcdAddChar('-');
		k=XBYTE[RTC_BASE+RegMonth];//月
		i=0;
		while(k>=10)
		{
			k-=10;
			i++;
		}
		i+='0';
		LcdAddChar(i);
		k+='0';
		LcdAddChar(k);
		LcdAddChar('-');
		k=XBYTE[RTC_BASE+RegDate];//日
		i=0;
		while(k>=10)
		{
			k-=10;
			i++;
		}
		i+='0';
		LcdAddChar(i);
		k+='0';
		LcdAddChar(k);
		}
		kv=KEY_NOKEY;
	}	
	
}

void StepSwitch()
{
	static unsigned char CurSta=0;
	if(MeterSta!=MSTA_MANUAL)//第一次进行检查当前状态
	{
		if(SecondCnt<=GreenTime-GsTime)
			CurSta=0;					
		else if(SecondCnt<=GreenTime)
			CurSta=1;
		else if(SecondCnt<=GreenTime+GsTime)
			CurSta=2;
		else if(SecondCnt<=GreenTime+GsTime+YellowTime)
			CurSta=3;
		else if(SecondCnt<=GreenTime+GsTime+YellowTime+RedTime)
			CurSta=4;
		else
			CurSta=0;
	}

	switch(CurSta)
	{
		case 0:
			ManChanelSta=STA_GREEN;
			CarChanelSta=STA_GREEN;
			SecondCnt=GreenTime-GsTime-1;
			break;
		case 1:
			ManChanelSta=STA_GS;
			CarChanelSta=STA_GREEN;
			SecondCnt=GreenTime-1;
			break;
		case 2:
			ManChanelSta=STA_RED;
			CarChanelSta=STA_GS;
			SecondCnt=GreenTime+GsTime-1;
			break;
		case 3:
			ManChanelSta=STA_RED;
			CarChanelSta=STA_YELLOW;
			SecondCnt=GreenTime+GsTime+YellowTime-1;
			break;
		case 4:
			ManChanelSta=STA_RED;
			CarChanelSta=STA_RED;
			SecondCnt=GreenTime+GsTime+YellowTime+RedTime-1;
			break;
		default:
				CurSta=0;
	}
	
	CurSta++;
	if(CurSta>=4)
	{
		PhaseSwitch();
		CurSta=0;
	}
	
	MeterSta=MSTA_MANUAL;
	//ManuelFlag=1;//手动控制
	//GreenWayFlag=0;//绿色通道关闭
}

void ModifyHoliday()
{//修改节日
//跟设置相位时间一样的做法

//输入:无,返回:无
//显示当前
	unsigned char xdata kv,hang,pos,i,k;
	unsigned int xdata t,t1,t2,t3;
	//LcdInit();
	hang=0;
	pos=0;
//输入
	kv=KEY_NOTKEY;
	while(1)
	{
		while(kv==KEY_NOKEY)
		{
			kv=GetKey();
			if(SecondFlag)
			{
				SecondCheck();
				AutoLockCnt--;
				SecondFlag=0;
				if(AutoLockCnt<SYS_AUTO_LOCK_TIME)
				{
					DeskTopFlag=1;
					PswLock=1;
					return;
				}
			}
		}
		AutoLockCnt=SYS_LCD_OFF_TIME;
		switch(kv)
		{
			case KEY_UP:
			case KEY_LEFT:
				LcdChar(hang,0,0x20);
				if(hang==0)
				{
					if(pos>0)
						pos--;
				}
				else
					hang--;
				//LcdChar(hang,0,CHOSEN_CH);
				break;
			case KEY_DOWN:
			case KEY_RIGHT:
				LcdChar(hang,0,0x20);
				if(hang>=3)
				{
					hang=3;
					if(pos<19-3)
						pos++;
				}
				else
					hang++;
				break;
			case KEY_DEL://删除节日
			case KEY_BKSPACE:
				EPR_Page_0();
				t2=ADDR_HOLIDAY_HEAD-pos*HOLIDAY_LEN;
				EPR_Write(t2-0,0xff);//年
				EPR_Write(t2-1,0xff);//月
				EPR_Write(t2-2,0xff);//日
				EPR_Page_1();
				return;
			case KEY_ENTER:
				LcdInit();
				LcdCnString(1,0,"年:");
				k=Get256Key(1,2);
				if(k<100)
				{
					EPR_Page_0();
					t2=ADDR_HOLIDAY_HEAD-pos*HOLIDAY_LEN-0;//年
					EPR_Write(t2,k);
					EPR_Page_1();
				}
				LcdCnString(1,0,"月:");
				k=Get256Key(1,2);
				if(k<=12)
				{
					EPR_Page_0();
					t2=ADDR_HOLIDAY_HEAD-pos*HOLIDAY_LEN-1;//月
					EPR_Write(t2,k);
					EPR_Page_1();
				}
				LcdCnString(1,0,"日:");
				k=Get256Key(1,2);
				if(k<=31)
				{
					EPR_Page_0();
					t2=ADDR_HOLIDAY_HEAD-pos*HOLIDAY_LEN-2;//日
					EPR_Write(t2,k);
					EPR_Page_1();
				}
				return;
			case KEY_MENU:
				DeskTopFlag=1;
				MenuID=0x0000;
			case KEY_CANCEL:
				return;
			default:
				;	
		}
		LcdInit();
		for(t1=0;t1<4;t1++)
		{
			if(t1>=20)
				break;
			t2=ADDR_HOLIDAY_HEAD-(t1+pos)*HOLIDAY_LEN-0;//年
			k=(EPR_Read(t2);
			if(k>=100)
			{//无效
				LcdChar(hang,1,'-');LcdAddChar('-');LcdAddChar('/');
				LcdAddChar('-');LcdAddChar('-');LcdAddChar('/');
				LcdAddChar('-');LcdAddChar('-');
			}
			else
			{
				i=0;
				while(k>=10)
				{
					k-=10;
					i++;
				}
				i+='0';
				LcdChar(t1,1,i);
				k+='0';
				LcdAddChar(k);
				LcdAddChar('/');
				k=ADDR_HOLIDAY_HEAD-(t1+pos)*HOLIDAY_LEN-1;//月
				i=0;
				while(k>=10)
				{
					k-=10;
					i++;
				}
				i+='0';
				LcdAddChar(i);
				k+='0';
				LcdAddChar(k);
				LcdAddChar('/');
				k=ADDR_HOLIDAY_HEAD-(t1+pos)*HOLIDAY_LEN-2;//日
				i=0;
				while(k>=10)
				{
					k-=10;
					i++;
				}
				i+='0';
				LcdAddChar(i);
				k+='0';
				LcdAddChar(k);
			}
		}
		LcdChar(hang,0,CHOSEN_CH);
		kv=KEY_NOKEY;
	}	
}

void GreenWayCtrl()
{
	unsigned char xdata k;
	k=MenuPos+ChosenPos;
	if(k==0)
	{//禁止通道
		MeterSta=MSTA_AUTO;
		HourUpdate();//更新所有
		PhaseSwitch();
	}
	else if(k<=8)
	{
		k-=1;
		MeterSta=MSTA_GREENWAY;
		CheDaoBuf[2]=GreenWay[k][0];
		CheDaoBuf[1]=GreenWay[k][1];
		CheDaoBuf[0]=GreenWay[k][2];
		SecondCnt=0;
	}
}

⌨️ 快捷键说明

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