📄 lcdmenu.c
字号:
/****************************************************************************/
/* */
/* Copyright (c) 2005, 老树工作室 */
/* All rights reserved. */
/* */
/* Email:laoshu0902@163.com */
/* www.laoshu0902.bokee.com */
/* */
/****************************************************************************/
/****************************************************************************/
/* 文件名:lcdmenu.c */
/* 版 本:Version 1.0 */
/* 描 述:液晶菜单的设计,通过按键设置温度、湿度、光强的报警阈值 */
/* 及开关量与模拟量的输出 */
/* 作 者:spot */
/* 函 数: */
/* */
/* 历史记录: */
/* spot 2005-08-20 Creat Inital version. (Version 1.0) */
/****************************************************************************/
#include <reg52.h>
#include <stdio.h>
#include <intrins.h>
#include "../includes/types.h"
#include "../includes/lcd.h"
#include "../includes/com.h"
#include "keyboard.h"
void key_setmenu_lcd(void);
extern void dac_5615(u_int data_in); /* 写入DAC的10bit输入数据 */
extern ALARM_DATA_INFO alarm_limit; /* 报警阈值 */
u_char set_menu_flag = 0;
u_char set_limit_flag = 0;
bit temp_layer = 0;
bit hum_layer = 0;
bit light_layer = 0;
u_char key_code;
extern u_int analog_out_data; /* DAC 输出 */
sbit CTRL_RELAY = P3^4; /* 控制继电器开关 */
/* 液晶上显示键盘设置的温湿度光强报警阈值,及模拟量和开关量输出状态 */
void key_setmenu_lcd(void)
{
key_code = scan_key();
switch(key_code)
{
case BUTTON_16://功能选择
if (set_menu_flag == 0)
{
show_setmenu_a();//按一下是菜单初始化为停在TEMP选项上
set_menu_flag = 1;
set_limit_flag = 0;
}
else if (set_menu_flag == 1)//再次按下编辑当前选中栏
{
if (!temp_layer)//温度分两半:0、1层,0是上限在左边,1是下限在右边
{/*按一下为上阀值,再按一下为下阀值*/
temp_layer = 1;
show_temp_limit_high(alarm_limit.temp_othreshold, alarm_limit.temp_uthreshold);
/* 显示温度阈值设置菜单, 显示上限设置结果*/
}
else
{
temp_layer = 0;//temp_layer就是个乒乓键
show_temp_limit_low(alarm_limit.temp_othreshold, alarm_limit.temp_uthreshold);
}/* 显示温度阈值设置菜单, 显示下限设置结果*/
set_limit_flag = 1;
}
else if (set_menu_flag == 2)
{
if (!hum_layer)
{
hum_layer = 1;
show_analog_limit_high(alarm_limit.analog_othreshold, alarm_limit.analog_uthreshold);
/* 显示模入阈值设置菜单 */
}
else
{
hum_layer = 0;
show_analog_limit_low(alarm_limit.analog_othreshold, alarm_limit.analog_uthreshold);
}
set_limit_flag = 2;
}
else if (set_menu_flag == 3)
{
if (!light_layer)
{
light_layer = 1;
show_light_limit_high(alarm_limit.lumin_othreshold, alarm_limit.lumin_uthreshold);
/* 显示光强阈值设置菜单 */
}
else
{
light_layer = 0;
show_light_limit_low(alarm_limit.lumin_othreshold, alarm_limit.lumin_uthreshold);
}
set_limit_flag = 3;
}
else
{
set_menu_flag = 0;
set_limit_flag = 0;
}
break;
case BUTTON_12://向下键
if (set_limit_flag == 0) /* 向下键选择下一菜单时 */
{
if (set_menu_flag == 1)
{
show_setmenu_b();//换菜单
set_menu_flag = 2;/*设置完本项再设置下一项*/
}
else if (set_menu_flag == 2)
{
show_setmenu_c();
set_menu_flag = 3;
}
else if (set_menu_flag == 3)
{
set_menu_flag = 3;
}
else
{
set_menu_flag = 0;
}
}
else if (set_limit_flag == 1) /* 设置温度阈值时,按向下键减少设定值 */
{
if (temp_layer)
{
alarm_limit.temp_othreshold++;//值
if (alarm_limit.temp_othreshold >= 99)
alarm_limit.temp_othreshold = 99;
show_temp_limit_high(alarm_limit.temp_othreshold, alarm_limit.temp_uthreshold);
//显示上、下限设置结果
}
else
{
alarm_limit.temp_uthreshold++;
if (alarm_limit.temp_uthreshold >= 99)
alarm_limit.temp_uthreshold = 99;
show_temp_limit_low(alarm_limit.temp_othreshold, alarm_limit.temp_uthreshold);
}
}
else if (set_limit_flag == 2) /* 设置模入阈值,增加 */
{
if (hum_layer)
{
alarm_limit.analog_othreshold++;
if (alarm_limit.analog_othreshold >= 1023)
alarm_limit.analog_othreshold = 1023;
show_analog_limit_high(alarm_limit.analog_othreshold, alarm_limit.analog_uthreshold);
}
else
{
alarm_limit.analog_uthreshold++;
if (alarm_limit.analog_uthreshold >= 99)
alarm_limit.analog_uthreshold = 99;
show_analog_limit_low(alarm_limit.analog_othreshold, alarm_limit.analog_uthreshold);
}
}
else if (set_limit_flag == 3) /* 设置光强阈值,增加 */
{
if (light_layer)
{
alarm_limit.lumin_othreshold++;
if (alarm_limit.lumin_othreshold >= 99)
alarm_limit.lumin_othreshold = 99;
show_light_limit_high(alarm_limit.lumin_othreshold, alarm_limit.lumin_uthreshold);
}
else
{
alarm_limit.lumin_uthreshold++;
if (alarm_limit.lumin_uthreshold >= 99)
alarm_limit.lumin_uthreshold = 99;
show_light_limit_low(alarm_limit.lumin_othreshold, alarm_limit.lumin_uthreshold);
}
}
break;
case BUTTON_8:
if (set_limit_flag == 0) /* 选择菜单,增加/往上功能 */
{
if (set_menu_flag == 3)
{
show_setmenu_d();
set_menu_flag = 2;
}
else if (set_menu_flag == 2)
{
show_setmenu_a();
set_menu_flag = 1;
}
else if (set_menu_flag == 1)
{
set_menu_flag = 1;
}
else
{
set_menu_flag = 0;
}
}
else if (set_limit_flag == 1) /* 设置温度阈值,减少 */
{
if (temp_layer)
{
if (alarm_limit.temp_othreshold > 0)
alarm_limit.temp_othreshold--;
if (alarm_limit.temp_othreshold <= 0)
alarm_limit.temp_othreshold = 0;
show_temp_limit_high(alarm_limit.temp_othreshold, alarm_limit.temp_uthreshold);
}
else
{
if (alarm_limit.temp_uthreshold > 0)
alarm_limit.temp_uthreshold--;
if (alarm_limit.temp_uthreshold <= 0)
alarm_limit.temp_uthreshold = 0;
show_temp_limit_low(alarm_limit.temp_othreshold, alarm_limit.temp_uthreshold);
}
}
else if (set_limit_flag == 2) /* 设置模入阈值,减少 */
{
if (hum_layer)
{
if (alarm_limit.analog_othreshold > 0)
alarm_limit.analog_othreshold--;
if (alarm_limit.analog_othreshold <= 0)
alarm_limit.analog_othreshold = 0;
show_analog_limit_high(alarm_limit.analog_othreshold, alarm_limit.analog_uthreshold);
}
else
{
if (alarm_limit.analog_uthreshold > 0)
alarm_limit.analog_uthreshold--;
if (alarm_limit.analog_uthreshold <= 0)
alarm_limit.analog_uthreshold = 0;
show_analog_limit_low(alarm_limit.analog_othreshold, alarm_limit.analog_uthreshold);
}
}
else if (set_limit_flag == 3) /* 设置光强阈值,减少 */
{
if (light_layer)
{
if (alarm_limit.lumin_othreshold > 0)
alarm_limit.lumin_othreshold--;
if (alarm_limit.lumin_othreshold <= 0)
alarm_limit.lumin_othreshold = 0;
show_light_limit_high(alarm_limit.lumin_othreshold, alarm_limit.lumin_uthreshold);
}
else
{
if (alarm_limit.lumin_uthreshold > 0)
alarm_limit.lumin_uthreshold--;
if (alarm_limit.lumin_uthreshold <= 0)
alarm_limit.lumin_uthreshold = 0;
show_light_limit_low(alarm_limit.lumin_othreshold, alarm_limit.lumin_uthreshold);
}
}
break;
case BUTTON_4: /* 返回上一级菜单 */
if (set_limit_flag == 0)
{
show_title();
set_menu_flag = 0;
}
else if (set_menu_flag == 1)
{
show_setmenu_a();
set_limit_flag = 0;
}
else if (set_menu_flag == 2)
{
show_setmenu_b();
set_limit_flag = 0;
}
else if (set_menu_flag == 3)
{
show_setmenu_c();
set_limit_flag = 0;
}
temp_layer = 0;
break;
case BUTTON_15://设置继电器开关
CTRL_RELAY = ~CTRL_RELAY;
if (CTRL_RELAY) /* 继电器开 */
{
show_relay_on(); /* 显示继电器开状态 */
}
else
{
show_relay_off();/* 显示继电器关状态 */
}
break;
case BUTTON_11: /* 增加模拟量输出 */
analog_out_data++;
if (analog_out_data >= 0x3ff) /* 十位da输出 */
analog_out_data = 0x3ff;
show_analog_out(analog_out_data);
dac_5615(analog_out_data);
break;
case BUTTON_7: /* 减少模拟量输出 */
if (analog_out_data > 0)
analog_out_data--;
if (analog_out_data <= 0)
analog_out_data == 0;
show_analog_out(analog_out_data);
dac_5615(analog_out_data);
break;
default:
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -