?? menu.lst
字號(hào):
C51 COMPILER V7.06 MENU 05/31/2009 01:55:42 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MENU
OBJECT MODULE PLACED IN Menu.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE software\Menu.c BROWSE DEBUG OBJECTEXTEND PRINT(.\Menu.lst) OBJECT(Menu.obj
-)
stmt level source
1 #include "main.h"
2 #include "port.h"
3 #include "DisplayDir.h"
4 #include "SysTick.h"
5
6 #include "key.h"
7 #include "Menu.h"
8 #include "RTC.h"
9
10
11 #define MAX_MENU_ITEM 1
12 void (code *FuncPtr)(void);
13 typedef struct {
14 uint8_t Current_Index;
15 uint8_t Set_Index;
16 uint8_t Enter_Index;
17 uint8_t Right_Index;
18 uint8_t Up_Index;
19 void (code *Current_Operation)(void);
20 }Key_Table;
21
22 static uint8_t Index = 0;
23 static UserChoose = 0; //用戶所選菜單項(xiàng)
24
25 // 時(shí)間變量
26 static uint8_t hour_temp, minute_temp;
27
28 // 函數(shù)列表
29 static void NopFunc(void);
30 static void MainMenuItem(void);
31 static void Exit_MainMenuItem(void);
32
33 static void AdjHourSelect(void);
34 static void AdjMinuteSelect(void);
35
36 static void AdjTime_Hour(void);
37 static void AdjTime_Minute(void);
38
39 static void SetTime_Enter(void);
40
41
42 Key_Table code table[] = {
43
44 // |----------------- Current_Index
45 // | |-------------- Set_Index
46 // | | |----------- Enter_Index
47 // | | | |------ Right_Index
48 // | | | | |- Up_Index
49 // | | | | |
50 {0, 1, 0, 0, 0, (*NopFunc)}, // 主菜單
51 {1, 4, 5, 255, 255, (*MainMenuItem)}, // SEL.0, 調(diào)時(shí)
52 {2, 4, 255, 255, 255, (*MainMenuItem)}, // SEL.1, 設(shè)鬧鈴
53 {3, 4, 255, 255, 255, (*MainMenuItem)}, // SEL.2, 刪除鬧鈴
54 {4, 4, 255, 255, 255, (*Exit_MainMenuItem)},// 退出菜單
C51 COMPILER V7.06 MENU 05/31/2009 01:55:42 PAGE 2
55
56 // SEL.0, 調(diào)時(shí)
57 {5, 1, 9, 6, 7, (*AdjHourSelect)}, // 調(diào)時(shí)選擇
58 {6, 1, 9, 5, 8, (*AdjMinuteSelect)}, // 調(diào)分選擇
59 {7, 1, 9, 6, 7, (*AdjTime_Hour)}, // 調(diào)時(shí)
60 {8, 1, 9, 5, 8, (*AdjTime_Minute)}, // 調(diào)分
61 {9, 0, 0, 0, 0, (*SetTime_Enter)}, // ok
62 // SEL.1, 設(shè)鬧鈴
63
64 };
65
66 void Menu_Change(uint8_t KeyNum)
67 {
68 1 uint8_t Index_Backup;
69 1 Index_Backup = Index; // Index備份
70 1 switch(KeyNum)
71 1 {
72 2 case K_Set: Index = table[Index].Set_Index; break;
73 2 case K_Right: Index = table[Index].Right_Index; break;
74 2 case K_Up: Index = table[Index].Up_Index; break;
75 2 case K_Enter: Index = table[Index].Enter_Index; break;
76 2 default: /* --------------------------- */ break;
77 2 }
78 1
79 1 if (255 == Index)
80 1 {
81 2 Index = Index_Backup; // 無效鍵
82 2 }
83 1 else
84 1 {
85 2 FuncPtr = table[Index].Current_Operation;
86 2 (*FuncPtr)();
87 2 }
88 1 }
89
90 void NopFunc(void)
91 {
92 1 // 空函數(shù),作用不小啊!!
93 1 }
94
95 // 主菜單item
96 void MainMenuItem(void)
97 {
98 1 LedChangeFlag = 0x00;
99 1 LedChangeFlag |= (1 << DOT3) | (1 << BIT4);
100 1 bUpdateDisplayEn = 0;
101 1
102 1 hour_temp = Rtc.hour; // 讀時(shí)間
103 1 minute_temp = Rtc.min;
104 1
105 1 if (UserChoose >= MAX_MENU_ITEM)
106 1 {
107 2 UserChoose = 0;
108 2 }
109 1
110 1 DisplayBuffer[0] = _S;
111 1 DisplayBuffer[1] = _E;
112 1 DisplayBuffer[2] = _L;
113 1 DisplayBuffer[3] = UserChoose++;
114 1 }
115 // 不保存退也菜單
116 void Exit_MainMenuItem(void)
C51 COMPILER V7.06 MENU 05/31/2009 01:55:42 PAGE 3
117 {
118 1 LedChangeFlag = 0x00;
119 1 LedChangeFlag |= (1 << DOT2); // 只有時(shí)鐘的時(shí)個(gè)位點(diǎn)可以閃爍
120 1 bUpdateDisplayEn = 1;
121 1
122 1 Index = 0;
123 1 UserChoose = 0;
124 1 }
125
126 // 調(diào)時(shí)位選擇
127 void AdjHourSelect(void)
128 {
129 1 LedChangeFlag = 0x00;
130 1 bUpdateDisplayEn = 0;
131 1
132 1 LedChangeFlag |= (1 << BIT1) | (1 << BIT2); // 調(diào)時(shí)選擇
133 1 UpdateDisplayBuffer(hour_temp, minute_temp);
134 1 }
135
136 // 調(diào)分位選擇
137 void AdjMinuteSelect(void)
138 {
139 1 LedChangeFlag = 0x00;
140 1 bUpdateDisplayEn = 0;
141 1
142 1 LedChangeFlag |= (1 << BIT3) | (1 << BIT4); // 調(diào)分選擇
143 1 UpdateDisplayBuffer(hour_temp, minute_temp);
144 1 }
145
146 // 調(diào)時(shí)
147 void AdjTime_Hour(void)
148 {
149 1 bUpdateDisplayEn = 0;
150 1
151 1 hour_temp++;
152 1 if (hour_temp >= 24)
153 1 hour_temp = 0;
154 1 DisplayBuffer[0] = hour_temp / 10;
155 1 DisplayBuffer[1] = hour_temp % 10;
156 1 }
157
158 // 調(diào)分
159 void AdjTime_Minute(void)
160 {
161 1 bUpdateDisplayEn = 0;
162 1
163 1 minute_temp++;
164 1 if (minute_temp >= 60)
165 1 minute_temp = 0;
166 1
167 1 DisplayBuffer[2] = minute_temp / 10;
168 1 DisplayBuffer[3] = minute_temp % 10;
169 1 }
170
171 // 調(diào)時(shí)OK
172 void SetTime_Enter(void)
173 {
174 1 Rtc.hour = hour_temp; // 時(shí)間
175 1 Rtc.min = minute_temp;
176 1 Rtc.sec = 0;
177 1 ClockReviseTemp = 0; // 復(fù)位校正計(jì)時(shí)器
178 1 ClockReviseTemp1 = 0;
C51 COMPILER V7.06 MENU 05/31/2009 01:55:42 PAGE 4
179 1 Exit_MainMenuItem();
180 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 300 ----
CONSTANT SIZE = 70 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -