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

📄 main.c

📁 制袋机程序.rar
💻 C
📖 第 1 页 / 共 3 页
字号:
/*****************************************************
* 制袋机程序
*
* 描述:
* 版本:
*
* 创建者:wzq、lcg
* 最后修改时间: 2010-4-6
*
******************************************************/

#include "INCLUDES.H"

void UpdateState();//当状态发生改变时,才会有更新
void ShowTable(uchar page);//更新所有状态
void UpdateMode(void);//当状态发生改变时,才会有更新
void ShowMode(void);//更新所有状态
void ButtonAction();//按键动作


//全局变量
struct G_STATUS xdata g_Status;

void main(void)
{
//定义一些变量
  uchar i;
  uchar xdata *px;
  uint j,len;

//g_Status初始化
  len = sizeof(struct G_STATUS);
  px = &g_Status;
  for(j = 0; j < len; j++)
  {
    *px++ = 0;
  }
  g_Status.Mode = MODE_RUNABLE;
  g_Status.bTouchPressed = false;
  g_Status.bButtonPressed = false;
  g_Status.Password = 0;
  g_Status.PasswordCount = 0;
  g_Status.nPage = 1;
  g_Status.Modify_Index = 0;
  g_Status.Modify_Position = 0;
  g_Status.LED_Modify_Position = 0xff;
  g_Status.Relay_Status1 = 0xff;
  g_Status.Relay_Status2 = 0xff;


  //g_Status.bPasswordDialog = false;
  //g_Status.Password = 0x00;
  //g_Status.bParaModifyPermitted = false;
  //g_Status.PasswordCount = 0;


//系统初始化
  //关总中断
  INTR_ALL_DISABLE;
  //IO初始化
  P0 = 0xff;
  P1 = 0xff;
  P2 = 0xff;
  P3 = 0xff;
  RELAYOUT1 = 0xff;
  RELAYOUT2 = 0xff;
  KEY_INIT();
  TOUCH_INIT();
  INTR_INT0_DISABLE;//关触摸屏中断
  LEDSTATUS_INIT();
  LCD_INIT();
  LCD_WelcomeInterface();
  LCD_MainInterface();
  //开总中断
  INTR_ALL_ENABLE;

  //RESET
  KEYK_DOWN();
  delay_ms(10);
  KEYK_UP();
  delay_ms(50);


  //更新状态
  Update_LEDSTATUS();
  UpdateState();
  LCD_ShowStatusOrParameter(5, 1, GetRealyStatus(1), ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
  LCD_ShowStatusOrParameter(6, 1, GetRealyStatus(2), ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
  LCD_ShowStatusOrParameter(7, 1, GetRealyStatus(3), ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
  LCD_ShowStatusOrParameter(8, 1, GetRealyStatus(4), ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
  ShowMode();

//初始化结束


  while(1)
  {
Label1:
    INTR_INT0_ENABLE;//开触摸屏中断

    Update_LEDSTATUS();
    UpdateState();
    UpdateMode();

    //等待触摸屏按下事件
    if(g_Status.bTouchPressed)
    {
    	INTR_INT0_DISABLE;//关触摸屏中断
      Update_TouchPoint();
      g_Status.bTouchPressed = false;

      //判断按键有效性
      g_Status.Button_id = LCD_WhichButton(800 - g_Status.x, 600 - g_Status.y);
      if(g_Status.Button_id > 0 && g_Status.Button_id <= 14)
      {
        g_Status.bButtonPressed = true;
      }
      else
      {
        g_Status.bButtonPressed = false;
      }

Label2:
      //如果按键按下,处理
      if(g_Status.bButtonPressed)
      {
        //显示按键按下效果
        if((g_Status.Button_id == BUTTON_DIANZHENG) || (g_Status.Button_id == BUTTON_DIANFAN) || (g_Status.Button_id == BUTTON_TRACK) || (g_Status.Button_id == BUTTON_RUN) || (g_Status.Button_id == BUTTON_STOP))
        {}
        else if((g_Status.Button_id == BUTTON_UP) || (g_Status.Button_id == BUTTON_DOWN) || (g_Status.Button_id == BUTTON_LEFT) || (g_Status.Button_id == BUTTON_RIGHT))
        {
          //if(g_Status.Mode = MODE_PARAMODIFY)
            LCD_ShowButton(g_Status.Button_id, BTN_DOWN_TEXT_COLOR, BTN_DOWN_BK_COLOR, BTN_DOWN_BORDER_COLOR);
        }
        else
        {
          LCD_ShowButton(g_Status.Button_id, BTN_DOWN_TEXT_COLOR, BTN_DOWN_BK_COLOR, BTN_DOWN_BORDER_COLOR); 
        }
        //执行按键功能
        ButtonAction();

        //更新状态显示
        Update_LEDSTATUS();
        UpdateState();
        UpdateMode();

        //判断按键是否释放
        if(TOUCH_IsReleased())
        {
          g_Status.bButtonPressed = false;
          //显示按键释放效果
          if((g_Status.Button_id == BUTTON_DIANZHENG) || (g_Status.Button_id == BUTTON_DIANFAN) || (g_Status.Button_id == BUTTON_TRACK) || (g_Status.Button_id == BUTTON_RUN) || (g_Status.Button_id == BUTTON_STOP))
          {}
          else if((g_Status.Button_id == BUTTON_UP || g_Status.Button_id == BUTTON_DOWN) || (g_Status.Button_id == BUTTON_LEFT) || (g_Status.Button_id == BUTTON_RIGHT))
          {
            //if(g_Status.Mode = MODE_PARAMODIFY)
              LCD_ShowButton(g_Status.Button_id, BTN_UP_TEXT_COLOR, BTN_UP_BK_COLOR, BTN_UP_BORDER_COLOR);
          }
          else
          {
            LCD_ShowButton(g_Status.Button_id, BTN_UP_TEXT_COLOR, BTN_UP_BK_COLOR, BTN_UP_BORDER_COLOR);
          }
          goto Label1;
        }
        else
        {
          //do nothing
          goto Label2;
        }

      }
      else
      {
      	//do nothing
      	goto Label1;
      }
    }//等待触摸屏按下事件 end
  }//while
}
/////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////


void UpdateState()
{
  uchar i;
  switch(g_Status.nPage)
  {
    case 1://第一页
    {
      //计数:00000
      for(i = 0; i < 5; i++)
      {
        if(g_Status.bUpdated_ItemState[i])
          LCD_ShowStatusOrParameter(1, i+1, g_Status.ItemState[i], ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
      }
      //长度:0000
      for(i = 5; i < 9; i++)
      {
        if(g_Status.bUpdated_ItemState[i])
        {
          if(g_Status.Modify_Index == 2)
          {
            if(g_Status.Modify_Position == (i-4))
              LCD_ShowStatusOrParameter(2, i-4, g_Status.ItemState[i], ITEM_CHECK_TEXT_COLOR, ITEM_CHECK_BK_COLOR);
            else
              LCD_ShowStatusOrParameter(2, i-4, g_Status.ItemState[i], ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
          }
          else
          {
            LCD_ShowStatusOrParameter(2, i-4, g_Status.ItemState[i], ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
          }
        }
      }
      //曲线: 0
      if(g_Status.bUpdated_ItemState[10])
      {
        if(g_Status.Modify_Index == 3 && g_Status.Modify_Position == 1)
          LCD_ShowStatusOrParameter(3, 1, g_Status.ItemState[10], ITEM_CHECK_TEXT_COLOR, ITEM_CHECK_BK_COLOR);
        else
          LCD_ShowStatusOrParameter(3, 1, g_Status.ItemState[10], ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
      }

      //个/批: 00
      if(g_Status.bUpdated_ItemState[15])
      {
        if(g_Status.Modify_Index == 4 && g_Status.Modify_Position == 1)
          LCD_ShowStatusOrParameter(4, 1, g_Status.ItemState[15], ITEM_CHECK_TEXT_COLOR, ITEM_CHECK_BK_COLOR);
        else
          LCD_ShowStatusOrParameter(4, 1, g_Status.ItemState[15], ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
      }
      if(g_Status.bUpdated_ItemState[16])
      {
        if(g_Status.Modify_Index == 4 && g_Status.Modify_Position == 2)
          LCD_ShowStatusOrParameter(4, 2, g_Status.ItemState[16], ITEM_CHECK_TEXT_COLOR, ITEM_CHECK_BK_COLOR);
        else
          LCD_ShowStatusOrParameter(4, 2, g_Status.ItemState[16], ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
      }
      break;
    }
    default:
      break;
  }
}

void ShowTable(uchar page)
{
    uchar i;
    switch(page)
    {
      case 1:
        LCD_ClearTableRect(TABLE_BK_COLOR);
        LCD_ShowTable(1);
        for(i = 1; i < 9; i++)
          LCD_ShowStatusOrParameter(i, 0, 0, ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
        for(i = 0; i < 5; i++)
	      {
	          LCD_ShowStatusOrParameter(1, i+1, g_Status.ItemState[i], ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
	      }
	      for(i = 5; i < 9; i++)
	      {
	          LCD_ShowStatusOrParameter(2, i-4, g_Status.ItemState[i], ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
	      }
	      LCD_ShowStatusOrParameter(3, 1, g_Status.ItemState[10], ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
	      LCD_ShowStatusOrParameter(4, 1, g_Status.ItemState[15], ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
	      LCD_ShowStatusOrParameter(4, 2, g_Status.ItemState[16], ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
	      LCD_ShowStatusOrParameter(5, 1, GetRealyStatus(1), ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
	      LCD_ShowStatusOrParameter(6, 1, GetRealyStatus(2), ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
	      LCD_ShowStatusOrParameter(7, 1, GetRealyStatus(3), ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
	      LCD_ShowStatusOrParameter(8, 1, GetRealyStatus(4), ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
        break;
      case 2:
				LCD_ClearTableRect(TABLE_BK_COLOR);
				LCD_ShowTable(2);
		    for(i = 9; i < 17; i++)
		    {
			    LCD_ShowStatusOrParameter(i, 0, 0, ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
			  }
		    LCD_ShowStatusOrParameter(9, 1, GetRealyStatus(5), ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
		    LCD_ShowStatusOrParameter(10, 1, GetRealyStatus(6), ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
		    LCD_ShowStatusOrParameter(11, 1, GetRealyStatus(7), ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
		    LCD_ShowStatusOrParameter(12, 1, GetRealyStatus(8), ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
		    LCD_ShowStatusOrParameter(13, 1, GetRealyStatus(9), ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
		    LCD_ShowStatusOrParameter(14, 1, GetRealyStatus(10), ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
		    LCD_ShowStatusOrParameter(15, 1, g_Status.ItemState[70], ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
		    LCD_ShowStatusOrParameter(15, 2, g_Status.ItemState[71], ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
		    for(i = 75; i < 79; i++)
		    {
		        LCD_ShowStatusOrParameter(16, i-74, g_Status.ItemState[i], ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
		    }
        break;
      case 3:
	  		LCD_ClearTableRect(TABLE_BK_COLOR);
	  		LCD_ShowTable(3);
	      for(i = 17; i < 23; i++)
	      {
	  		  LCD_ShowStatusOrParameter(i, 0, 0, ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
	  		}
	      LCD_ShowStatusOrParameter(17, 1, GetRealyStatus(11), ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
	      LCD_ShowStatusOrParameter(18, 1, GetRealyStatus(12), ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
	      LCD_ShowStatusOrParameter(19, 1, GetRealyStatus(13), ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
	      LCD_ShowStatusOrParameter(20, 1, GetRealyStatus(14), ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
	      LCD_ShowStatusOrParameter(21, 1, GetRealyStatus(15), ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
	      LCD_ShowStatusOrParameter(22, 1, GetRealyStatus(16), ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
        break;
      case 4:
	  		LCD_ClearTableRect(TABLE_BK_COLOR);
	  		LCD_ShowTable(4);
	      for(i = 23; i < 29; i++)
	      {
	  		  LCD_ShowStatusOrParameter(i, 0, 0, ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
	  		}
	      for(i = 110; i <113; i++)
	      {
	          LCD_ShowStatusOrParameter(23, i-109, g_Status.ItemState[i], ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
	      }
	      for(i = 115; i <118; i++)
	      {
	          LCD_ShowStatusOrParameter(24, i-114, g_Status.ItemState[i], ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
	      }
	      for(i = 120; i <123; i++)
	      {
	          LCD_ShowStatusOrParameter(25, i-119, g_Status.ItemState[i], ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
	      }
	      for(i = 125; i <128; i++)
	      {
	          LCD_ShowStatusOrParameter(26, i-124, g_Status.ItemState[i], ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
	      }
	      for(i = 130; i <133; i++)
	      {
	          LCD_ShowStatusOrParameter(27, i-129, g_Status.ItemState[i], ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
	      }
	      for(i = 135; i <138; i++)
	      {
	          LCD_ShowStatusOrParameter(28, i-134, g_Status.ItemState[i], ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
	      }
        break;
      default:
        break;
    }
}

void UpdateMode(void)
{
	uchar ledstatus;
        if(g_Status.bUpdated_LED_Status)
        {
          g_Status.bUpdated_LED_Status = false;
        }
        else
        {
          return;
        }
	ledstatus = g_Status.LED_Status;
	if((ledstatus & 0x04) == 0)
	{
		//运行
		g_Status.Mode == MODE_RUN;
		LCD_ShowButton(BUTTON_STOP, BTN_UP_TEXT_COLOR, BTN_UP_BK_COLOR, BTN_UP_BORDER_COLOR);
    LCD_ShowButton(BUTTON_RUN, BTN_DOWN_TEXT_COLOR, BTN_DOWN_BK_COLOR, BTN_DOWN_BORDER_COLOR);
	}
	else
	{
		//停止
		LCD_ShowButton(BUTTON_STOP, BTN_DOWN_TEXT_COLOR, BTN_DOWN_BK_COLOR, BTN_DOWN_BORDER_COLOR);
    LCD_ShowButton(BUTTON_RUN, BTN_UP_TEXT_COLOR, BTN_UP_BK_COLOR, BTN_UP_BORDER_COLOR);
	}

	if((ledstatus & 0x01) == 0)
	{
		//设定
		g_Status.Mode == MODE_RUNABLE;
		LCD_ShowModeStatus(2);
	}
	else if((ledstatus & 0x02) == 0)
	{
	  //手动
	  g_Status.Mode == MODE_MANUAL;
	  LCD_ShowModeStatus(3);
	}
	else if((ledstatus & 0x08) == 0)
	{
		//测试
		g_Status.Mode == MODE_TEST;
		LCD_ShowModeStatus(4);
	}
	else
	{
		//全灭
		LCD_ShowModeStatus(1);
	}

	if((ledstatus & 0x40) == 0)
	{
		//色选:色
	}
	else
	{
		//色选:白
	}

	if((ledstatus & 0x80) == 0)
	{
		//极选:+
	}
	else
	{
		//极选:-
	}
}

//LED13状态,0:灯亮 1:灯暗
//  [7]    [6]    [5]    [4]    [3]    [2]    [1]    [0]
//  L4/L5  L6/L7         L9     L3     L8     L2     L1
//  极选   色选         停止   测试    运行  手动    设定
void ShowMode(void)
{
	uchar ledstatus;
	ledstatus = g_Status.LED_Status;
	if((ledstatus & 0x04) == 0)
	{
		//运行
		g_Status.Mode == MODE_RUN;
		LCD_ShowButton(BUTTON_STOP, BTN_UP_TEXT_COLOR, BTN_UP_BK_COLOR, BTN_UP_BORDER_COLOR);
    LCD_ShowButton(BUTTON_RUN, BTN_DOWN_TEXT_COLOR, BTN_DOWN_BK_COLOR, BTN_DOWN_BORDER_COLOR);
	}
	else
	{
		//停止
		LCD_ShowButton(BUTTON_STOP, BTN_DOWN_TEXT_COLOR, BTN_DOWN_BK_COLOR, BTN_DOWN_BORDER_COLOR);
    LCD_ShowButton(BUTTON_RUN, BTN_UP_TEXT_COLOR, BTN_UP_BK_COLOR, BTN_UP_BORDER_COLOR);
	}

	if((ledstatus & 0x01) == 0)
	{
		//设定
		g_Status.Mode == MODE_RUNABLE;
		LCD_ShowModeStatus(2);
	}
	else if((ledstatus & 0x02) == 0)
	{
	  //手动
	  g_Status.Mode == MODE_MANUAL;
	  LCD_ShowModeStatus(3);
	}
	else if((ledstatus & 0x08) == 0)
	{
		//测试
		g_Status.Mode == MODE_TEST;
		LCD_ShowModeStatus(4);
	}
	else
	{
		//全灭
		LCD_ShowModeStatus(1);
	}

	if((ledstatus & 0x40) == 0)
	{
		//色选:色
	}
	else
	{
		//色选:白
	}

	if((ledstatus & 0x80) == 0)
	{
		//极选:+
	}
	else
	{
		//极选:-
	}
}

uchar CalPage(uchar index)
{
	if(index <= 8)
		return 1;
	else if(index <= 16)
		return 2;
	else if(index <= 22)
		return 3;
	else if(index <= 28)
		return 4;
	else
		return 0;
}


void Btn_Run(void)
{
	uchar i;
  //在NULL和PARAMODIFY的模式下执行
  if(g_Status.Mode != MODE_RUNABLE)
  	return;

  if(g_Status.nPage == 1)
  {
  	if(g_Status.Modify_Index != 0)
  	{
  		i = g_Status.Modify_Index*5 + g_Status.Modify_Position- 6;
  	  LCD_ShowStatusOrParameter(g_Status.Modify_Index, g_Status.Modify_Position, g_Status.ItemState[i], ITEM_UNCHECK_TEXT_COLOR, ITEM_UNCHECK_BK_COLOR);
  	}
  	g_Status.nPage == 1;
  	g_Status.Modify_Index = 0;
  	g_Status.Modify_Position = 0;
  }
  else

⌨️ 快捷键说明

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