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

📄 lzk.c

📁 基于MST-G240128点阵液晶的 状态机机制 人机界面四级滚屏菜单 源代码 ,带时间片机制模拟操作系统
💻 C
📖 第 1 页 / 共 2 页
字号:
			LeftKeyEvt=1;
			LeftKeyCNT=0;
		}

		if(RightKeyCNT<500&&RightKey==1)
		   RightKeyCNT=0;
		if(RightKeyCNT<500&&RightKey==0)
		   RightKeyCNT++;
		if(RightKeyCNT>=500&&RightKey==1)
		{
			RightKeyEvt=1;
			RightKeyCNT=0;
		}
   
     /******KEY SCAN**************END*********************************/
		DmsCNT++;
		if(DmsCNT>=8)
		{
			DmsCNT=0;
			DmsFlag=1;
			Dms2Flag=1;
		}
      /***************************************************************/
		LCD_Cs();
}




/****************************************************************************
** 函数名称: main()
** 功能描述: 主程序,处理非实时任务或计算任务;
** 入口参数: 无
** 出口参数: 无
** 全局变量: 无
** 调用模块: 无
** 说明: 
****************************************************************************/
void main(void)
{

   EA = 0;
  
   SP = 0xC0;                 // SP: 64 Bytes,0xC0~0xff, User: 192 Bytes.
   WDT_Disabled();            // WatchDog Disabled.
   Port_Init();               // I/O Port and EMIF Config.
   External_Osc();            // Switch to External Oscillator, 24.000MHz.
   SMBusInit();
   
  

   Interrupt_Init();          // Interrupt Controllor Initialize.

   InVref_Init(1);            // Enabled Internal Vlotage Reference.
   ADC0_Init(1,0,0,0,0,0,0);  // ADC0 Enabled, AD0BUSY, CH0, GAIN: 1, HVA Disabled, HVA GAIN: 1, Left-justified.

   PCA_Init();                // CEX0: Square Wave. CEX1: "1".

   RelayOutPut_Init();        // 继电器输出需要执行该初始化.


   //T0T1_Init();      // T0: PhaseDiff MS; T1: UART1 Baudrate Generator.
   T2_Init();        // T2: Generate 125uS Interrup;;
   //T4_Init();        // UART0 Baudrate Generator.
   //T0_RunCtrl(1);
   //T1_RunCtrl(1);
   T2_RunCtrl(1);
   //T4_RunCtrl(1);

   //UART0_Init();        // RS485, Default to  
   //Tn_R0 = 1;           // RS485  In Recieve State.
   //UART1_Init();        // RS232, Fixed   as 57600bps
             
   
   WDT_Reload();          
   EA=1;
   
   /////////////////////////////////////////////////
	
	LCD_Initialize();
   Menue(18);
   Menue(16);
   
   
   

   while(1)
   {
      /*********************************************************
		DLJ合闸,切换启动录波图片,启动录波使能开启
      DLJ分闸,切换停机图片,关闭所有类型的录波使能
		*********************************************************/
		
		if(Star_EN==1)
		{
			if(DLJ_IN==1)
			{
				Star_EN=0;
				RecType=0;
				PictrRege=PictrRege&0xfe;
			}
		}
		else
		{
			if(DLJ_IN==0)
			{
				Star_EN=1;
				if(EN_StartRec == 1)//启动录波是非开启
				   RecType=2;
				PictrRege=PictrRege|0x01;
			}
		}
		
	   /*********************************************************
		RecType!=0,意味着录波开启,根据具体的值分配存储空间,并且图片状态切换
		RecType==0,意味着录波关闭,并且图片状态切换
		*********************************************************/
      if(RecType!=RecTemp)
		{
		   RecTemp=RecType;
         if(RecTemp!=0)
			{
				switch(RecTemp)
				{
				case 1:ExSramStarPag=8;
				       ExSramEndPag=15;
				       break;
				case 2:ExSramStarPag=0;
				       ExSramEndPag=1;
				       break;
				case 3:ExSramStarPag=4;
				       ExSramEndPag=4;
				       break;
				case 4:ExSramStarPag=6;
				       ExSramEndPag=6;
				       break;
				case 5:ExSramStarPag=5;
				       ExSramEndPag=5;
				       break;
				case 6:ExSramStarPag=2;
				       ExSramEndPag=3;
				       break;
				case 7:ExSramStarPag=7;
				       ExSramEndPag=7;
				       break;
				default:break;
				}
				ExSramWrRdAdr=0;
				ExSramWrRdPag=ExSramStarPag;
				PictrRege=PictrRege|0x02;
				Wave_EN=1;
            }
			else
			{
				Wave_EN=0;
				PictrRege=PictrRege&0xfd;
			}
		}
		/********************************************************
		 停机图片
		 运行图片
		 录波图片
		 之间的锁存及切换
		 ********************************************************/
		if(PictrRege!=PictrTemp)
      {  
		   if(PictrRege==0x02)
			   PictrRege=0x00;
         PictrTemp=PictrRege;
			Menue(16);
	   }
		/********************************************************
		 一旦故障产生,立即弹出故障页
       一旦故障排除,立即弹出运行页
		 ********************************************************/
		if(ErrorRege!=ErrorTemp)
		{
			ErrorTemp=ErrorRege;
         if(ErrorTemp!=0)
			{
			   page=3;
				HI_ErrLED=0;
				HI_Bell=1;
         }
         else
			{
			   page=1;
				HI_ErrLED=1;
				HI_Bell=0;
         }
			Menue(16);
		}
		/********************************************************
		 菜单第五项,继电器状态实时显示
		 ********************************************************/
		if(seek==5 && PressKeyEvt==0)
		{
	      LCD_Seek5();
      }
      /********************************************************
		 30秒无键按下,自动返回运行界面,并熄灭背光
		 ********************************************************/
		if(DmsNum<30000)
		{
         if(DmsFlag==1)
			{
			   DmsFlag=0;
				DmsNum++;
         }
			if(DmsNum>=30000)
			{
				LCD_BLED=0;
				if(seek!=16 && hunt<72)
				{
					Menue(16);
					hunt=0;
				}
         }
      }
		/************************************************************
		 按键响应,关闭蜂鸣器
		 ************************************************************/
		if(DmsNum>50&&PressKeyEvt)
		{
			HI_Bell=0;
			PressKeyEvt=0;
		}
		/************************************************************
       机柜温度超过45度,ZJJ继电器动作,启动风机
       机柜温度小于40度,ZJJ继电器恢复,关闭风机
		 机柜温度超过60度,启动“机柜过热”故障进程
       机柜温度小于60度,结束“机柜过热”故障进程
		 ************************************************************/
		if(Temper_EN!=0)
		{
		   CTemper=(float)KTemper*0.207-271.328;
			OutTemper=(unsigned char)CTemper;

			if(OutTemper>=StartTemper)
			   RelayOUT=RelayOUT&0x7f;
		   else if(OutTemper<=CloseTemper)
		      RelayOUT=RelayOUT|0x80;

			if(OutTemper>=AlarmTemper)
			   ErrorRege=ErrorRege|0x2000;
			else if(OutTemper<AlarmTemper)
			   ErrorRege=ErrorRege&0xdfff;
         
			Temper_EN=0;
		}
		/************************************************************/
		if(seek == 7 && Dms2Flag==1)
		{
			Dms2Flag=0;
			Dms2_1Num++;

			if(Dms2_1Num==1000)
			{
			   Dms2_1Num=0;
			   LCD_Num(168,14,OutTemper,0,"℃ ");
			}
		}
		/************************************************************
		 若处于运行界面,状态框的动画在不断运行
       运行参数每一秒钟刷新一次
		 运行时间每二十秒刷新一次
		 ************************************************************/
		if(seek==16)
		{
			
			if(Dms2Flag==1)
			{
				Dms2Flag=0;
				Dms2_1Num++;
				Dms2_2Num++;
				Dms2_3Num++;
			}

			if(Dms2_1Num==500)
			{
			   LCD_CAstr(208,13,":",0,0);
				if(Star_EN == 1)
				   HI_RunLED=!HI_RunLED;
            else
				   HI_RunLED=1;
         }
         else if(Dms2_1Num>1000)
			{
			   Dms2_1Num=0;
			   LCD_CAstr(208,13," ",0,0);
				if(Star_EN == 1)
				   HI_RunLED=!HI_RunLED;
            else
				   HI_RunLED=1;
         }

			if(Dms2_2Num>30000)
			{
			   Dms2_2Num=0;
				LCD_Clock();
			}

			if(Dms2_3Num>100)
			{
				Dms2_3Num=0;
				LCD_RunData();
			   LCD_RunPictr();
			}

		}
		/************************************************************
		 七大键响应后台
		 ***********************************************************/
		Key();
	   /************************************************************
       窥看一级系统密码
       ************************************************************/
		if(seek==0&&hunt==4&&LeftKey==0&&RightKey==0)
		{
			LCD_ClearAll();
			Menue(14);
		}
      /************************************************************
       窥看二级系统密码
       ************************************************************/
		if(seek==8&&hunt==3&&page==2&&LeftKey==0&&RightKey==0)
		{
			LCD_ClearAll();
			Menue(15);
		}
     /************************************************************/
		if(hunt==73 && DisWave_En==0)
		{
			Dms2_1Num++;
			if( Dms2_1Num >Em_Pace )
			{
				Dms2_1Num = 0;
				LCD_Wave();
			}
		}
	  /************************************************************/
   }
}


⌨️ 快捷键说明

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