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

📄 lzk.c

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


/***********************************************************************
 ***  系统全局常量、变量、和位定义 .
 ***********************************************************************/
uint8  data  ucP5DATA = 0x7f;    // Panel Latch Buffer.
uint8  data  ucP4DATA = 0xC0;    // P4    Latch Buffer.
/**************************************************************************/

uint8  xdata DmsCNT = 0;

uint8  xdata DmsFlag = 0;
uint16 xdata DmsNum = 0;

uint8  xdata Dms2Flag = 0;
uint16 xdata Dms2_1Num = 0;
uint16 xdata Dms2_2Num = 0;
uint16 xdata Dms2_3Num = 0;
/**************************************************************************/
bit MenuKeyEvt = 0;
bit EnterKeyEvt = 0;
bit CancelKeyEvt = 0;
bit UpKeyEvt = 0;
bit DownKeyEvt = 0;
bit LeftKeyEvt = 0;
bit RightKeyEvt = 0;
bit PressKeyEvt = 0;

uint16 xdata MenuKeyCNT   = 0;
uint16 xdata EnterKeyCNT  = 0;  
uint16 xdata CancelKeyCNT = 0;
uint16 xdata UpKeyCNT     = 0;
uint16 xdata DownKeyCNT   = 0; 
uint16 xdata LeftKeyCNT   = 0;
uint16 xdata RightKeyCNT  = 0; 

uint16  xdata temp = 0;
uint8   xdata Flash[128];
uint8   xdata CFlash[100];

uint8 xdata seek = 0;   //一级菜单页(主菜单选项)
uint8 xdata hunt = 0;   //二级菜单页(一级菜单子菜单页及其选项)
uint8 xdata page = 0;   //三级菜单页(二级菜单子菜单页 如:故障页,静态参数页)
uint8 xdata Data_Num = 0;//运行页六项滚动显示

uint8 xdata Mov1Up = 0; //动画运动量1
uint8 xdata Mov2Up = 0; //动画运动量2
uint8 xdata head = 0;   //动画运动方向
uint8 xdata Shf1UP = 0; //上位机动画及热备图标
uint8 xdata Shf2UP = 0; //上位机动画及热备图标
/***********************************************************************
 ***  DI、DO开关量定义
 **********************************************************************/

/***********************************************************************
 *** DO开关量(控制输出继电器)功能说明:
(1)KQJ:KQ可控硅开通控制继电器(常闭).
(2)LZJ:励磁状态继电器(常开),LZJ决定是否进行RF检测.
(3)LCJ:失步保护继电器(常开),控制主电源开关或输出给PLC.
(4)SZJ:跳闸停机继电器(常开),后备保护用,输出给PLC.
(5)BXJ:报警输出继电器(常开),用于接通声光报警或输出至PLC.
(6)TYJ:降压起动继电器(常开),控制输出.
(7)YKJ:遥控继电器(常开)
(8)N/A:
***********************************************************************/
uint8 bdata RelayOUT = 0xff;  // Output Relay STATUS.
sbit ZJJ_OUT = RelayOUT^7;    // N/A.
sbit YKJ_OUT = RelayOUT^6;    // YKJ Output Relay No.6.遥控状态输出
sbit TYJ_OUT = RelayOUT^5;    // TYJ Output Relay No.5.降压启动控制输出
sbit BXJ_OUT = RelayOUT^4;    // BXJ Output Relay No.4.报警输出
sbit SZJ_OUT = RelayOUT^3;    // SZJ Output Relay No.3.失步再整步失败状态输出
sbit LCJ_OUT = RelayOUT^2;    // LCJ Output Relay No.2.失步状态输出
sbit LZJ_OUT = RelayOUT^1;    // LZJ Output Relay No.1.KQ误导通检测使能控制
sbit KQJ_OUT = RelayOUT^0;    // KQJ Output Relay No.0.KQ控制继电器


/***********************************************************************
 *** DI开关量(状态输入继电器)功能说明:
(1)DLJ:电机加电状态输入(常开),由PLC输入.
(2)RFJ:KQ导通检测(常开),RFJ闭合表示KQ导通.
(3)FCJ:断电保护输入(常开),由PLC输入,防止对电机的冲击.
(4)JYJ:降压起动输入(常开),由PLC输入.
(5)ZCJ:增值(常开),遥控增值.
(6)JCJ:减值(常开),遥控减值.
(7)YCJ:遥控状态继电器,由PLC输入.
(8)DYJ:低压状态输入.
***********************************************************************/
uint8 bdata RelayIN = 0xff;  // Digital Input STATUS.
sbit DYJ_IN = RelayIN^7;     // DYJ Input Relay No.7.低电压强励控制输入
sbit YCJ_IN = RelayIN^6;     // YCJ Input Relay No.6.遥控状态控制输入
sbit JCJ_IN = RelayIN^5;     // JCJ Input Relay No.5.减值
sbit ZCJ_IN = RelayIN^4;     // ZCJ Input Relay No.4.增值
sbit JYJ_IN = RelayIN^3;     // JYJ Input Relay No.3.降压启动控制输入
sbit FCJ_IN = RelayIN^2;     // FCJ Input Relay No.2.防冲击输入<DSJ断电失步保护继电器>
sbit RFJ_IN = RelayIN^1;     // RFJ Input Relay No.1.RF误导通信号输入
sbit DLJ_IN = RelayIN^0;     // DLJ Input Relay No.0.电机启动控制信号输入




 
/************************温度************************/
uint8  xdata Temper_EN = 0;
uint16 xdata KTemper = 0;
float  xdata CTemper = 0;
uint8  xdata OutTemper = 0;
/***********************录波与显波*******************/
float xdata EM_k1 = 0;
float xdata EM_k2 = 0;
uint8 xdata EM_b1 = 0;
uint8 xdata EM_b2 = 0;
uint8 xdata EM_speed = 0;


uint8  idata AD_Switch = 0;
uint8  idata AD_DataBuff[4];

char  idata ExSramWrRdPag = 0;
char  xdata ExSramStarPag = 0;
char  xdata ExSramEndPag = 0;

uint16 idata ExSramWrRdAdr = 0x0000;
uint16 xdata ExSramTempAdr = 0x0000;
uint8  xdata *ExSramWrRdAdrPt;

uint8 xdata CH1[200];
uint8 xdata CH2[200];
uint8 xdata Em_PtData = 0;

uint8 xdata Em_Pace = 0;
uint8 xdata Em_Slot = 0;
/*****************************************************************/
uint8 xdata Star_EN = 0;                 //与DLJ对应锁存
uint8 xdata Wave_EN = 0;                 //与WaveEn对应锁
uint8 xdata DisWave_EN = 0;              //显波使能
uint8 xdata Com_EN = 1;                  //上位机通信使能

uint16 xdata  ErrorRege = 0;             //故障类型
uint16 xdata  ErrorTemp = 0;             //故障锁存

uint8  xdata  PictrRege = 0;             //图片状态
uint8  xdata  PictrTemp = 0;             //图片锁存

uint8 xdata RecType = 0;                 //录波类型
uint8 xdata RecTemp = 0;                 //录波锁存

uint8 xdata AcctimeTemp = 0;             //累计运行时间锁存
/*******************************************************************
0x00  不录波
0x01  手动录波
0x02  启动录波
0x03  缺相
0x04  投励失败
0x05  失控
0x06  失步
0x07  PT断线
***************************/




/****************************************************************************
** 函数名称: T2_ISR()
** 功能描述: T2定时器中断处理,中断间隔125uS
             (1)125uS时间基准:分为5个相位;
			    (2)WDT清除;
			    (3)A/D采样:UF,IF,DU,DI,CurrRingEY,CurrRingEI;
			    (4)DI读入: UFCO,IFCO,SYNCx,RelayIN;
			    (5)DO输出: RelayOUT,PulseOUT;
             (6)功率因数相差法TIMER1测量结果读入; 
** 入口参数: 无
** 出口参数: 无
** 全局变量: 无
** 调用模块: 无
** 说明: 
****************************************************************************/
void T2_ISR(void) interrupt 5
{
   
   
	SFRPAGE = TMR2_PAGE   ;        // Change to TIMER2 PAGE.
   TF2 = 0;
   WDTCN = 0xA5;                  // Enable WDT or Reload the WDT.


   /************************************
	***外部DI读入
	************************************/
    RelayIN = RelayInPut();

   /************************************
	***继电器输出
   ************************************/
    RelayOutPut(RelayOUT);

   /****************************************************************/
	if(Temper_EN==0)
	{
		ADC0_CH_Setting(0x08);
		AD0INT = 0;
		AD0BUSY = 1;
		while( AD0INT == 0 );
      KTemper=ADC0H;
		KTemper=KTemper<<8;
		KTemper=KTemper+ADC0L;	
		Temper_EN=1;
	}
	
	/****************************************************************/
	Em_Slot++;

   if(Wave_EN && Em_Slot >= EN_RecMode)
   {
	      Em_Slot = 0;

			for(AD_Switch=0;AD_Switch<4;AD_Switch++)
			{
				ADC0_CH_Setting(AD_Switch);
	         AD0INT = 0;
	         AD0BUSY = 1;
	         while( AD0INT == 0 );
	         AD_DataBuff[AD_Switch] = (ADC0H<<3)+(ADC0L>>5);
			}

         ExSRAM_PageSetting(ExSramWrRdPag);
			for(AD_Switch=0;AD_Switch<4;AD_Switch++)
			{
	         ExSramWrRdAdrPt = ExSramWrRdAdr;
	        *ExSramWrRdAdrPt = AD_DataBuff[AD_Switch];
	         ExSramWrRdAdr++;
			}
		   if(ExSramWrRdAdr>65531)
         {
			   ExSramWrRdAdr = 0;
				ExSramWrRdPag++;
			}
	      SFRPAGE = 0x00;
         EMI0CF  = 0x00;
		   EMI0TC  = 0x00;

			if(ExSramWrRdPag>ExSramEndPag)
			{
				Wave_EN=0;
				RecType=0;
         }
   }
	
	if(DisWave_En)
	{
			ExSRAM_PageSetting(ExSramWrRdPag);

			for(AD_Switch=0;AD_Switch<4;AD_Switch++)
			{
			ExSramWrRdAdrPt = ExSramWrRdAdr;
			AD_DataBuff[AD_Switch] = *ExSramWrRdAdrPt;
			ExSramWrRdAdr++;
			}

			SFRPAGE = 0x00;
			EMI0CF  = 0x00;
			EMI0TC  = 0x00;

			DisWave_En=0;
	}

    /******KEY SCAN*****************************************************/
		SFRPAGE = 0x0F;

		if(MenuKeyCNT<500&&MenueKey==1)
		   MenuKeyCNT=0;
		if(MenuKeyCNT<500&&MenueKey==0)
		   MenuKeyCNT++;
		if(MenuKeyCNT>=500&&MenueKey==1)
		{
		   MenuKeyEvt=1;
		   MenuKeyCNT=0;
		}

		if(EnterKeyCNT<500&&EnterKey==1)
		   EnterKeyCNT=0;
		if(EnterKeyCNT<500&&EnterKey==0)
		   EnterKeyCNT++;
		if(EnterKeyCNT>=500&&EnterKey==1)
		{
			EnterKeyEvt=1;
			EnterKeyCNT=0;
		}

		if(CancelKeyCNT<500&&CancelKey==1)
		   CancelKeyCNT=0;	
		if(CancelKeyCNT<500&&CancelKey==0)
		   CancelKeyCNT++;
		if(CancelKeyCNT>=500&&CancelKey==1)
		{
			CancelKeyEvt=1;
			CancelKeyCNT=0;
		}

		if(UpKeyCNT<500&&UpKey==1)
		   UpKeyCNT=0;
		if(UpKeyCNT<10000&&UpKey==0)
		   UpKeyCNT++;
		if(UpKeyCNT>=500&&UpKey==1)
		{
			UpKeyEvt=1;
			UpKeyCNT=0;
		}
		if(UpKeyCNT>=10000)
		{
			UpKeyCNT++;
			if(UpKeyCNT>10040)
			   HI_Bell=0;
			if(UpKeyCNT>10200)
			{
			   UpKeyCNT=10000;
				UpKeyEvt=1;
			}
		}

		if(DownKeyCNT<500&&DownKey==1)
		   DownKeyCNT=0;
		if(DownKeyCNT<10000&&DownKey==0)
		   DownKeyCNT++;
		if(DownKeyCNT>=500&&DownKey==1)
		{
			DownKeyEvt=1;
			DownKeyCNT=0;
		}	
		if(DownKeyCNT>=10000)
		{
			DownKeyCNT++;
			if(DownKeyCNT>10040)
			   HI_Bell=0;
			if(DownKeyCNT>10200)
			{
			   DownKeyCNT=10000;
				DownKeyEvt=1;
			}
		}

		if(LeftKeyCNT<500&&LeftKey==1)
		   LeftKeyCNT=0;
		if(LeftKeyCNT<500&&LeftKey==0)
		   LeftKeyCNT++;
		if(LeftKeyCNT>=500&&LeftKey==1)
		{

⌨️ 快捷键说明

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