完成tft基础功能
This commit is contained in:
parent
91399c2e8f
commit
b2a5002742
21 changed files with 1036 additions and 480 deletions
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
|
|
@ -9,7 +9,7 @@ TriggerName=main
|
|||
LimitSize=0
|
||||
ByteLimit=50
|
||||
[DebugChecksum]
|
||||
Checksum=-1423666763
|
||||
Checksum=2065568720
|
||||
[CodeCoverage]
|
||||
Enabled=_ 0
|
||||
[Exceptions]
|
||||
|
|
@ -47,7 +47,7 @@ MultiCoreRunAll=1
|
|||
CStepIntDis=_ 0
|
||||
TraceBufferSize=0x00010000
|
||||
TraceStallIfFIFOFull=0x00000000
|
||||
TracePortSize=0x00000000
|
||||
TracePortSize=0x00000004
|
||||
[Log file]
|
||||
LoggingEnabled=_ 0
|
||||
LogFile=_ ""
|
||||
|
|
@ -66,7 +66,8 @@ Exclusions=
|
|||
[Disassemble mode]
|
||||
mode=0
|
||||
[Breakpoints2]
|
||||
Count=0
|
||||
Bp0=_ 0 "EMUL_CODE" "{$PROJ_DIR$\..\src\app\main.c}.81.13" 0 0 1 "" 0 "" 0
|
||||
Count=1
|
||||
[Aliases]
|
||||
Count=0
|
||||
SuppressDialog=0
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* debug.c - 调试功能的实现
|
||||
* debug.c - 调试功能的实现
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
|
|
@ -15,7 +15,7 @@ volatile float recval_debug_uart[26];
|
|||
|
||||
|
||||
/*
|
||||
* debug_init() - 初始化调试功能
|
||||
* debug_init() - 初始化调试功能
|
||||
*/
|
||||
void debug_init(void)
|
||||
{
|
||||
|
|
@ -24,11 +24,11 @@ void debug_init(void)
|
|||
}
|
||||
|
||||
/*
|
||||
* str_to_fp() - 将字符串转换为浮点数
|
||||
* @str: 字符串地址
|
||||
* @len: 字符串长度
|
||||
* str_to_fp() - 将字符串转换为浮点数
|
||||
* @str: 字符串地址
|
||||
* @len: 字符串长度
|
||||
*
|
||||
* 这个函数传入的字符串格式应符合c语言标准浮点格式,并且没有'\0'
|
||||
* 这个函数传入的字符串格式应符合c语言标准浮点格式,并且没有'\0'
|
||||
*/
|
||||
float str_to_fp(char str[], uint8_t len)
|
||||
{
|
||||
|
|
@ -57,7 +57,7 @@ float str_to_fp(char str[], uint8_t len)
|
|||
}
|
||||
|
||||
/*
|
||||
* rec_debug_uart() - 接收uart传入的调试信息,并转换为浮点数
|
||||
* rec_debug_uart() - 接收uart传入的调试信息,并转换为浮点数
|
||||
*
|
||||
*/
|
||||
void rec_debug_uart(void)
|
||||
|
|
@ -190,11 +190,11 @@ void rec_debug_uart(void)
|
|||
index = 0;
|
||||
if (ch == '#')
|
||||
{
|
||||
printf("清除缓存成功\n");
|
||||
printf("清除缓存成功\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("设置%c为%s\n", ch, str_log);
|
||||
printf("设置%c为%s\n", ch, str_log);
|
||||
}
|
||||
}
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* config.h - 配置整个工程
|
||||
* config.h - 配置整个工程
|
||||
*
|
||||
*/
|
||||
|
||||
|
|
@ -10,20 +10,20 @@
|
|||
|
||||
|
||||
/*
|
||||
* 模拟定时器使用的定时器
|
||||
* 模拟定时器使用的定时器
|
||||
*/
|
||||
#define SIMULAT_TIMER_PITX PIT1
|
||||
|
||||
|
||||
/*
|
||||
* 调试模块
|
||||
* 调试模块
|
||||
*/
|
||||
#define DEBUG_UARTX UART1
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* 输入模块
|
||||
* 输入模块
|
||||
*/
|
||||
#define UP_KEY_PINX PTE20
|
||||
#define DOWN_KEY_PINX PTA17
|
||||
|
|
@ -35,16 +35,16 @@
|
|||
#define MB_KEY_PINX PTA16
|
||||
#define MUVB_KEY_PINX PTD6
|
||||
|
||||
#define KNOB_A_PINX PTD3
|
||||
#define KNOB_B_PINX PTD4
|
||||
#define KNOB_KEY_PINX PTD5
|
||||
#define KNOB_A_PINX PTD6
|
||||
#define KNOB_B_PINX PTD7
|
||||
#define KNOB_KEY_PINX PTD4 // PTD5
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* 显示模块
|
||||
* 显示模块
|
||||
*/
|
||||
#define TFT_UARTX UART2
|
||||
#define TFT_UARTX UART2 // PTD2,PTD3
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* debug.h - 调试
|
||||
* debug.h - 调试
|
||||
*/
|
||||
|
||||
#ifndef DEBUG_H
|
||||
|
|
@ -23,21 +23,21 @@ extern volatile float recval_debug_uart[26];
|
|||
|
||||
|
||||
/*
|
||||
* debug_init() - 初始化调试功能
|
||||
* debug_init() - 初始化调试功能
|
||||
*/
|
||||
void debug_init(void);
|
||||
|
||||
/*
|
||||
* str_to_fp() - 将字符串转换为浮点数
|
||||
* @str: 字符串地址
|
||||
* @len: 字符串长度
|
||||
* str_to_fp() - 将字符串转换为浮点数
|
||||
* @str: 字符串地址
|
||||
* @len: 字符串长度
|
||||
*
|
||||
* 这个函数传入的字符串格式应符合c语言标准浮点格式,并且没有'\0'
|
||||
* 这个函数传入的字符串格式应符合c语言标准浮点格式,并且没有'\0'
|
||||
*/
|
||||
float str_to_fp(char str[], uint8_t len);
|
||||
|
||||
/*
|
||||
* rec_debug_uart() - 接收uart传入的调试信息,并转换为浮点数
|
||||
* rec_debug_uart() - 接收uart传入的调试信息,并转换为浮点数
|
||||
*
|
||||
*/
|
||||
void rec_debug_uart(void);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* 文件:input.h
|
||||
* 功能:将外设输入的数据转换为单片机内存中的数据
|
||||
* 文件:input.h
|
||||
* 功能:将外设输入的数据转换为单片机内存中的数据
|
||||
*/
|
||||
|
||||
#ifndef INPUT_H
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/* key.h - 监测并采集按键的输入
|
||||
* 共有四种输入,无键,单击,双击,长击。
|
||||
* 使用一个定时器每10ms采集一次io状态来实现的。
|
||||
/* key.h - 监测并采集按键的输入
|
||||
* 共有四种输入,无键,单击,双击,长击。
|
||||
* 使用一个定时器每10ms采集一次io状态来实现的。
|
||||
*/
|
||||
|
||||
#ifndef KEY_H
|
||||
|
|
@ -15,7 +15,7 @@ typedef enum key_mean_
|
|||
|
||||
|
||||
/*
|
||||
* key_type - 按键的种类
|
||||
* key_type - 按键的种类
|
||||
*/
|
||||
typedef enum key_type_
|
||||
{
|
||||
|
|
@ -25,31 +25,32 @@ typedef enum key_type_
|
|||
|
||||
|
||||
/*
|
||||
* key_init() - 按键模块初始化
|
||||
* key_init() - 按键模块初始化
|
||||
*
|
||||
*/
|
||||
void key_init(void);
|
||||
|
||||
|
||||
/*
|
||||
* key_detect() - 检测按键
|
||||
* key_detect() - 检测按键
|
||||
*
|
||||
* 要求每隔10ms调用一次
|
||||
* 要求每隔10ms调用一次
|
||||
*/
|
||||
void key_detect(void);
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* get_key_mean() - 得到指定的按键信息
|
||||
* get_key_mean() - 得到指定的按键信息
|
||||
*
|
||||
* 这个函数中在取得信息后会将对应按键重新标记为N_KEY
|
||||
* 这个函数中在取得信息后会将对应按键重新标记为N_KEY
|
||||
*/
|
||||
key_mean get_key_mean(key_type key_t);
|
||||
|
||||
|
||||
|
||||
|
||||
void clear_key_m(void);
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* knob.h - 提供旋钮输入的接口函数
|
||||
* knob.h - 提供旋钮输入的接口函数
|
||||
*
|
||||
* 使用的是一个数字旋钮,利用计数来采集输入
|
||||
* 使用的是一个数字旋钮,利用计数来采集输入
|
||||
*/
|
||||
|
||||
#ifndef KNOB_H
|
||||
|
|
@ -14,41 +14,41 @@
|
|||
|
||||
|
||||
/*
|
||||
* knob_init() - 为旋钮输入而执行的初始化
|
||||
* knob_init() - 为旋钮输入而执行的初始化
|
||||
*
|
||||
* 旋钮的检测初始化后默认是禁止的
|
||||
* 旋钮的检测初始化后默认是禁止的
|
||||
*/
|
||||
void knob_init(void);
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* knob_enable() - 使能旋钮脉冲检测
|
||||
* knob_enable() - 使能旋钮脉冲检测
|
||||
*/
|
||||
void knob_enable(void);
|
||||
|
||||
|
||||
/*
|
||||
* knob_disable() - 禁止旋钮脉冲检测
|
||||
* knob_disable() - 禁止旋钮脉冲检测
|
||||
*/
|
||||
void knob_disable(void);
|
||||
|
||||
|
||||
/*
|
||||
* knob_clear() - 清除旋钮值
|
||||
* knob_clear() - 清除旋钮值
|
||||
*/
|
||||
void knob_clear(void);
|
||||
|
||||
/*
|
||||
* get_knob_val() - 返回旋钮值
|
||||
* get_knob_val() - 返回旋钮值
|
||||
*/
|
||||
int32_t get_knob_val(void);
|
||||
|
||||
|
||||
/*
|
||||
* knob_detect() - 旋钮检测
|
||||
* knob_detect() - 旋钮检测
|
||||
*
|
||||
* 这个函数需要在旋钮编码器的A相输出发生沿跳变时调用,即上下沿中断时
|
||||
* 这个函数需要在旋钮编码器的A相输出发生沿跳变时调用,即上下沿中断时
|
||||
*/
|
||||
void knob_detect(void);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
/*
|
||||
* pm_init.h - 对整个应用程序的初始化
|
||||
* pm_init.h - 对整个应用程序的初始化
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* pm_init() - 初始化
|
||||
* pm_init() - 初始化
|
||||
*/
|
||||
void pm_init(void);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* simulat_timer.h - 实现一个模拟定时器
|
||||
* simulat_timer.h - 实现一个模拟定时器
|
||||
*/
|
||||
|
||||
#ifndef SIMULAT_TIMER_H
|
||||
|
|
@ -8,7 +8,7 @@
|
|||
#include <stdint.h>
|
||||
|
||||
/*
|
||||
* 模拟定时器的数量
|
||||
* 模拟定时器的数量
|
||||
*/
|
||||
#define SIMULAT_TIMER_NUM 3
|
||||
|
||||
|
|
@ -16,14 +16,14 @@
|
|||
|
||||
typedef struct st_register_
|
||||
{
|
||||
uint8_t count; // 定时器计数
|
||||
uint32_t cmr; // 比较寄存器
|
||||
uint8_t count; // 定时器计数
|
||||
uint32_t cmr; // 比较寄存器
|
||||
struct
|
||||
{
|
||||
uint8_t ten : 1; // 使能标志
|
||||
uint8_t tov : 1; // 溢出标志
|
||||
uint8_t tfc : 1; // 自由运行标志
|
||||
uint8_t tcf : 1; // 比较标志
|
||||
uint8_t ten : 1; // 使能标志
|
||||
uint8_t tov : 1; // 溢出标志
|
||||
uint8_t tfc : 1; // 自由运行标志
|
||||
uint8_t tcf : 1; // 比较标志
|
||||
} flag;
|
||||
} st_register;
|
||||
|
||||
|
|
@ -35,55 +35,55 @@ typedef enum st_mode_
|
|||
} st_mode;
|
||||
|
||||
/*
|
||||
* st_init() - 初始化实现模拟定时器所需的pit定时器
|
||||
* st_init() - 初始化实现模拟定时器所需的pit定时器
|
||||
*
|
||||
* 基础定时为1ms
|
||||
* 基础定时为1ms
|
||||
*/
|
||||
void st_base_init(void);
|
||||
|
||||
|
||||
/*
|
||||
* st_init() - 初始化一个给定编号的模拟定时器
|
||||
* @n: 定时器编号
|
||||
* @st_m: 定时模式
|
||||
* @cmr_v: 定时器比较值,在非比较模式可以为任意值
|
||||
* st_init() - 初始化一个给定编号的模拟定时器
|
||||
* @n: 定时器编号
|
||||
* @st_m: 定时模式
|
||||
* @cmr_v: 定时器比较值,在非比较模式可以为任意值
|
||||
*
|
||||
* 这个函数返回0表示正常完成了初始化任务,返回~0表示定时器已打开或不存在
|
||||
* 这个函数返回0表示正常完成了初始化任务,返回~0表示定时器已打开或不存在
|
||||
*/
|
||||
uint8_t st_init(uint8_t n, st_mode st_m, uint32_t cmr_v);
|
||||
|
||||
|
||||
/*
|
||||
* st_close() - 关闭一个给定编号的模拟定时器
|
||||
* @n: 定时器编号
|
||||
* st_close() - 关闭一个给定编号的模拟定时器
|
||||
* @n: 定时器编号
|
||||
*/
|
||||
void st_close(uint8_t n);
|
||||
|
||||
/*
|
||||
* st_tcf() - 查询tcf位返回
|
||||
* @n: 定时器编号
|
||||
* st_tcf() - 查询tcf位返回
|
||||
* @n: 定时器编号
|
||||
*
|
||||
* 这个函数在没有过比较值的时候返回0,已过比较值得时候返回1,对于不存在或未打开
|
||||
* 这个函数在没有过比较值的时候返回0,已过比较值得时候返回1,对于不存在或未打开
|
||||
*/
|
||||
uint8_t st_tcf(uint8_t n);
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* st_tov() - 查询tov位返回
|
||||
* @n: 定时器编号
|
||||
* st_tov() - 查询tov位返回
|
||||
* @n: 定时器编号
|
||||
*
|
||||
* 这个函数在没有溢出时返回0,没有溢出时返回1,对于不存在或未打开
|
||||
* 这个函数在没有溢出时返回0,没有溢出时返回1,对于不存在或未打开
|
||||
*/
|
||||
uint8_t st_tov(uint8_t n);
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* st_count() - 查询当前模拟定时值
|
||||
* @n: 定时器编号
|
||||
* st_count() - 查询当前模拟定时值
|
||||
* @n: 定时器编号
|
||||
*
|
||||
* 对于不存在或未打开
|
||||
* 对于不存在或未打开
|
||||
*/
|
||||
uint32_t st_count(uint8_t n);
|
||||
|
||||
|
|
@ -92,9 +92,9 @@ uint32_t st_count(uint8_t n);
|
|||
/********************ISR******************/
|
||||
|
||||
/*
|
||||
* st_base() -定时调用以模拟N路定时器
|
||||
* st_base() -定时调用以模拟N路定时器
|
||||
*
|
||||
* 定时的最小间隔等于这个函数被调用的周期
|
||||
* 定时的最小间隔等于这个函数被调用的周期
|
||||
*/
|
||||
void st_base(void);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* tft.h - tft接口
|
||||
* tft.h - tft½Ó¿Ú
|
||||
*/
|
||||
|
||||
|
||||
|
|
@ -7,8 +7,20 @@
|
|||
#define TFT_H
|
||||
|
||||
|
||||
typedef struct input_limit_
|
||||
{
|
||||
int16_t max;
|
||||
int16_t min;
|
||||
} input_limit;
|
||||
|
||||
void tft_init(void);
|
||||
|
||||
void tft_send_cmd(const char *cmd);
|
||||
|
||||
void tft_left(void);
|
||||
|
||||
void tft_right(void);
|
||||
|
||||
void tft_up(void);
|
||||
|
||||
void tft_down(void);
|
||||
|
|
@ -18,6 +30,10 @@ void tft_ok(void);
|
|||
void tft_ret(void);
|
||||
|
||||
|
||||
int16_t get_value_of_kvp(char *name);
|
||||
|
||||
input_limit tft_input_limit(char *name);
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
/*
|
||||
* time.h - 时间处理
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
uint8_t is_leapyear(uint16_t year);
|
||||
|
||||
|
||||
|
||||
uint8_t get_month_days(uint16_t year, uint8_t month);
|
||||
|
|
@ -1,17 +1,17 @@
|
|||
/*
|
||||
* key.c - 监测并采集按键的输入
|
||||
* key.c - 监测并采集按键的输入
|
||||
*
|
||||
* 共有四种输入,无键,单击,双击,长击。
|
||||
* 每10ms需要采集一次io状态。
|
||||
* 每增减一个按键,需要设置的有:
|
||||
* 共有四种输入,无键,单击,双击,长击。
|
||||
* 每10ms需要采集一次io状态。
|
||||
* 每增减一个按键,需要设置的有:
|
||||
*
|
||||
* key_type枚举类型中对应的枚举元素
|
||||
* key_type枚举类型中对应的枚举元素
|
||||
*
|
||||
* 对应的key_infomation变量
|
||||
* 对应的key_infomation变量
|
||||
*
|
||||
* key_init()函数中对应的初始化条目
|
||||
* key_detect()函数中对应检测条目
|
||||
* get_key_mean()函数中对应获取条目
|
||||
* key_init()函数中对应的初始化条目
|
||||
* key_detect()函数中对应检测条目
|
||||
* get_key_mean()函数中对应获取条目
|
||||
*/
|
||||
|
||||
|
||||
|
|
@ -24,11 +24,11 @@
|
|||
|
||||
|
||||
/*
|
||||
* key_state - 表示按键的状态
|
||||
* key_state_0 初始状态,或者表示第一次单击状态
|
||||
* key_state_1 消抖和确认状态,或表示第二次单击状态
|
||||
* key_state_2 按键计时状态
|
||||
* key_state_3 按键等待释放状态
|
||||
* key_state - 表示按键的状态
|
||||
* key_state_0 初始状态,或者表示第一次单击状态
|
||||
* key_state_1 消抖和确认状态,或表示第二次单击状态
|
||||
* key_state_2 按键计时状态
|
||||
* key_state_3 按键等待释放状态
|
||||
*/
|
||||
typedef enum key_state_
|
||||
{
|
||||
|
|
@ -36,7 +36,7 @@ typedef enum key_state_
|
|||
} key_state;
|
||||
|
||||
/*
|
||||
* IO状态符号定义
|
||||
* IO状态符号定义
|
||||
*/
|
||||
typedef enum state_sign_
|
||||
{
|
||||
|
|
@ -101,7 +101,7 @@ static volatile key_infomation
|
|||
|
||||
|
||||
/*
|
||||
* key_init() - 按键模块初始化
|
||||
* key_init() - 按键模块初始化
|
||||
*
|
||||
*/
|
||||
void key_init(void)
|
||||
|
|
@ -118,7 +118,7 @@ void key_init(void)
|
|||
|
||||
|
||||
/*
|
||||
* 初始化定时器为10ms定时中断,用于按键检测的定时执行
|
||||
* 初始化定时器为10ms定时中断,用于按键检测的定时执行
|
||||
*/
|
||||
|
||||
|
||||
|
|
@ -127,32 +127,32 @@ void key_init(void)
|
|||
|
||||
|
||||
/*
|
||||
* key_read_base - 按键基础读取函数,
|
||||
* @key_info: 要检测按键的所需信息,必须在是全局变量区中存储的
|
||||
* key_read_base - 按键基础读取函数,
|
||||
* @key_info: 要检测按键的所需信息,必须在是全局变量区中存储的
|
||||
*
|
||||
* 这个函数返回 N_KEY,S_KEY,L_KEY三种情况
|
||||
* 这个函数返回 N_KEY,S_KEY,L_KEY三种情况
|
||||
*/
|
||||
key_mean key_read_base(volatile key_infomation *key_info)
|
||||
{
|
||||
state_sign key_state_io;
|
||||
key_mean key_m = N_KEY;
|
||||
|
||||
key_state_io = (*((*key_info).get_state_io))(); // 获取io状态
|
||||
key_state_io = (*((*key_info).get_state_io))(); // 获取io状态
|
||||
switch((*key_info).state_base)
|
||||
{
|
||||
case key_state_0:
|
||||
if (key_state_io == VALID)
|
||||
{
|
||||
(*key_info).state_base = key_state_1; // 按键按下后首先进入消抖和按键确
|
||||
// 认状态
|
||||
(*key_info).state_base = key_state_1; // 按键按下后首先进入消抖和按键确
|
||||
// 认状态
|
||||
}
|
||||
break;
|
||||
case key_state_1:
|
||||
if (key_state_io == VALID)
|
||||
{
|
||||
(*key_info).time_base = 0;
|
||||
(*key_info).state_base = key_state_2; // 按键如果仍然按下,则消抖完成,
|
||||
// 状态转换,此时返回无按键事件
|
||||
(*key_info).state_base = key_state_2; // 按键如果仍然按下,则消抖完成,
|
||||
// 状态转换,此时返回无按键事件
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -162,20 +162,20 @@ key_mean key_read_base(volatile key_infomation *key_info)
|
|||
case key_state_2:
|
||||
if (key_state_io == INVALID)
|
||||
{
|
||||
key_m = S_KEY; // 此时按键释放说明为一次短操作
|
||||
key_m = S_KEY; // 此时按键释放说明为一次短操作
|
||||
(*key_info).state_base = key_state_0;
|
||||
}
|
||||
else if (++(*key_info).time_base > 100) // 继续按下,计时加10ms,即本函
|
||||
// 数调用周期
|
||||
else if (++(*key_info).time_base > 100) // 继续按下,计时加10ms,即本函
|
||||
// 数调用周期
|
||||
{
|
||||
key_m = L_KEY; // 按下时间大于1s,返回 长按键
|
||||
(*key_info).state_base = key_state_3; // 转换为等待按键释放状态
|
||||
key_m = L_KEY; // 按下时间大于1s,返回 长按键
|
||||
(*key_info).state_base = key_state_3; // 转换为等待按键释放状态
|
||||
}
|
||||
break;
|
||||
case key_state_3:
|
||||
if (key_state_io == INVALID)
|
||||
{
|
||||
(*key_info).state_base = key_state_0; // 按键此时已释放,转换为初始状态
|
||||
(*key_info).state_base = key_state_0; // 按键此时已释放,转换为初始状态
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
|
@ -185,10 +185,10 @@ key_mean key_read_base(volatile key_infomation *key_info)
|
|||
}
|
||||
|
||||
/*
|
||||
* key_read - 按键读取函数
|
||||
* @key_info: 要检测的按键所需的信息,必须是在全局变量区中存储的
|
||||
* key_read - 按键读取函数
|
||||
* @key_info: 要检测的按键所需的信息,必须是在全局变量区中存储的
|
||||
*
|
||||
* 这个函数会返回N_KEY,S_KEY,D_KEY,L_KEY四情况
|
||||
* 这个函数会返回N_KEY,S_KEY,D_KEY,L_KEY四情况
|
||||
*/
|
||||
key_mean key_read(volatile key_infomation *key_info)
|
||||
{
|
||||
|
|
@ -201,17 +201,17 @@ key_mean key_read(volatile key_infomation *key_info)
|
|||
case key_state_0:
|
||||
if (key_m_temp == S_KEY)
|
||||
{
|
||||
(*key_info).time = 0; // 第一次单击状态,仍然返回无键,到下个周期
|
||||
// 判断是否出现双击
|
||||
(*key_info).time = 0; // 第一次单击状态,仍然返回无键,到下个周期
|
||||
// 判断是否出现双击
|
||||
(*key_info).state = key_state_1;
|
||||
}
|
||||
else
|
||||
{
|
||||
key_m = key_m_temp; // 对于非单击,返回原事件
|
||||
key_m = key_m_temp; // 对于非单击,返回原事件
|
||||
}
|
||||
break;
|
||||
case key_state_1:
|
||||
if (key_m_temp == S_KEY) // 又一次单击,间隔 < 300ms
|
||||
if (key_m_temp == S_KEY) // 又一次单击,间隔 < 300ms
|
||||
{
|
||||
key_m = D_KEY;
|
||||
(*key_info).state = key_state_0;
|
||||
|
|
@ -220,8 +220,8 @@ key_mean key_read(volatile key_infomation *key_info)
|
|||
{
|
||||
if (++(*key_info).time > 30)
|
||||
{
|
||||
key_m = S_KEY; // 300ms内没有再出现单击事件,则返回上一次单
|
||||
// 击事件
|
||||
key_m = S_KEY; // 300ms内没有再出现单击事件,则返回上一次单
|
||||
// 击事件
|
||||
(*key_info).state = key_state_0;
|
||||
}
|
||||
}
|
||||
|
|
@ -234,11 +234,11 @@ key_mean key_read(volatile key_infomation *key_info)
|
|||
|
||||
|
||||
/*
|
||||
* key_detect() - 检测按键
|
||||
* key_detect() - 检测按键
|
||||
*
|
||||
* 这个函数仅在N_KEY状态时记录按键信息,N_KEY是在应用程序获取按键信息的时候同时被设
|
||||
* 置的,这样做的目的是保证采集到的按键一定会被执行
|
||||
* 要求每隔10ms调用一次
|
||||
* 这个函数仅在N_KEY状态时记录按键信息,N_KEY是在应用程序获取按键信息的时候同时被设
|
||||
* 置的,这样做的目的是保证采集到的按键一定会被执行
|
||||
* 要求每隔10ms调用一次
|
||||
*/
|
||||
void key_detect(void)
|
||||
{
|
||||
|
|
@ -285,9 +285,9 @@ void key_detect(void)
|
|||
|
||||
|
||||
/*
|
||||
* get_key_mean() - 得到指定的按键信息
|
||||
* get_key_mean() - 得到指定的按键信息
|
||||
*
|
||||
* 这个函数中在取得信息后会将对应按键重新标记为N_KEY
|
||||
* 这个函数中在取得信息后会将对应按键重新标记为N_KEY
|
||||
*/
|
||||
key_mean get_key_mean(key_type key_t)
|
||||
{
|
||||
|
|
@ -336,3 +336,17 @@ key_mean get_key_mean(key_type key_t)
|
|||
}
|
||||
return key_m;
|
||||
}
|
||||
|
||||
|
||||
void clear_key_m(void)
|
||||
{
|
||||
down_key_info.key_m = N_KEY;
|
||||
up_key_info.key_m = N_KEY;
|
||||
ok_key_info.key_m = N_KEY;
|
||||
ret_key_info.key_m = N_KEY;
|
||||
ams_key_info.key_m = N_KEY;
|
||||
wifi_key_info.key_m = N_KEY;
|
||||
mr_key_info.key_m = N_KEY;
|
||||
mb_key_info.key_m = N_KEY;
|
||||
muvb_key_info.key_m = N_KEY;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* knob.c - 提供旋钮输入的接口函数
|
||||
* knob.c - 提供旋钮输入的接口函数
|
||||
*
|
||||
* 使用的是一个数字旋钮,利用计数来采集输入
|
||||
* 使用的是一个数字旋钮,利用计数来采集输入
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
|
|
@ -20,9 +20,9 @@ static volatile int32_t knob_val;
|
|||
|
||||
|
||||
/*
|
||||
* knob_init() - 为旋钮输入而执行的初始化
|
||||
* knob_init() - 为旋钮输入而执行的初始化
|
||||
*
|
||||
* 旋钮的检测初始化后默认是禁止的
|
||||
* 旋钮的检测初始化后默认是禁止的
|
||||
*/
|
||||
void knob_init(void)
|
||||
{
|
||||
|
|
@ -35,7 +35,7 @@ void knob_init(void)
|
|||
|
||||
|
||||
/*
|
||||
* knob_enable() - 使能旋钮脉冲检测
|
||||
* knob_enable() - 使能旋钮脉冲检测
|
||||
*/
|
||||
void knob_enable(void)
|
||||
{
|
||||
|
|
@ -44,7 +44,7 @@ void knob_enable(void)
|
|||
}
|
||||
|
||||
/*
|
||||
* knob_disable() - 禁止旋钮脉冲检测
|
||||
* knob_disable() - 禁止旋钮脉冲检测
|
||||
*/
|
||||
void knob_disable(void)
|
||||
{
|
||||
|
|
@ -55,7 +55,7 @@ void knob_disable(void)
|
|||
|
||||
|
||||
/*
|
||||
* knob_clear() - 清除旋钮值
|
||||
* knob_clear() - 清除旋钮值
|
||||
*/
|
||||
void knob_clear(void)
|
||||
{
|
||||
|
|
@ -64,7 +64,7 @@ void knob_clear(void)
|
|||
}
|
||||
|
||||
/*
|
||||
* get_knob_val() - 返回旋钮值
|
||||
* get_knob_val() - 返回旋钮值
|
||||
*/
|
||||
int32_t get_knob_val(void)
|
||||
{
|
||||
|
|
@ -73,9 +73,9 @@ int32_t get_knob_val(void)
|
|||
|
||||
|
||||
/*
|
||||
* knob_detect() - 旋钮检测
|
||||
* knob_detect() - 旋钮检测
|
||||
*
|
||||
* 这个函数需要在旋钮编码器的A相输出发生沿跳变时调用,即上下沿中断时
|
||||
* 这个函数需要在旋钮编码器的A相输出发生沿跳变时调用,即上下沿中断时
|
||||
*/
|
||||
void knob_detect(void)
|
||||
{
|
||||
|
|
@ -87,7 +87,7 @@ void knob_detect(void)
|
|||
{
|
||||
knob_val++;
|
||||
}
|
||||
else // 即if ((knob_A == 0 && knob_B == 0) || (knob_A == 1 && knob_B == 1))
|
||||
else // 即if ((knob_A == 0 && knob_B == 0) || (knob_A == 1 && knob_B == 1))
|
||||
{
|
||||
knob_val--;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
#include "include/simulat_timer.h"
|
||||
#include "include/key.h"
|
||||
#include "include/knob.h"
|
||||
#include "include/tft.h"
|
||||
|
||||
|
||||
void main(void)
|
||||
|
|
@ -21,10 +22,7 @@ void main(void)
|
|||
|
||||
while (1)
|
||||
{
|
||||
if (st_tcf(0) == 1)
|
||||
{
|
||||
key_detect();
|
||||
}
|
||||
|
||||
if (st_tcf(1) == 1)
|
||||
{
|
||||
if (log != (knob_v = get_knob_val()))
|
||||
|
|
@ -34,6 +32,45 @@ void main(void)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
switch (get_key_mean(UP_KEY))
|
||||
{
|
||||
case N_KEY:
|
||||
//printf("轟숩\n");
|
||||
break;
|
||||
case S_KEY:
|
||||
printf("데샌\n");
|
||||
tft_left();
|
||||
break;
|
||||
case D_KEY:
|
||||
printf("崗샌\n");
|
||||
tft_up();
|
||||
break;
|
||||
case L_KEY:
|
||||
printf("낀객\n");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
switch (get_key_mean(DOWN_KEY))
|
||||
{
|
||||
case N_KEY:
|
||||
//printf("轟숩\n");
|
||||
break;
|
||||
case S_KEY:
|
||||
printf("데샌\n");
|
||||
tft_right();
|
||||
break;
|
||||
case D_KEY:
|
||||
printf("崗샌\n");
|
||||
tft_down();
|
||||
break;
|
||||
case L_KEY:
|
||||
printf("낀객\n");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
switch (get_key_mean(OK_KEY))
|
||||
{
|
||||
case N_KEY:
|
||||
|
|
@ -41,6 +78,25 @@ void main(void)
|
|||
break;
|
||||
case S_KEY:
|
||||
printf("µ¥»÷\n");
|
||||
tft_ok();
|
||||
break;
|
||||
case D_KEY:
|
||||
printf("崗샌\n");
|
||||
break;
|
||||
case L_KEY:
|
||||
printf("낀객\n");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
switch (get_key_mean(RET_KEY))
|
||||
{
|
||||
case N_KEY:
|
||||
//printf("轟숩\n");
|
||||
break;
|
||||
case S_KEY:
|
||||
printf("데샌\n");
|
||||
tft_ret();
|
||||
break;
|
||||
case D_KEY:
|
||||
printf("Ë«»÷\n");
|
||||
|
|
|
|||
|
|
@ -1,15 +1,16 @@
|
|||
/*
|
||||
* pm_init.c - 对整个应用程序的初始化
|
||||
* pm_init.c - 对整个应用程序的初始化
|
||||
*/
|
||||
|
||||
#include "include/simulat_timer.h"
|
||||
#include "include/key.h"
|
||||
#include "include/knob.h"
|
||||
#include "include/debug.h"
|
||||
#include "include/tft.h"
|
||||
|
||||
|
||||
/*
|
||||
* pm_init() - 初始化
|
||||
* pm_init() - 初始化
|
||||
*/
|
||||
void pm_init(void)
|
||||
{
|
||||
|
|
@ -17,4 +18,6 @@ void pm_init(void)
|
|||
key_init();
|
||||
knob_init();
|
||||
st_base_init();
|
||||
tft_init();
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,38 +1,39 @@
|
|||
/*
|
||||
* simulat_timer.h - 实现一个模拟定时器
|
||||
* simulat_timer.h - 实现一个模拟定时器
|
||||
*/
|
||||
|
||||
#include "include.h"
|
||||
|
||||
#include "include/simulat_timer.h"
|
||||
#include "include/config.h"
|
||||
#include "include/key.h"
|
||||
|
||||
static volatile st_register st_r[SIMULAT_TIMER_NUM];
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* st_init() - 初始化实现模拟定时器所需的pit定时器
|
||||
* st_init() - 初始化实现模拟定时器所需的pit定时器
|
||||
*
|
||||
* 基础定时为1ms
|
||||
* 基础定时为1ms
|
||||
*/
|
||||
void st_base_init(void)
|
||||
{
|
||||
uint32_t cnt;
|
||||
|
||||
cnt = bus_clk_khz * 1;
|
||||
pit_init(SIMULAT_TIMER_PITX, cnt); // 1ms硬件定时中断周期
|
||||
pit_init(SIMULAT_TIMER_PITX, cnt); // 1ms硬件定时中断周期
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* st_init() - 初始化一个给定编号的模拟定时器
|
||||
* @n: 定时器编号
|
||||
* @st_m: 定时模式
|
||||
* @cmr_v: 定时器比较值,在非比较模式可以为任意值
|
||||
* st_init() - 初始化一个给定编号的模拟定时器
|
||||
* @n: 定时器编号
|
||||
* @st_m: 定时模式
|
||||
* @cmr_v: 定时器比较值,在非比较模式可以为任意值
|
||||
*
|
||||
* 这个函数返回0表示正常完成了初始化任务,返回~0表示定时器已打开或不存在
|
||||
* 这个函数返回0表示正常完成了初始化任务,返回~0表示定时器已打开或不存在
|
||||
*/
|
||||
uint8_t st_init(uint8_t n, st_mode st_m, uint32_t cmr_v)
|
||||
{
|
||||
|
|
@ -58,8 +59,8 @@ uint8_t st_init(uint8_t n, st_mode st_m, uint32_t cmr_v)
|
|||
|
||||
|
||||
/*
|
||||
* st_close() - 关闭一个给定编号的模拟定时器
|
||||
* @n: 定时器编号
|
||||
* st_close() - 关闭一个给定编号的模拟定时器
|
||||
* @n: 定时器编号
|
||||
*/
|
||||
void st_close(uint8_t n)
|
||||
{
|
||||
|
|
@ -68,10 +69,10 @@ void st_close(uint8_t n)
|
|||
}
|
||||
|
||||
/*
|
||||
* st_tcf() - 查询tcf位返回
|
||||
* @n: 定时器编号
|
||||
* st_tcf() - 查询tcf位返回
|
||||
* @n: 定时器编号
|
||||
*
|
||||
* 这个函数在没有过比较值的时候返回0,已过比较值得时候返回1,对于不存在或未打开
|
||||
* 这个函数在没有过比较值的时候返回0,已过比较值得时候返回1,对于不存在或未打开
|
||||
*/
|
||||
uint8_t st_tcf(uint8_t n)
|
||||
{
|
||||
|
|
@ -90,10 +91,10 @@ uint8_t st_tcf(uint8_t n)
|
|||
}
|
||||
|
||||
/*
|
||||
* st_tov() - 查询tov位返回
|
||||
* @n: 定时器编号
|
||||
* st_tov() - 查询tov位返回
|
||||
* @n: 定时器编号
|
||||
*
|
||||
* 这个函数在没有溢出时返回0,没有溢出时返回1,对于不存在或未打开
|
||||
* 这个函数在没有溢出时返回0,没有溢出时返回1,对于不存在或未打开
|
||||
*/
|
||||
uint8_t st_tov(uint8_t n)
|
||||
{
|
||||
|
|
@ -111,10 +112,10 @@ uint8_t st_tov(uint8_t n)
|
|||
}
|
||||
|
||||
/*
|
||||
* st_count() - 查询当前模拟定时值
|
||||
* @n: 定时器编号
|
||||
* st_count() - 查询当前模拟定时值
|
||||
* @n: 定时器编号
|
||||
*
|
||||
* 对于不存在或未打开
|
||||
* 对于不存在或未打开
|
||||
*/
|
||||
uint32_t st_count(uint8_t n)
|
||||
{
|
||||
|
|
@ -123,9 +124,9 @@ uint32_t st_count(uint8_t n)
|
|||
|
||||
|
||||
/*
|
||||
* st_base() -定时调用以模拟N路定时器
|
||||
* st_base() -定时调用以模拟N路定时器
|
||||
*
|
||||
* 定时的最小间隔等于这个函数被调用的周期
|
||||
* 定时的最小间隔等于这个函数被调用的周期
|
||||
*/
|
||||
void st_base(void)
|
||||
{
|
||||
|
|
@ -133,21 +134,27 @@ void st_base(void)
|
|||
|
||||
for (i = 0; i < SIMULAT_TIMER_NUM; i++)
|
||||
{
|
||||
if (st_r[i].flag.ten == 1) // 使能
|
||||
if (st_r[i].flag.ten == 1) // 使能
|
||||
{
|
||||
if (++st_r[i].count == 0) // 溢出
|
||||
if (++st_r[i].count == 0) // 溢出
|
||||
{
|
||||
st_r[i].flag.tov = 1;
|
||||
} // 溢出
|
||||
if (st_r[i].flag.tfc == 1) // 比较
|
||||
} // 溢出
|
||||
if (st_r[i].flag.tfc == 1) // 比较
|
||||
{
|
||||
if (st_r[i].count == st_r[i].cmr)
|
||||
{
|
||||
st_r[i].count = 0;
|
||||
st_r[i].flag.tcf = 1;
|
||||
}
|
||||
} // 比较
|
||||
} // 使能
|
||||
} // 比较
|
||||
} // 使能
|
||||
}
|
||||
|
||||
if (st_tcf(0) == 1)
|
||||
{
|
||||
key_detect();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* tft.c - tft 显示屏的接口
|
||||
* tft.c - tft ÏÔʾÆÁµÄ½Ó¿Ú
|
||||
*
|
||||
* uart hmi方式
|
||||
* uart hmi·½Ê½
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
|
|
@ -14,6 +14,7 @@
|
|||
#include "include/knob.h"
|
||||
#include "include/key.h"
|
||||
#include "include/config.h"
|
||||
#include "include/time.h"
|
||||
|
||||
|
||||
typedef struct kv_pair_
|
||||
|
|
@ -41,47 +42,96 @@ typedef enum entry_attr_
|
|||
R_NUM = 0, RW_NUM, RW_PIC, SW_PAGE
|
||||
} entry_attr;
|
||||
|
||||
typedef enum tft_colour_
|
||||
{
|
||||
TFT_BACK = 65535, TFT_RED = 63488, TFT_PURPLE = 31
|
||||
} tft_colour;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
static tft_state tft_stt = { 0, 0, 0, 0 };
|
||||
|
||||
static uint8_t original_lyt[] = { 0, 1 };
|
||||
static uint8_t menu_lyt[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11 };
|
||||
static uint8_t obj_set_lyt[] = { 0, 4, 8, 12, 13, 16, 18, 19 };
|
||||
static uint8_t menu_lyt[] = { 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 };
|
||||
static uint8_t obj_set_lyt[] = { 0, 4, 7, 11, 13};
|
||||
|
||||
|
||||
kv_pair kvp_menu[] = {
|
||||
{ "st_y", 2016, RW_NUM }, { "st_mo", 4, RW_NUM }, { "st_d", 14, RW_NUM }, { "st_mi", 0, RW_NUM },
|
||||
{ "p1", 0, RW_PIC },
|
||||
{ "p2", 0, RW_PIC },
|
||||
{ "p3", 0, RW_PIC },
|
||||
{ "p4", 0, RW_PIC },
|
||||
{ "p5", 0, RW_PIC },
|
||||
{ "st_y", 2016, RW_NUM }, { "st_mo", 4, RW_NUM }, { "st_d", 14, RW_NUM }, { "st_h", 0, RW_NUM }, { "st_mi", 0, RW_NUM },
|
||||
{ "obj0", 0, SW_PAGE },
|
||||
{ "obj1", 0, SW_PAGE },
|
||||
{ "obj2", 0, SW_PAGE },
|
||||
{ "obj3", 0, SW_PAGE },
|
||||
{ "obj4", 0, SW_PAGE },
|
||||
{ "obj5", 0, SW_PAGE },
|
||||
{ "obj6", 0, SW_PAGE },
|
||||
{ "obj7", 0, SW_PAGE },
|
||||
{ "note", 0, RW_NUM }
|
||||
};
|
||||
|
||||
kv_pair kvp_obj_set[][19] =
|
||||
{
|
||||
{
|
||||
{ "st_y", 2016, RW_NUM }, { "st_mo", 4, RW_NUM }, { "st_d", 14, RW_NUM }, { "st_mi", 0, RW_NUM },
|
||||
{ "bg_y", 2016, RW_NUM }, { "bg_mo", 4, RW_NUM }, { "bg_d", 14, RW_NUM }, { "bg_mi", 0, RW_NUM },
|
||||
{ "ed_y", 2016, RW_NUM }, { "ed_mo", 4, RW_NUM }, { "ed_d", 14, RW_NUM }, { "ed_mi", 0, RW_NUM },
|
||||
{ "pd", 3, RW_NUM },
|
||||
{ "lg_r", 0, RW_PIC}, { "lg_b", 0, RW_PIC }, { "lg_uvb", 0, RW_PIC },
|
||||
{ "lg_cnt", 0, RW_NUM }, { "wt_cnt", 0, RW_NUM },
|
||||
{ "note", 0, RW_NUM }
|
||||
},
|
||||
|
||||
{ "lg_r", 0, RW_PIC}, { "lg_b", 0, RW_PIC }, { "lg_uvb", 0, RW_PIC }, { "water", 0, RW_PIC },
|
||||
{ "bg_y", 2016, RW_NUM }, { "bg_mo", 4, RW_NUM }, { "bg_d", 14, RW_NUM },
|
||||
{ "bg_h", 14, RW_NUM }, { "bg_mi", 0, RW_NUM },
|
||||
{ "ed_h", 14, RW_NUM }, { "ed_mi", 0, RW_NUM },
|
||||
{ "lg_pd", 3, RW_NUM }, { "lg_cnt", 0, RW_NUM },
|
||||
}, // 0
|
||||
{
|
||||
{ "st_y", 2016, RW_NUM }, { "st_mo", 4, RW_NUM }, { "st_d", 14, RW_NUM }, { "st_mi", 0, RW_NUM },
|
||||
{ "bg_y", 2016, RW_NUM }, { "bg_mo", 4, RW_NUM }, { "bg_d", 14, RW_NUM }, { "bg_mi", 0, RW_NUM },
|
||||
{ "ed_y", 2016, RW_NUM }, { "ed_mo", 4, RW_NUM }, { "ed_d", 14, RW_NUM }, { "ed_mi", 0, RW_NUM },
|
||||
{ "pd", 3, RW_NUM },
|
||||
{ "lg_r", 0, RW_PIC}, { "lg_b", 0, RW_PIC }, { "lg_uvb", 0, RW_PIC },
|
||||
{ "lg_cnt", 0, RW_NUM }, { "wt_cnt", 0, RW_NUM },
|
||||
{ "note", 0, RW_NUM }
|
||||
}
|
||||
{ "lg_r", 0, RW_PIC}, { "lg_b", 0, RW_PIC }, { "lg_uvb", 0, RW_PIC }, { "water", 0, RW_PIC },
|
||||
{ "bg_y", 2016, RW_NUM }, { "bg_mo", 4, RW_NUM }, { "bg_d", 14, RW_NUM },
|
||||
{ "bg_h", 14, RW_NUM }, { "bg_mi", 0, RW_NUM },
|
||||
{ "ed_h", 14, RW_NUM }, { "ed_mi", 0, RW_NUM },
|
||||
{ "lg_pd", 3, RW_NUM }, { "lg_cnt", 0, RW_NUM },
|
||||
}, // 1
|
||||
{
|
||||
{ "lg_r", 0, RW_PIC}, { "lg_b", 0, RW_PIC }, { "lg_uvb", 0, RW_PIC }, { "water", 0, RW_PIC },
|
||||
{ "bg_y", 2016, RW_NUM }, { "bg_mo", 4, RW_NUM }, { "bg_d", 14, RW_NUM },
|
||||
{ "bg_h", 14, RW_NUM }, { "bg_mi", 0, RW_NUM },
|
||||
{ "ed_h", 14, RW_NUM }, { "ed_mi", 0, RW_NUM },
|
||||
{ "lg_pd", 3, RW_NUM }, { "lg_cnt", 0, RW_NUM },
|
||||
}, // 2
|
||||
{
|
||||
{ "lg_r", 0, RW_PIC}, { "lg_b", 0, RW_PIC }, { "lg_uvb", 0, RW_PIC }, { "water", 0, RW_PIC },
|
||||
{ "bg_y", 2016, RW_NUM }, { "bg_mo", 4, RW_NUM }, { "bg_d", 14, RW_NUM }, { "bg_h", 14, RW_NUM },
|
||||
{ "bg_mi", 0, RW_NUM },
|
||||
{ "ed_h", 14, RW_NUM }, { "ed_mi", 0, RW_NUM },
|
||||
{ "lg_pd", 3, RW_NUM }, { "lg_cnt", 0, RW_NUM },
|
||||
}, // 3
|
||||
{
|
||||
{ "lg_r", 0, RW_PIC}, { "lg_b", 0, RW_PIC }, { "lg_uvb", 0, RW_PIC }, { "water", 0, RW_PIC },
|
||||
{ "bg_y", 2016, RW_NUM }, { "bg_mo", 4, RW_NUM }, { "bg_d", 14, RW_NUM }, { "bg_h", 14, RW_NUM },
|
||||
{ "bg_mi", 0, RW_NUM },
|
||||
{ "ed_h", 14, RW_NUM }, { "ed_mi", 0, RW_NUM },
|
||||
{ "lg_pd", 3, RW_NUM }, { "lg_cnt", 0, RW_NUM },
|
||||
}, // 4
|
||||
{
|
||||
{ "lg_r", 0, RW_PIC}, { "lg_b", 0, RW_PIC }, { "lg_uvb", 0, RW_PIC }, { "water", 0, RW_PIC },
|
||||
{ "bg_y", 2016, RW_NUM }, { "bg_mo", 4, RW_NUM }, { "bg_d", 14, RW_NUM }, { "bg_h", 14, RW_NUM },
|
||||
{ "bg_mi", 0, RW_NUM },
|
||||
{ "ed_h", 14, RW_NUM }, { "ed_mi", 0, RW_NUM },
|
||||
{ "lg_pd", 3, RW_NUM }, { "lg_cnt", 0, RW_NUM },
|
||||
}, // 5
|
||||
{
|
||||
{ "lg_r", 0, RW_PIC}, { "lg_b", 0, RW_PIC }, { "lg_uvb", 0, RW_PIC }, { "water", 0, RW_PIC },
|
||||
{ "bg_y", 2016, RW_NUM }, { "bg_mo", 4, RW_NUM }, { "bg_d", 14, RW_NUM }, { "bg_h", 14, RW_NUM },
|
||||
{ "bg_mi", 0, RW_NUM },
|
||||
{ "ed_h", 14, RW_NUM }, { "ed_mi", 0, RW_NUM },
|
||||
{ "lg_pd", 3, RW_NUM }, { "lg_cnt", 0, RW_NUM },
|
||||
}, // 6
|
||||
{
|
||||
{ "lg_r", 0, RW_PIC}, { "lg_b", 0, RW_PIC }, { "lg_uvb", 0, RW_PIC }, { "water", 0, RW_PIC },
|
||||
{ "bg_y", 2016, RW_NUM }, { "bg_mo", 4, RW_NUM }, { "bg_d", 14, RW_NUM }, { "bg_h", 14, RW_NUM },
|
||||
{ "bg_mi", 0, RW_NUM },
|
||||
{ "ed_h", 14, RW_NUM }, { "ed_mi", 0, RW_NUM },
|
||||
{ "lg_pd", 3, RW_NUM }, { "lg_cnt", 0, RW_NUM },
|
||||
}, // 7
|
||||
};
|
||||
|
||||
static char tft_cmd_str[10];
|
||||
static char tft_cmd_str[20];
|
||||
|
||||
/*
|
||||
*
|
||||
|
|
@ -89,6 +139,7 @@ static char tft_cmd_str[10];
|
|||
void tft_init(void)
|
||||
{
|
||||
uart_init(TFT_UARTX, 9600);
|
||||
tft_send_cmd("page original");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -104,11 +155,67 @@ void tft_send_cmd(const char *cmd)
|
|||
uart_putchar(TFT_UARTX, 0xff);
|
||||
}
|
||||
|
||||
void tft_set_color(uint8_t etn, tft_colour tft_col)
|
||||
{
|
||||
switch (tft_stt.pgn)
|
||||
{
|
||||
case ORIGINAL_PG:
|
||||
break;
|
||||
case MENU_PG:
|
||||
switch (kvp_menu[etn].attr)
|
||||
{
|
||||
case R_NUM:
|
||||
case RW_NUM:
|
||||
sprintf(tft_cmd_str, "%s.bco=%d", kvp_menu[etn].key, tft_col);
|
||||
tft_send_cmd(tft_cmd_str);
|
||||
sprintf(tft_cmd_str, "ref %s", kvp_menu[etn].key);
|
||||
tft_send_cmd(tft_cmd_str);
|
||||
break;
|
||||
case RW_PIC:
|
||||
case SW_PAGE:
|
||||
sprintf(tft_cmd_str, "%s_sg.bco=%d", kvp_menu[etn].key, tft_col);
|
||||
tft_send_cmd(tft_cmd_str);
|
||||
sprintf(tft_cmd_str, "ref %s_sg", kvp_menu[etn].key);
|
||||
tft_send_cmd(tft_cmd_str);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case OBJ_SET_PG:
|
||||
switch (kvp_obj_set[tft_stt.objn][etn].attr)
|
||||
{
|
||||
case R_NUM:
|
||||
case RW_NUM:
|
||||
sprintf(tft_cmd_str, "%s.bco=%d", kvp_obj_set[tft_stt.objn][etn].key, tft_col);
|
||||
tft_send_cmd(tft_cmd_str);
|
||||
sprintf(tft_cmd_str, "ref %s", kvp_obj_set[tft_stt.objn][etn].key);
|
||||
tft_send_cmd(tft_cmd_str);
|
||||
break;
|
||||
case RW_PIC:
|
||||
case SW_PAGE:
|
||||
sprintf(tft_cmd_str, "%s_sg.bco=%d", kvp_obj_set[tft_stt.objn][etn].key, tft_col);
|
||||
tft_send_cmd(tft_cmd_str);
|
||||
sprintf(tft_cmd_str, "ref %s_sg", kvp_obj_set[tft_stt.objn][etn].key);
|
||||
tft_send_cmd(tft_cmd_str);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
void tft_up(void)
|
||||
{
|
||||
uint8_t etn_log = tft_stt.etn;
|
||||
|
||||
switch (tft_stt.pgn)
|
||||
{
|
||||
case ORIGINAL_PG:
|
||||
|
|
@ -124,6 +231,19 @@ void tft_up(void)
|
|||
tft_stt.ln--;
|
||||
}
|
||||
tft_stt.etn = menu_lyt[tft_stt.ln];
|
||||
|
||||
switch (kvp_menu[tft_stt.etn].attr)
|
||||
{
|
||||
case R_NUM:
|
||||
case RW_NUM:
|
||||
case RW_PIC:
|
||||
case SW_PAGE:
|
||||
tft_set_color(etn_log, TFT_BACK);
|
||||
tft_set_color(tft_stt.etn, TFT_PURPLE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case OBJ_SET_PG:
|
||||
if (tft_stt.ln > 0)
|
||||
|
|
@ -131,6 +251,20 @@ void tft_up(void)
|
|||
tft_stt.ln--;
|
||||
}
|
||||
tft_stt.etn = obj_set_lyt[tft_stt.ln];
|
||||
|
||||
|
||||
switch (kvp_obj_set[tft_stt.objn][tft_stt.etn].attr)
|
||||
{
|
||||
case R_NUM:
|
||||
case RW_NUM:
|
||||
case RW_PIC:
|
||||
case SW_PAGE:
|
||||
tft_set_color(etn_log, TFT_BACK);
|
||||
tft_set_color(tft_stt.etn, TFT_PURPLE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
@ -140,36 +274,67 @@ void tft_up(void)
|
|||
|
||||
void tft_down(void)
|
||||
{
|
||||
uint8_t etn_log = tft_stt.etn;
|
||||
|
||||
switch (tft_stt.pgn)
|
||||
{
|
||||
case ORIGINAL_PG:
|
||||
if (tft_stt.ln < sizeof(original_lyt) / sizeof(uint8_t) - 1)
|
||||
if (tft_stt.ln < sizeof(original_lyt) / sizeof(uint8_t) - 2)
|
||||
{
|
||||
tft_stt.ln++;
|
||||
}
|
||||
tft_stt.etn = original_lyt[tft_stt.ln];
|
||||
break;
|
||||
case MENU_PG:
|
||||
if (tft_stt.ln < sizeof(menu_lyt) / sizeof(uint8_t) - 1)
|
||||
if (tft_stt.ln < sizeof(menu_lyt) / sizeof(uint8_t) - 2)
|
||||
{
|
||||
tft_stt.ln++;
|
||||
}
|
||||
tft_stt.etn = menu_lyt[tft_stt.ln];
|
||||
|
||||
switch (kvp_menu[tft_stt.etn].attr)
|
||||
{
|
||||
case R_NUM:
|
||||
case RW_NUM:
|
||||
case RW_PIC:
|
||||
case SW_PAGE:
|
||||
tft_set_color(etn_log, TFT_BACK);
|
||||
tft_set_color(tft_stt.etn, TFT_PURPLE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case OBJ_SET_PG:
|
||||
if (tft_stt.ln < sizeof(obj_set_lyt) / sizeof(uint8_t) - 1)
|
||||
if (tft_stt.ln < sizeof(obj_set_lyt) / sizeof(uint8_t) - 2)
|
||||
{
|
||||
tft_stt.ln++;
|
||||
}
|
||||
tft_stt.etn = obj_set_lyt[tft_stt.ln];
|
||||
break;
|
||||
|
||||
switch (kvp_obj_set[tft_stt.objn][tft_stt.etn].attr)
|
||||
{
|
||||
case R_NUM:
|
||||
case RW_NUM:
|
||||
case RW_PIC:
|
||||
case SW_PAGE:
|
||||
tft_set_color(etn_log, TFT_BACK);
|
||||
tft_set_color(tft_stt.etn, TFT_PURPLE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void tft_left(void)
|
||||
{
|
||||
uint8_t etn_log = tft_stt.etn;
|
||||
|
||||
switch (tft_stt.pgn)
|
||||
{
|
||||
case ORIGINAL_PG:
|
||||
|
|
@ -189,6 +354,18 @@ void tft_left(void)
|
|||
tft_stt.ln--;
|
||||
}
|
||||
}
|
||||
switch (kvp_menu[tft_stt.etn].attr)
|
||||
{
|
||||
case R_NUM:
|
||||
case RW_NUM:
|
||||
case RW_PIC:
|
||||
case SW_PAGE:
|
||||
tft_set_color(etn_log, TFT_BACK);
|
||||
tft_set_color(tft_stt.etn, TFT_PURPLE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case OBJ_SET_PG:
|
||||
if (tft_stt.etn > 0)
|
||||
|
|
@ -198,6 +375,18 @@ void tft_left(void)
|
|||
tft_stt.ln--;
|
||||
}
|
||||
}
|
||||
switch (kvp_obj_set[tft_stt.objn][tft_stt.etn].attr)
|
||||
{
|
||||
case R_NUM:
|
||||
case RW_NUM:
|
||||
case RW_PIC:
|
||||
case SW_PAGE:
|
||||
tft_set_color(etn_log, TFT_BACK);
|
||||
tft_set_color(tft_stt.etn, TFT_PURPLE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
@ -207,6 +396,8 @@ void tft_left(void)
|
|||
|
||||
void tft_right(void)
|
||||
{
|
||||
uint8_t etn_log = tft_stt.etn;
|
||||
|
||||
switch (tft_stt.pgn)
|
||||
{
|
||||
case ORIGINAL_PG:
|
||||
|
|
@ -226,6 +417,19 @@ void tft_right(void)
|
|||
tft_stt.ln++;
|
||||
}
|
||||
}
|
||||
|
||||
switch (kvp_menu[tft_stt.etn].attr)
|
||||
{
|
||||
case R_NUM:
|
||||
case RW_NUM:
|
||||
case RW_PIC:
|
||||
case SW_PAGE:
|
||||
tft_set_color(etn_log, TFT_BACK);
|
||||
tft_set_color(tft_stt.etn, TFT_PURPLE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case OBJ_SET_PG:
|
||||
if (tft_stt.etn < obj_set_lyt[sizeof(obj_set_lyt) / sizeof(uint8_t) - 1] - 1)
|
||||
|
|
@ -235,6 +439,19 @@ void tft_right(void)
|
|||
tft_stt.ln++;
|
||||
}
|
||||
}
|
||||
|
||||
switch (kvp_obj_set[tft_stt.objn][tft_stt.etn].attr)
|
||||
{
|
||||
case R_NUM:
|
||||
case RW_NUM:
|
||||
case RW_PIC:
|
||||
case SW_PAGE:
|
||||
tft_set_color(etn_log, TFT_BACK);
|
||||
tft_set_color(tft_stt.etn, TFT_PURPLE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
@ -249,13 +466,13 @@ void refrush_obj(void)
|
|||
switch (kvp_obj_set[tft_stt.objn][tft_stt.etn].attr)
|
||||
{
|
||||
case R_NUM:
|
||||
sprintf(tft_cmd_str,"%s.txt=\"%d\"",
|
||||
sprintf(tft_cmd_str,"%s.val=%d",
|
||||
kvp_obj_set[tft_stt.objn][tft_stt.etn].key,
|
||||
kvp_obj_set[tft_stt.objn][tft_stt.etn].value);
|
||||
tft_send_cmd(tft_cmd_str);
|
||||
break;
|
||||
case RW_NUM:
|
||||
sprintf(tft_cmd_str,"%s.txt=\"%d\"",
|
||||
sprintf(tft_cmd_str,"%s.val=%d",
|
||||
kvp_obj_set[tft_stt.objn][tft_stt.etn].key,
|
||||
kvp_obj_set[tft_stt.objn][tft_stt.etn].value);
|
||||
tft_send_cmd(tft_cmd_str);
|
||||
|
|
@ -295,6 +512,7 @@ void tft_ret(void)
|
|||
tft_stt.ln = 0;
|
||||
tft_stt.etn = 0;
|
||||
tft_send_cmd("page original");
|
||||
tft_set_color(tft_stt.etn, TFT_PURPLE);
|
||||
break;
|
||||
case OBJ_SET_PG:
|
||||
tft_stt.pgn = MENU_PG;
|
||||
|
|
@ -302,6 +520,7 @@ void tft_ret(void)
|
|||
tft_stt.etn = 0;
|
||||
tft_send_cmd("page menu");
|
||||
refrush_menu();
|
||||
tft_set_color(tft_stt.etn, TFT_PURPLE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
@ -310,28 +529,13 @@ void tft_ret(void)
|
|||
}
|
||||
|
||||
|
||||
void tft_ok(void)
|
||||
void tft_input(void)
|
||||
{
|
||||
input_limit in_lmt;
|
||||
int16_t in_v, bg_v;
|
||||
switch (tft_stt.pgn)
|
||||
{
|
||||
case ORIGINAL_PG:
|
||||
switch (kvp_obj_set[tft_stt.objn][tft_stt.etn].attr)
|
||||
{
|
||||
case R_NUM:
|
||||
break;
|
||||
case RW_NUM:
|
||||
break;
|
||||
case RW_PIC:
|
||||
break;
|
||||
case SW_PAGE:
|
||||
tft_stt.pgn = MENU_PG;
|
||||
tft_stt.ln = 0;
|
||||
tft_stt.etn = 0;
|
||||
tft_send_cmd("page menu");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case MENU_PG:
|
||||
switch (kvp_menu[tft_stt.etn].attr)
|
||||
|
|
@ -339,17 +543,40 @@ void tft_ok(void)
|
|||
case R_NUM:
|
||||
break;
|
||||
case RW_NUM:
|
||||
tft_set_color(tft_stt.etn, TFT_RED);
|
||||
|
||||
in_lmt = tft_input_limit(kvp_menu[tft_stt.etn].key);
|
||||
bg_v = kvp_menu[tft_stt.etn].value;
|
||||
knob_enable();
|
||||
while (get_key_mean(RET_KEY) == N_KEY)
|
||||
{
|
||||
kvp_menu[tft_stt.etn].value += get_knob_val();
|
||||
sprintf(tft_cmd_str, "%s.txt=\"%d\"", kvp_menu[tft_stt.etn].key,
|
||||
in_v = bg_v + get_knob_val();
|
||||
if (in_v < in_lmt.min)
|
||||
{
|
||||
kvp_menu[tft_stt.etn].value = in_lmt.min;
|
||||
bg_v = in_lmt.min;
|
||||
knob_clear();
|
||||
}
|
||||
else if (in_v > in_lmt.max)
|
||||
{
|
||||
kvp_menu[tft_stt.etn].value = in_lmt.max;
|
||||
bg_v = in_lmt.max;
|
||||
knob_clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
kvp_menu[tft_stt.etn].value = in_v;
|
||||
}
|
||||
sprintf(tft_cmd_str, "%s.val=%d", kvp_menu[tft_stt.etn].key,
|
||||
kvp_menu[tft_stt.etn].value);
|
||||
tft_send_cmd(tft_cmd_str);
|
||||
}
|
||||
knob_disable();
|
||||
tft_set_color(tft_stt.etn, TFT_PURPLE);
|
||||
clear_key_m();
|
||||
break;
|
||||
case RW_PIC:
|
||||
tft_set_color(tft_stt.etn, TFT_RED);
|
||||
while (get_key_mean(RET_KEY) == N_KEY)
|
||||
{
|
||||
if (get_key_mean(UP_KEY) == S_KEY || get_key_mean(DOWN_KEY) == S_KEY)
|
||||
|
|
@ -360,36 +587,55 @@ void tft_ok(void)
|
|||
tft_send_cmd(tft_cmd_str);
|
||||
}
|
||||
}
|
||||
tft_set_color(tft_stt.etn, TFT_PURPLE);
|
||||
clear_key_m();
|
||||
break;
|
||||
case SW_PAGE:
|
||||
tft_stt.pgn = OBJ_SET_PG;
|
||||
tft_stt.objn = kvp_menu[tft_stt.etn].value;
|
||||
tft_stt.ln = 0;
|
||||
tft_stt.etn = 0;
|
||||
tft_send_cmd("page obj_set");
|
||||
refrush_obj();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case OBJ_SET_PG:
|
||||
switch (kvp_obj_set[tft_stt.objn][tft_stt.etn].attr)
|
||||
{
|
||||
case R_NUM:
|
||||
break;
|
||||
case RW_NUM:
|
||||
tft_set_color(tft_stt.etn, TFT_RED);
|
||||
in_lmt = tft_input_limit(kvp_obj_set[tft_stt.objn][tft_stt.etn].key);
|
||||
bg_v = kvp_obj_set[tft_stt.objn][tft_stt.etn].value;
|
||||
knob_enable();
|
||||
while (get_key_mean(RET_KEY) == N_KEY)
|
||||
{
|
||||
kvp_obj_set[tft_stt.objn][tft_stt.etn].value += get_knob_val();
|
||||
sprintf(tft_cmd_str,"%s.txt=\"%d\"",
|
||||
kvp_obj_set[tft_stt.objn][tft_stt.etn].key,
|
||||
in_v = bg_v + get_knob_val();
|
||||
if (in_v < in_lmt.min)
|
||||
{
|
||||
kvp_obj_set[tft_stt.objn][tft_stt.etn].value = in_lmt.min;
|
||||
bg_v = in_lmt.min;
|
||||
knob_clear();
|
||||
}
|
||||
else if (in_v > in_lmt.max)
|
||||
{
|
||||
kvp_obj_set[tft_stt.objn][tft_stt.etn].value = in_lmt.max;
|
||||
bg_v = in_lmt.max;
|
||||
knob_clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
kvp_obj_set[tft_stt.objn][tft_stt.etn].value = in_v;
|
||||
}
|
||||
sprintf(tft_cmd_str, "%s.val=%d", kvp_obj_set[tft_stt.objn][tft_stt.etn].key,
|
||||
kvp_obj_set[tft_stt.objn][tft_stt.etn].value);
|
||||
tft_send_cmd(tft_cmd_str);
|
||||
}
|
||||
knob_disable();
|
||||
tft_set_color(tft_stt.etn, TFT_PURPLE);
|
||||
clear_key_m();
|
||||
break;
|
||||
case RW_PIC:
|
||||
tft_set_color(tft_stt.etn, TFT_RED);
|
||||
|
||||
while (get_key_mean(RET_KEY) == N_KEY)
|
||||
{
|
||||
if (get_key_mean(UP_KEY) == S_KEY || get_key_mean(DOWN_KEY))
|
||||
|
|
@ -402,6 +648,79 @@ void tft_ok(void)
|
|||
tft_send_cmd(tft_cmd_str);
|
||||
}
|
||||
}
|
||||
|
||||
tft_set_color(tft_stt.etn, TFT_PURPLE);
|
||||
clear_key_m();
|
||||
break;
|
||||
case SW_PAGE:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void tft_ok(void)
|
||||
{
|
||||
switch (tft_stt.pgn)
|
||||
{
|
||||
case ORIGINAL_PG:
|
||||
switch (SW_PAGE)
|
||||
{
|
||||
case R_NUM:
|
||||
break;
|
||||
case RW_NUM:
|
||||
break;
|
||||
case RW_PIC:
|
||||
break;
|
||||
case SW_PAGE:
|
||||
tft_stt.pgn = MENU_PG;
|
||||
tft_stt.ln = 0;
|
||||
tft_stt.etn = 0;
|
||||
tft_send_cmd("page menu");
|
||||
tft_set_color(tft_stt.etn, TFT_PURPLE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case MENU_PG:
|
||||
switch (kvp_menu[tft_stt.etn].attr)
|
||||
{
|
||||
case R_NUM:
|
||||
break;
|
||||
case RW_NUM:
|
||||
tft_input();
|
||||
break;
|
||||
case RW_PIC:
|
||||
tft_input();
|
||||
break;
|
||||
case SW_PAGE:
|
||||
tft_stt.pgn = OBJ_SET_PG;
|
||||
tft_stt.objn = kvp_menu[tft_stt.etn].value;
|
||||
tft_stt.ln = 0;
|
||||
tft_stt.etn = 0;
|
||||
tft_send_cmd("page obj_set");
|
||||
tft_set_color(tft_stt.etn, TFT_PURPLE);
|
||||
//refrush_obj();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case OBJ_SET_PG:
|
||||
switch (kvp_obj_set[tft_stt.objn][tft_stt.etn].attr)
|
||||
{
|
||||
case R_NUM:
|
||||
break;
|
||||
case RW_NUM:
|
||||
tft_input();
|
||||
break;
|
||||
case RW_PIC:
|
||||
tft_input();
|
||||
break;
|
||||
case SW_PAGE:
|
||||
break;
|
||||
|
|
@ -415,3 +734,100 @@ void tft_ok(void)
|
|||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
int16_t get_value_of_kvp(char *name)
|
||||
{
|
||||
for (int i = 0; i < sizeof(kvp_menu) / sizeof(kv_pair); i++)
|
||||
{
|
||||
if (strcmp(name, kvp_menu[i].key) == 0)
|
||||
{
|
||||
return kvp_menu[i].value;
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < sizeof(kvp_obj_set[0]) / sizeof(kv_pair); i++)
|
||||
{
|
||||
if (strcmp(name, kvp_obj_set[0][i].key) == 0);
|
||||
{
|
||||
return kvp_obj_set[0][i].value;
|
||||
}
|
||||
}
|
||||
return ~0;
|
||||
}
|
||||
|
||||
input_limit tft_input_limit(char *name)
|
||||
{
|
||||
input_limit in_lmt;
|
||||
if (strcmp(name, "st_y") == 0)
|
||||
{
|
||||
in_lmt.min = 1970;
|
||||
in_lmt.max = 2100;
|
||||
}
|
||||
else if (strcmp(name, "st_mo") == 0)
|
||||
{
|
||||
in_lmt.min = 1;
|
||||
in_lmt.max = 12;
|
||||
}
|
||||
else if (strcmp(name, "st_d") == 0)
|
||||
{
|
||||
in_lmt.min = 1;
|
||||
in_lmt.max = get_month_days(get_value_of_kvp("st_y"), get_value_of_kvp("st_mo"));
|
||||
}
|
||||
else if (strcmp(name, "st_h") == 0)
|
||||
{
|
||||
in_lmt.min = 0;
|
||||
in_lmt.max = 23;
|
||||
}
|
||||
else if (strcmp(name, "st_mi") == 0)
|
||||
{
|
||||
in_lmt.min = 0;
|
||||
in_lmt.max = 59;
|
||||
}
|
||||
else if (strcmp(name, "bg_y") == 0)
|
||||
{
|
||||
in_lmt.min = 1970;
|
||||
in_lmt.max = 2100;
|
||||
}
|
||||
else if (strcmp(name, "bg_mo") == 0)
|
||||
{
|
||||
in_lmt.min = 1;
|
||||
in_lmt.max = 12;
|
||||
}
|
||||
else if (strcmp(name, "bg_d") == 0)
|
||||
{
|
||||
in_lmt.min = 1;
|
||||
in_lmt.max = get_month_days(get_value_of_kvp("bg_y"), get_value_of_kvp("bg_mo"));
|
||||
}
|
||||
else if (strcmp(name, "bg_h") == 0)
|
||||
{
|
||||
in_lmt.min = 0;
|
||||
in_lmt.max = 23;
|
||||
}
|
||||
else if (strcmp(name, "bg_mi") == 0)
|
||||
{
|
||||
in_lmt.min = 0;
|
||||
in_lmt.max = 59;
|
||||
}
|
||||
else if (strcmp(name, "bg_mi") == 0)
|
||||
{
|
||||
in_lmt.min = 0;
|
||||
in_lmt.max = 59;
|
||||
}
|
||||
else if (strcmp(name, "ed_h") == 0)
|
||||
{
|
||||
in_lmt.min = 0;
|
||||
in_lmt.max = 23;
|
||||
}
|
||||
else if (strcmp(name, "ed_mi") == 0)
|
||||
{
|
||||
in_lmt.min = 0;
|
||||
in_lmt.max = 59;
|
||||
}
|
||||
else
|
||||
{
|
||||
in_lmt.min = 0;
|
||||
in_lmt.max = 0;
|
||||
}
|
||||
return in_lmt;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,31 @@
|
|||
/*
|
||||
* time.c - 时间处理
|
||||
*/
|
||||
|
||||
#include "include/time.h"
|
||||
|
||||
|
||||
|
||||
uint8_t is_leapyear(uint16_t year)
|
||||
{
|
||||
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
|
||||
}
|
||||
|
||||
uint8_t get_month_days(uint16_t year, uint8_t month)
|
||||
{
|
||||
switch (month)
|
||||
{
|
||||
case 4:
|
||||
case 6:
|
||||
case 9:
|
||||
case 11:
|
||||
return 30;
|
||||
case 2:
|
||||
if (is_leapyear(year))
|
||||
return 29;
|
||||
else
|
||||
return 28;
|
||||
default:
|
||||
return 31;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue