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

📄 menu.c

📁 通过调节一个可变电阻得到变化的电压来模拟一个湿度度传感器
💻 C
字号:
#include "commons.h"

//以下定义菜单相关的参数
#define MENU_NUM	5
#define MENU_MAX	9999
#define MENU_MIN	0
#define E2PROM_FLAG_ADDR 0x10
#define E2PROM_ADDR 0x12
#define FLAG 1234

char _menu_name[] = {'a','b','c','d','e'};
unsigned char _delta[] = {55, 75, 10, 1, 5};
int _menu_value[]      = {0,  0,  0,  0, 0};
int _default_value[]   = {3500,500,1000,0, 80};

unsigned char _menu_idx = 0;
unsigned char _menu_status = MENU_OFF;
char _menu_str[] = "      ";

void menu_init(void) {
	unsigned int flag = 0;
	read_e2prom(E2PROM_FLAG_ADDR, (unsigned char)&flag, 2);
	if (flag != FLAG) {
		flag = FLAG;
		write_e2prom(E2PROM_FLAG_ADDR, (unsigned char)&flag, 2);
		write_e2prom(E2PROM_ADDR, (unsigned char)&_default_value[0], sizeof(_default_value)); 
	}
	read_e2prom(E2PROM_ADDR, (unsigned char)&_menu_value[0], sizeof(_menu_value));
}

void menu_routine(void) {
	char i = 0;
	char key = get_key();

	if (_menu_status == MENU_OFF) {
		if (key == 0) {
			_menu_status = MENU_ON;
			_menu_idx = 0;
			_key_led = 0x10;
			//将e2prom里的5个参数读入_menu_value数组
			read_e2prom(E2PROM_ADDR, (unsigned char)&_menu_value[0], sizeof(_menu_value));
		}
	} else {
		if (key == 0) { //不保存键值,切换到下一个参数
			_key_led = 0x10;
			if (++_menu_idx == MENU_NUM) {
				_key_led = 0;
				_menu_status = MENU_OFF;
			}
		} else if (key == 1) { //保存键值,切换到下一个参数
			_key_led = 0x20;
			write_e2prom(E2PROM_ADDR + _menu_idx * 2, (unsigned char)&_menu_value[_menu_idx], 2);
			if (++_menu_idx == MENU_NUM) {
				_key_led = 0;
				_menu_status = MENU_OFF;
			}
		} else if (key == 2) { //参数值加1
			_key_led = 0x40;				
			//if (++_menu_value[_menu_idx] > MENU_MAX) {
			_menu_value[_menu_idx] += _delta[_menu_idx];
			if (_menu_value[_menu_idx] > MENU_MAX) {
				_menu_value[_menu_idx] = MENU_MAX;
			}
		} else if (key == 3) { //参数值减1
			_key_led = 0x80;
			//if (--_menu_value[_menu_idx] < MENU_MIN) {
			_menu_value[_menu_idx] -= _delta[_menu_idx];
			if (_menu_value[_menu_idx] < MENU_MIN) {
				_menu_value[_menu_idx] = MENU_MIN;
			}
		}
	}

	if (_menu_status == MENU_ON) {
		//菜单状态为开时,显示参数值
		_menu_str[0] = _menu_name[_menu_idx];//参数名称
		to_string(&_menu_str[2], 4, _menu_value[_menu_idx]);//从LED的第3位起显示参数值
		print(_menu_str);
	}
}

⌨️ 快捷键说明

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