📄 os.lst
字号:
C51 COMPILER V8.02 OS 04/26/2008 21:37:30 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE OS
OBJECT MODULE PLACED IN os.OBJ
COMPILER INVOKED BY: D:\Keil1\C51\BIN\C51.EXE os.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 #include "os.h"
3 #include "lcd.h"
4 #include "datetime.h"
5 #include "ds18b20.h"
6 #include "keyboard.h"
7 #include "voice.h"
8 #include "ctrl.h"
9
10
11
12 #define OS_STATUS_REDRAW 0x80
13 #define OS_STATUS_LOOP 0x40
14 #define OS_STATUS_USERMASK 0x0F
15
16 #define SEC_PER_CONVERT 3
17
18 #define LOGO_VERSION "TX-Thermo V1.30"
19 #define LOGO_MAKER "(C)2006 TOT Studio"
20
21
22
23 BIT os_TempeUnitInF;
24 //BIT os_EnableVoice[25]; //0~23=hour, 24=alarm
25 BYTE os_EnableVoice[4]; //0~23=hour, 24=alarm
26
27
28
29 //////////////////////////////////////////////////////////////////////
30 //
31 // “控件”
32
33 void osShowProcessing(BYTE line)
34 {
35 1 BYTE i;
36 1 lcdTextOut(0,line,"");
37 1 for (i=0; i<20; i++)
38 1 {
39 2 lcdTextAddOut( ((i - g_14HzClock) & 0x08) ? " " : ">" );
40 2 }
41 1 }
42
43 /*
44 BYTE osShowEdit(BYTE x, BYTE y, char* lpBuf, BYTE szBuf)
45 // return 0 = esc
46 // return 1 = ok
47 // return 2 = over
48 {
49 BYTE i,chr,pos,key;
50
51 if (szBuf == 0) return 2; // 缓冲区长度不能为零
52
53 for (i=0;i<szBuf;i++) lpBuf[i]=' ';
54 lpBuf[szBuf-1] = 0; // 最后一个字节设为 0
55 lcdDisplayOnOffControl(1,1,0); // show cursor (BIT d, BIT c, BIT b)
C51 COMPILER V8.02 OS 04/26/2008 21:37:30 PAGE 2
56 pos=0;
57
58 while (pos+1 < szBuf)
59 {
60 lcdTextOut(x,y,lpBuf);
61 lcdTextOut(x+pos,y,""); // set cursor
62
63 do{
64 key = kbdGetKeyPress(); // wait for an input
65 }while (key >= 16);
66
67 switch ( key ) // convert vkey to chr
68 {
69 case VKEY_0: chr='0'; break;
70 case VKEY_1: chr='1'; break;
71 case VKEY_2: chr='2'; break;
72 case VKEY_3: chr='3'; break;
73 case VKEY_4: chr='4'; break;
74 case VKEY_5: chr='5'; break;
75 case VKEY_6: chr='6'; break;
76 case VKEY_7: chr='7'; break;
77 case VKEY_8: chr='8'; break;
78 case VKEY_9: chr='9'; break;
79 case VKEY_UP: chr='U'; break;
80 case VKEY_DOWN: chr='D'; break;
81 case VKEY_LEFT: chr='L'; break;
82 case VKEY_RIGHT: chr='R'; break;
83 case VKEY_ENTER: chr='E'; break;
84 case VKEY_CANCEL: chr='C'; break;
85 default: chr='U';
86 }
87
88 if (('0' <= chr) && (chr <= '9'))
89 {
90 //数字
91 lpBuf[pos] = chr;
92 pos++;
93 }
94 else if (chr == 'E')
95 {
96 //确定
97 pos = szBuf;
98 }
99 else if (chr == 'C')
100 {
101 //退出
102 pos = szBuf;
103 }
104 else if (chr == 'L')
105 {
106 //退格
107 if (pos>0)
108 {
109 pos--;
110 lpBuf[pos] = ' ';
111 }
112 }
113 }
114
115 lcdDisplayOnOffControl(1,0,0); // hide cursor (BIT d, BIT c, BIT b)
116 if (chr=='C') return 0;
117 if (chr=='E') return 1;
C51 COMPILER V8.02 OS 04/26/2008 21:37:30 PAGE 3
118 return 2;
119 }
120 */
121
122 //////////////////////////////////////////////////////////////////////
123 //
124 // Boot
125
126 void osBootLogo()
127 {
128 1 OWBROM searchPtr;
129 1 BIT skip = FALSE;
130 1
131 1 lcdClearDisplay();
132 1 lcdTextOut(2,0,LOGO_VERSION);
133 1 lcdTextOut(1,1,LOGO_MAKER);
134 1 g_1HzClock = 0;
135 1
136 1
137 1 lcdTextOut(0,3,"ESC=Skip ");
138 1 owbPreSearchDevices( &searchPtr );
139 1 while ( !owbIsSearchEnd(&searchPtr) )
140 1 {
141 2 if ( owbSearchPath( &searchPtr , OWB_DEVICESEARCH ) )
142 2 {
143 3 owbCacheSearch();
144 3
145 3 lcdTextOut(16,3,"x");
146 3 lcdUIntOut( owbGetSearchIndex()+1, 3 );
147 3 }
148 2 osShowProcessing(2);
149 2 if ( kbdGetKeyPress()==VKEY_CANCEL )
150 2 {
151 3 skip = TRUE;
152 3 break;
153 3 }
154 2 }
155 1 owbUnpreSearchDevices();
156 1
157 1
158 1 while ((g_1HzClock < 5) && ( !skip ))
159 1 {
160 2 osShowProcessing(2);
161 2 }
162 1 }
163
164
165 void osSelectSearchDevice()
166 {
167 1 BYTE key,status,cacheIndex;
168 1 OWBROM searchPtr;
169 1
170 1 status = 1;
171 1 cacheIndex = owbGetCacheIndex();
172 1
173 1 while (status)
174 1 {
175 2 switch (status)
176 2 {
177 3 case 1: //show info
178 3 lcdClearDisplay();
179 3 lcdTextOut(0,0,"Sel & Search Device");
C51 COMPILER V8.02 OS 04/26/2008 21:37:30 PAGE 4
180 3
181 3 lcdTextOut(0,1,"CurSel/Total=");
182 3 lcdUIntOut( owbGetCacheIndex()+1, 3 );
183 3 lcdTextAddOut("/");
184 3 lcdUIntOut( owbCountDevices(), 3 );
185 3
186 3 lcdTextOut(0,2,"Select this: ");
187 3 lcdTextOut(13,2,"");
188 3 lcdUIntOut( cacheIndex+1, 3 );
189 3
190 3 status = 2;
191 3 break;
192 3 case 2: //set sel
193 3 lcdTextOut(0,3,"UpDn=Sel Ok=Search");
194 3 while (1)
195 3 {
196 4 key = kbdGetKeyPress();
197 4 if (key == VKEY_ENTER)
198 4 {
199 5 status = 3;
200 5 break;
201 5 }
202 4 if (key == VKEY_CANCEL)
203 4 {
204 5 status = 0;
205 5 break;
206 5 }
207 4 if (key == VKEY_UP)
208 4 {
209 5 status = 1;
210 5 cacheIndex++;
211 5 if (cacheIndex >= owbCountDevices()) cacheIndex = 0;
212 5 break;
213 5 }
214 4 if (key == VKEY_DOWN)
215 4 {
216 5 status = 1;
217 5 if (cacheIndex == 0) cacheIndex = owbCountDevices()-1;
218 5 else cacheIndex--;
219 5 break;
220 5 }
221 4 }
222 3 break;
223 3 case 3: //processing
224 3 lcdTextOut(0,3,"ESC=Stop ");
225 3 owbPreSearchDevices( &searchPtr );
226 3 while ( !owbIsSearchEnd(&searchPtr) )
227 3 {
228 4 if ( owbSearchPath( &searchPtr , OWB_DEVICESEARCH ) )
229 4 {
230 5 if (owbGetSearchIndex() == cacheIndex)
231 5 owbCacheSearch();
232 5 lcdTextOut(17,1,"");
233 5 lcdUIntOut( owbGetSearchIndex()+1, 3 );
234 5 }
235 4 osShowProcessing(2);
236 4 if ( kbdGetKeyPress()==VKEY_CANCEL ) break;
237 4 }
238 3 owbUnpreSearchDevices();
239 3 status = 1;
240 3 break;
241 3 default:
C51 COMPILER V8.02 OS 04/26/2008 21:37:30 PAGE 5
242 3 status = 0;
243 3 }
244 2 }
245 1
246 1 // return UIGT_DESKTOP;
247 1 }
248
249
250 void osDesktop(void)
251 {
252 1 BYTE rcv,rt,sec,i,bAlarmSearchCycle;
253 1 TEMPE tempe;
254 1 DATETIME dtt;
255 1 OWBROM rom;
256 1
257 1 lcdClearDisplay();
258 1
259 1 rt = UIGT_LOOP;
260 1 sec = 0;
261 1 bAlarmSearchCycle = 0;
262 1
263 1 while (rt == UIGT_LOOP)
264 1 {
265 2 rcv = kbdGetKeyPress();
266 2 if (rcv >= 16) // Wireless Control
267 2 {
268 3 rcv = ctrlGetInputABC();
269 3 switch (rcv)
270 3 {
271 4 case 'A':
272 4 rcv = VKEY_0;
273 4 break;
274 4 case 'B':
275 4 rcv = VKEY_3;
276 4 break;
277 4 case 'C':
278 4 rcv = VKEY_4;
279 4 break;
280 4 default:
281 4 rcv = 0xff;
282 4 }
283 3 }
284 2 switch (rcv)
285 2 {
286 3 case VKEY_0:
287 3 vocTime();
288 3 vocTempe( &tempe, os_TempeUnitInF );
289 3 break;
290 3 case VKEY_1:
291 3 if (os_EnableVoice[3] & 0x01)
292 3 {
293 4 os_EnableVoice[3] = 0x00;
294 4 lcdTextOut(0,3,"Alarm Disable ");
295 4 }
296 3 else
297 3 {
298 4 os_EnableVoice[3] = 0xff;
299 4 lcdTextOut(0,3,"Alarm Enable ");
300 4 }
301 3 break;
302 3 case VKEY_2:
303 3 os_TempeUnitInF = ~os_TempeUnitInF;
C51 COMPILER V8.02 OS 04/26/2008 21:37:30 PAGE 6
304 3 if (os_TempeUnitInF) lcdTextOut(0,3,"Fahrenheit (F) ");
305 3 else lcdTextOut(0,3,"Celsius (C) ");
306 3 break;
307 3 case VKEY_3: // quick search
308 3 ;
309 3 for (i=0;i<8;i++) rom.b[i] = owbGetCacheROM(i);
310 3 owbIncRom(&rom,31);
311 3 while ( kbdGetKeyPress() != VKEY_CANCEL )
312 3 {
313 4 if ( owbSearchPath(&rom,OWB_DEVICESEARCH) )
314 4 {
315 5 owbCacheSearch();
316 5 vocSendUInt( owbGetCacheIndex() );
317 5 break;
318 5 }
319 4 if ( owbIsSearchEnd(&rom) )
320 4 {
321 5 owbPreSearchDevices( &rom );
322 5 }
323 4 osShowProcessing(2);
324 4 }
325 3 break;
326 3 case VKEY_4: // voice current ROM index
327 3 vocSendUInt( owbGetCacheIndex() );
328 3 break;
329 3 case VKEY_CANCEL:
330 3 vocStopAll();
331 3 os_EnableVoice[3] = 0x00;
332 3 lcdTextOut(0,3," ");
333 3 break;
334 3 case VKEY_ENTER:
335 3 rt = UIGT_MENU;
336 3 break;
337 3 default:
338 3 rcv = 0xff;
339 3 }
340 2
341 2 // 显示时间、温度
342 2 dtt = dttGetCurDateTime();
343 2 if (dtt.ss != sec)
344 2 {
345 3 if ((sec % SEC_PER_CONVERT) == 0)
346 3 {
347 4 owbReadMeasure( &tempe, FALSE );
348 4 lcdTextOut(6,1,"");
349 4 lcdTempeOut( &tempe, os_TempeUnitInF );
350 4
351 4 lcdTextOut(0,2,"ROM:");
352 4 for (i=0;i<8;i++) lcdHexOut( owbGetCacheROM(i) );
353 4 }
354 3
355 3 //yy-mm-dd
356 3 lcdTextOut(0,0,"");
357 3 lcdDateOut( &dtt );
358 3 //hh:mm:ss
359 3 lcdTextAddOut(" ");
360 3 lcdTimeOut( &dtt );
361 3
362 3 sec = dtt.ss;
363 3 }
364 2
365 2 //整点播报
C51 COMPILER V8.02 OS 04/26/2008 21:37:30 PAGE 7
366 2 if (g_HourClock)
367 2 {
368 3 g_HourClock = FALSE;
369 3 dtt = dttGetCurDateTime();
370 3 if ( owbGetRomBit((OWBROM*)os_EnableVoice,dtt.hh%24) )
371 3 {
372 4 vocTime();
373 4 vocTempe( &tempe, os_TempeUnitInF );
374 4 }
375 3 }
376 2
377 2 //alarm search a path
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -