📄 menu.lst
字号:
C51 COMPILER V8.05a MENU 10/28/2008 10:30:04 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE MENU
OBJECT MODULE PLACED IN menu.OBJ
COMPILER INVOKED BY: F:\Keil C51 V8\C51\BIN\C51.EXE menu.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "commons.h"
2
3 //以下定义菜单相关的参数
4 #define MENU_NUM 5
5 #define MENU_MAX 9999
6 #define MENU_MIN 0
7 #define E2PROM_FLAG_ADDR 0x10
8 #define E2PROM_ADDR 0x12
9 #define FLAG 1234
10
11 char _menu_name[] = {'a','b','c','d','e'};
12 unsigned char _delta[] = {55, 75, 10, 1, 5};
13 int _menu_value[] = {0, 0, 0, 0, 0};
14 int _default_value[] = {3500,500,1000,0, 80};
15
16 unsigned char _menu_idx = 0;
17 unsigned char _menu_status = MENU_OFF;
18 char _menu_str[] = " ";
19
20 void menu_init(void) {
21 1 unsigned int flag = 0;
22 1 read_e2prom(E2PROM_FLAG_ADDR, (unsigned char)&flag, 2);
23 1 if (flag != FLAG) {
24 2 flag = FLAG;
25 2 write_e2prom(E2PROM_FLAG_ADDR, (unsigned char)&flag, 2);
26 2 write_e2prom(E2PROM_ADDR, (unsigned char)&_default_value[0], sizeof(_default_value));
27 2 }
28 1 read_e2prom(E2PROM_ADDR, (unsigned char)&_menu_value[0], sizeof(_menu_value));
29 1 }
30
31 void menu_routine(void) {
32 1 char i = 0;
33 1 char key = get_key();
34 1
35 1 if (_menu_status == MENU_OFF) {
36 2 if (key == 0) {
37 3 _menu_status = MENU_ON;
38 3 _menu_idx = 0;
39 3 _key_led = 0x10;
40 3 //将e2prom里的5个参数读入_menu_value数组
41 3 read_e2prom(E2PROM_ADDR, (unsigned char)&_menu_value[0], sizeof(_menu_value));
42 3 }
43 2 } else {
44 2 if (key == 0) { //不保存键值,切换到下一个参数
45 3 _key_led = 0x10;
46 3 if (++_menu_idx == MENU_NUM) {
47 4 _key_led = 0;
48 4 _menu_status = MENU_OFF;
49 4 }
50 3 } else if (key == 1) { //保存键值,切换到下一个参数
51 3 _key_led = 0x20;
52 3 write_e2prom(E2PROM_ADDR + _menu_idx * 2, (unsigned char)&_menu_value[_menu_idx], 2);
53 3 if (++_menu_idx == MENU_NUM) {
54 4 _key_led = 0;
55 4 _menu_status = MENU_OFF;
C51 COMPILER V8.05a MENU 10/28/2008 10:30:04 PAGE 2
56 4 }
57 3 } else if (key == 2) { //参数值加1
58 3 _key_led = 0x40;
59 3 //if (++_menu_value[_menu_idx] > MENU_MAX) {
60 3 _menu_value[_menu_idx] += _delta[_menu_idx];
61 3 if (_menu_value[_menu_idx] > MENU_MAX) {
62 4 _menu_value[_menu_idx] = MENU_MAX;
63 4 }
64 3 } else if (key == 3) { //参数值减1
65 3 _key_led = 0x80;
66 3 //if (--_menu_value[_menu_idx] < MENU_MIN) {
67 3 _menu_value[_menu_idx] -= _delta[_menu_idx];
68 3 if (_menu_value[_menu_idx] < MENU_MIN) {
69 4 _menu_value[_menu_idx] = MENU_MIN;
70 4 }
71 3 }
72 2 }
73 1
74 1 if (_menu_status == MENU_ON) {
75 2 //菜单状态为开时,显示参数值
76 2 _menu_str[0] = _menu_name[_menu_idx];//参数名称
77 2 to_string(&_menu_str[2], 4, _menu_value[_menu_idx]);//从LED的第3位起显示参数值
78 2 print(_menu_str);
79 2 }
80 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 349 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 39 4
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -