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

📄 funclcd.c

📁 Keil C51完整的128X64LCD显示的电子打铃仪代码,内含DS1302X5045等操作代码
💻 C
📖 第 1 页 / 共 3 页
字号:
	data uint8 i;

   #if MAINMENUITEMNUM>4
	if(!First_Showmenu)
	{
		First_Showmenu=TRUE;
		ClearRAM(0,8);
	}
   #endif
		
	if(index<4)
	{
		//显示第一屏主菜单
		for(i=0;i<MENUITEMONELCD;i++)
		{
			if (index==i)
				Display_Line(i*2,32,4,1,Main_Menu[i]);
			else
				Display_Line(i*2,32,4,0,Main_Menu[i]);
		}
	}

	#if MAINMENUITEMNUM>4
	else
	{
		//显示第二屏主菜单
		for(i=MENUITEMONELCD;i<MAINMENUITEMNUM;i++)
		{
			if (index==i)
				Display_Line((i-4)*2,32,4,1,Main_Menu[i]);
			else
				Display_Line((i-4)*2,32,4,0,Main_Menu[i]);
		}
	}
	#endif
}


void SunMenuShow(uint8 MenuIndex)
{
	uint8 i;

	//显示第一屏主菜单
	for(i=0;i<4;i++)
	{
		if (MenuIndex==i)
			Display_Line(i*2,32,4,1,Sub_Menu[i]);
		else
			Display_Line(i*2,32,4,0,Sub_Menu[i]);
	}
}


//===========================================================================================
//================================ 菜单功能处理函数 =========================================
//===========================================================================================

//系统设置
void SystemSet(void)
{
	uint8 KeyV,Inx=0;
 	
	Delay_Ret(T0_60S);
	ClearRAM(0,8);
	
	while(1)
	{
		SunMenuShow(Inx);

		if(ret_Flag)
		{
		 	ClearRAM(0,8);
			return;			
		}

		KeyV=KeyScan();

	    if(KeyV==NOKEY_PRESS)continue;

		Light_On();
		NoDelay_Ret();

		if(KeyV==ENTER)
		{
			 ClearRAM(0,8);

		   	 if(Inx==0)
			 {
				LcdLightProc();
			 }
			 else if(Inx==1)
			 {
				BeepProc();
			 }
			 else  if(Inx==2)
			 {
			  	  DelTimer();
			 }
			 else
			 {
			  	 ViewTimer();
			 }
		}
		else if(KeyV==MOVE)
		{
			 Inx++;
			 if(Inx>3)Inx=0;
		}
		else if(KeyV==ESC)
		{
			ClearRAM(0,8);
			return;
		}

	}
}

//设置闹铃
void WakeSetProc()
{
	uint8 tempvar,Sys_D_T0[7],tempvar1;
	bool h_Flag=1,m_Flag=0;
	uint8 KeyNum=0;

	TimerCount=EepromRead(Timers);
	ClearRAM(0,8);
	//请输入时间:
	Display_Line(0,16,6,0,ShowTip[4]);
	//序号:
	Display_Line(4,32,3,0,ShowTip[5]);

	Get_TimeFromDS1302(Sys_D_T0);
	Msingle_font_pattern (mh,2,64,0);
	Delay_Ret(T0_6S);

	while(1)
	{
		if (ret_Flag)
		{
			ClearRAM(0,8);
			break;
	    }
		TimerCount=EepromRead(Timers);
		Msingle_font_pattern (English_Offset[TimerCount/10],4,88,0);
		Msingle_font_pattern (English_Offset[TimerCount%10],4,96,0);

		tempvar=(Sys_D_T0[2]>>4)&0x0F;
		Msingle_font_pattern (English_Offset[tempvar],2,48,h_Flag);
        tempvar=Sys_D_T0[2]&0x0F;
        Msingle_font_pattern (English_Offset[tempvar],2,56,h_Flag);
		tempvar=(Sys_D_T0[1]>>4)&0x0F;
		Msingle_font_pattern (English_Offset[tempvar],2,72,m_Flag);
        tempvar=Sys_D_T0[1]&0x0F;
        Msingle_font_pattern (English_Offset[tempvar],2,80,m_Flag);

		tempvar=KeyScan();
		if(tempvar==NOKEY_PRESS)continue;
		ClearRAM(6,8);
		Light_On();
        NoDelay_Ret();

		switch(tempvar)
		{
			case MOVE:
				if(KeyNum==1)
				{
					KeyNum=0;
				}
				else
				{
					KeyNum=1;
				}
				if(KeyNum==0)
				{
					h_Flag=1;
					m_Flag=0;
				}
				else if(KeyNum==1)
				{
					h_Flag=0;
					m_Flag=1;
				}
				break;
			case ENTER://保存闹铃

				if(EepromRead(TimerFlag)!=0x55)EepromWrite(TimerFlag,0x55);
				Delay(1);
				if(EepromRead(TimerFlag+1)!=0xAA)EepromWrite(TimerFlag+1,0xAA);

				if(TimerCount<MaxTimer)
				{
					for(tempvar1=0;tempvar1<TimerCount;tempvar1++)
					{
						if(TimerArray[tempvar1].Hour==Sys_D_T0[2]&&TimerArray[tempvar1].Minute==Sys_D_T0[1])
						{
							TimerArray[tempvar1].BitEnable=0xAA;//恢复打铃
							Display_Line(6,16,6,0,ShowTip[6]);//提示打铃已设置
							Status_Beep();
							goto ExitSet;
						}
					}				
					tempvar=TimerValue+TimerCount*3;
					EepromWrite(tempvar,0xAA);
					Delay(1);
					EepromWrite(tempvar+1,Sys_D_T0[2]);
					Delay(1);
					EepromWrite(tempvar+2,Sys_D_T0[1]);
					_NOP_();
					TimerArray[tempvar1].BitEnable=0xAA;//					  EepromRead(tempvar);//
					TimerArray[tempvar1].Hour=Sys_D_T0[2];//						  EepromRead(tempvar+1);//
					TimerArray[tempvar1].Minute=Sys_D_T0[1];//						EepromRead(tempvar+2);//
					TimerCount++;
					EepromWrite(Timers,TimerCount);
				}
				else
				{//找已删除的点位置
					for(tempvar1=0;tempvar1<TimerCount;tempvar1++)
					{
						if(TimerArray[tempvar1].BitEnable!=0xAA)
						{
							TimerArray[tempvar1].BitEnable=0xAA;
							TimerArray[tempvar1].Hour=Sys_D_T0[2];
							TimerArray[tempvar1].Minute=Sys_D_T0[1];
							tempvar=TimerValue+TimerCount*3;
							EepromWrite(tempvar1,0xAA);
							Delay(1);
							EepromWrite(tempvar1+1,Sys_D_T0[2]);
							Delay(1);
							EepromWrite(tempvar1+2,Sys_D_T0[1]);
							Display_Line(6,0,6,0,ShowTip[10]);//提示打铃已设置
							Msingle_font_pattern (English_Offset[tempvar1/10],6,96,0);
							Msingle_font_pattern (English_Offset[tempvar1%10],6,104,0);
							goto ExitSet;
						}
					}				
					Display_Line(6,16,6,0,ShowTip[7]);//提示打铃已设置
					Status_Beep();
				}
ExitSet:	    break;
			case ESC:
				ClearRAM(0,8);
				return;
			default:
				if(KeyNum==0)
					tempvar1=((Sys_D_T0[2]>>4)&0x0F)*10+(Sys_D_T0[2]&0x0F);
				else if(KeyNum==1)
					tempvar1=((Sys_D_T0[1]>>4)&0x0F)*10+(Sys_D_T0[1]&0x0F);

				if(tempvar==PAGEUP)tempvar1++;
				if(tempvar==PAGEDOWN&&tempvar1>0)tempvar1--;
				
				if(KeyNum==0)
				{
					if(tempvar1>23)tempvar1=0;
					else if(tempvar1<=0)tempvar1=23;
					Sys_D_T0[2]=tempvar1/10;
					Sys_D_T0[2]=(Sys_D_T0[2]<<4)&0xF0;
					Sys_D_T0[2]=Sys_D_T0[2]+(tempvar1%10);
				}
				else if(KeyNum==1)
				{
					if(tempvar1>59)tempvar1=0;
					else if(tempvar1<=0)tempvar1=59;
					Sys_D_T0[1]=tempvar1/10;
					Sys_D_T0[1]=(Sys_D_T0[1]<<4)&0xF0;
					Sys_D_T0[1]=Sys_D_T0[1]+(tempvar1%10);
				}		
				break;
		}	
	}
}

//==========================================================
//日期时间菜单处理函数
//菜单序号:3
//Function: 	DateTime_Set
//              Auto_Set
//Description: 	Audjst System date and time
//Parameters: 	NO.
//Call:			DispLay_RTC,Get_TimeFromDS1302,Msingle_font_pattern
//              HzDisplay,ClearRAM,SubMenu_Show,Calc_Week
//Returns: 		NO.
//=================================================
void TimerSetProc(void)//0
{
       //显示时间于屏幕中间
        data      uint8 tempvar,keynum=0,rowno=0,tempvar1,tempvar2;
		data      uint8 Sys_D_T0[7];
		bdata     uint8 change_index=0x00;
		
		Get_TimeFromDS1302(Sys_D_T0);

		ClearRAM(0,8);
		DispRTC(0,Sys_D_T0);

		//交换年分与星期的位置,便于操作
		tempvar     =   Sys_D_T0[6];
		Sys_D_T0[6] =   Sys_D_T0[5];
		Sys_D_T0[5] =   tempvar;
		//秒位置反显
		tempvar=(Sys_D_T0[0]>>4)&0x0F;
		Msingle_font_pattern (English_Offset[tempvar],0,Db_WZ[0],1);
		tempvar=Sys_D_T0[0]&0x0F;
		Msingle_font_pattern (English_Offset[tempvar],0,Db_WZ[1],1);

		Sys_D_T0[4]=Sys_D_T0[4]&0x1F;

		Delay_Ret(T0_6S);
		
		while(1)
	    {
	        if (ret_Flag)
			{
			    ClearRAM(0,8);
				break;
	        }

			tempvar=(Sys_D_T0[keynum]>>4)&0x0F;
			Msingle_font_pattern (English_Offset[tempvar],rowno,Db_WZ[2*keynum],1);
            tempvar=Sys_D_T0[keynum]&0x0F;
            Msingle_font_pattern (English_Offset[tempvar],rowno,Db_WZ[2*keynum+1],1);

            tempvar=KeyScan();
            
            if (tempvar==NOKEY_PRESS)continue;
            //亮背光
		    Light_On();
            NoDelay_Ret();
            
            //光标移动(下移)
            if(tempvar==MOVE)
                {
                    keynum++;
                    
                    if(keynum>5)keynum=0;
                    
                    if(keynum>2)
                        rowno=2;
                    else
                        rowno=0;

                    if(keynum==0)
                    {
                        tempvar=(Sys_D_T0[5]>>4)&0x0F;
                        Msingle_font_pattern (English_Offset[tempvar],2,Db_WZ[10],0);
                        tempvar=Sys_D_T0[5]&0x0F;
                        Msingle_font_pattern (English_Offset[tempvar],2,Db_WZ[11],0);
                    }
                    else
                    {
                        if((keynum-1)<3)
                            tempvar2=0;
                        else
                            tempvar2=2;
                        tempvar=(Sys_D_T0[keynum-1]>>4)&0x0F;
                        Msingle_font_pattern (English_Offset[tempvar],tempvar2,Db_WZ[2*(keynum-1)],0);
                        tempvar=Sys_D_T0[keynum-1]&0x0F;
                        Msingle_font_pattern (English_Offset[tempvar],tempvar2,Db_WZ[2*(keynum-1)+1],0);
                    }
                }
            else if(tempvar==ENTER)
                {
                    //保存秒分时日月星期与年
                    
                    tempvar     =   Sys_D_T0[5];
                    Sys_D_T0[5] =   Sys_D_T0[6];
                    Sys_D_T0[6] =   tempvar;
                    
                    change_index|=0x40;
                    
                    Write_TimeToDS1302(Sys_D_T0,change_index);

                    tempvar     =   Sys_D_T0[6];
                    Sys_D_T0[6] =   Sys_D_T0[5];
                    Sys_D_T0[5] =   tempvar;
                }
			else if(tempvar==BACK)
            {//返回键
				ClearRAM(0,8);
                return;
            }
            else 
            {//数字键
					tempvar1=  ((Sys_D_T0[keynum]>>4)&0x0F)*10+(Sys_D_T0[keynum]&0x0F);

					if(tempvar==PAGEUP)tempvar1++;
					if(tempvar==PAGEDOWN && tempvar1>0)tempvar1--;

					Sys_D_T0[keynum] =tempvar1/10;
					Sys_D_T0[keynum]=(Sys_D_T0[keynum]<<4) & 0xF0;
					Sys_D_T0[keynum]=Sys_D_T0[keynum]+ tempvar1%10;

					if(keynum<2 &&Sys_D_T0[keynum]>0x59)Sys_D_T0[keynum]=0;
					else if(keynum==2 &&Sys_D_T0[keynum]>0x23)Sys_D_T0[keynum]=0;
					else if(keynum==3)
					{
						   switch(Sys_D_T0[4])
						   {
								case 1:
								case 3:
								case 5:
								case 7:
								case 8:
								case 10:
								case 12:
									  if( Sys_D_T0[3]>0x31)Sys_D_T0[3]=1;
									  else if( Sys_D_T0[3]<=0)Sys_D_T0[3]=31;
									  break;
								case 2:
									tempvar=((Sys_D_T0[5]>>4)&0x0F)*10+(Sys_D_T0[5]&0x0F);
									tempvar=month_n_day(tempvar+2000,2);
									if( Sys_D_T0[3]>tempvar)Sys_D_T0[3]=1;
								  	else if( Sys_D_T0[3]<=0)Sys_D_T0[3]=tempvar;
									break;
								default:
									if( Sys_D_T0[3]>0x30)Sys_D_T0[3]=1;
								    else if(Sys_D_T0[3]<=0)Sys_D_T0[3]=0x30;
						   }
					}
					else if(keynum==4)
					{
						  if(Sys_D_T0[4]>0x12)Sys_D_T0[4]=1;
						  else if(Sys_D_T0[4]<=0)Sys_D_T0[4]=0x12;
					}
					else if(keynum==5)
					{
						  if(Sys_D_T0[5]>0x99)Sys_D_T0[5]=0x00;
						  else if(Sys_D_T0[5]<=0x00)Sys_D_T0[5]=0x99;
					}

                    if(keynum>2)
                        rowno=2;
                    else
                        rowno=0;
                    
                    change_index|=Flag[keynum];
                    Sys_D_T0[6]=Calc_Week(Sys_D_T0[5],Sys_D_T0[4],Sys_D_T0[3]);

                    HzDisplay(Week[Sys_D_T0[6]],0,34,0);
					    
            }
          
		}
}

//==========================================================
//系统信息菜单处理,菜单序号:7
//Function: 	Display_SysInfo	
//Description: 	Display System infomation
//Parameters: 	NO.
//Call:			HzDisplay,Msingle_font_pattern,Display_Pic
//Returns: 		NO.
//==========================================================
void DispInfo(void)
{
        uint8 kk;
		ClearRAM(0,8);
        //版本:1.00.00
		HzDisplay(ban,0,0,0);//版
		HzDisplay(ben,0,16,0);//本
		Msingle_font_pattern (mh,0,32,0);
		Msingle_font_pattern (space1,0,40,0);
		Msingle_font_pattern (English_Offset[VERSON[0]],0,48,0);
		Msingle_font_pattern (Mfont_dot,0,56,0);
		Msingle_font_pattern (English_Offset[(VERSON[1]>>4)&0x0F],0,64,0);
		Msingle_font_pattern (English_Offset[VERSON[1]&0x0F],0,72,0);
		Msingle_font_pattern (Mfont_dot,0,80,0);
		Msingle_font_pattern (English_Offset[(VERSON[2]>>4)&0x0F],0,88,0);
		Msingle_font_pattern (English_Offset[VERSON[2]&0x0F],0,96,0);
		//-----------------------------------------------------------
		//日期:06-05-30
		HzDisplay(Day,2,0,0);//版
		HzDisplay(Qi,2,16,0);//本
		Msingle_font_pattern (mh,2,32,0);
		Msingle_font_pattern (space1,2,40,0);
		Msingle_font_pattern (English_Offset[(DATE[0]>>4)&0x0F],2,48,0);
		Msingle_font_pattern (English_Offset[DATE[0]&0x0F],2,56,0);
		Msingle_font_pattern (English_Offset[10],2,64,0);
		Msingle_font_pattern (English_Offset[(DATE[1]>>4)&0x0F],2,72,0);
		Msingle_font_pattern (English_Offset[DATE[1]&0x0F],2,80,0);
		Msingle_font_pattern (English_Offset[10],2,88,0);
		Msingle_font_pattern (English_Offset[(DATE[2]>>4)&0x0F],2,96,0);
		Msingle_font_pattern (English_Offset[(DATE[2]&0x0F)],2,104,0);
      
        Display_Line(4,0,5,0,Student);
		Display_Line(6,0,6,0,Teacher);

        Delay_Ret(T0_6S);

        while(1)
        {
            if(ret_Flag)break;
             kk=KeyScan();
             
             if(kk==NOKEY_PRESS)continue;
             
             NoDelay_Ret();
             Light_On();
             
             if(kk==BACK)
             {
                 ClearRAM(0,8);
                 return;

⌨️ 快捷键说明

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