📄 main.c
字号:
/*****************************************************
* 制袋机程序
*
* 描述:
* 版本:
*
* 创建者: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 + -